mirror of
https://github.com/gorhill/uMatrix.git
synced 2024-05-18 11:13:28 +12:00
Compare commits
42 commits
Author | SHA1 | Date | |
---|---|---|---|
59d918356b | |||
9d97748772 | |||
8f8234dfae | |||
1603b33b27 | |||
0bcb7669e7 | |||
89b7e026c3 | |||
ba0dfe5d9b | |||
57eb9fc150 | |||
e0800f89df | |||
b26b3bb960 | |||
2d8e32c61b | |||
41133dffd2 | |||
a1ec20423c | |||
e3ebfdfba4 | |||
43cd137fff | |||
a697ce0be9 | |||
b75500eff4 | |||
3f4425d9db | |||
f8c82add03 | |||
a78a6465b0 | |||
ae7d450827 | |||
c908ae5210 | |||
ea688f3942 | |||
8a39b0e171 | |||
5c06fed370 | |||
035f3f53a2 | |||
17430ded93 | |||
b8e62f0c55 | |||
e800756163 | |||
0190fdaf3d | |||
0db579da97 | |||
e5cf0d4684 | |||
a2f213492e | |||
a9f32a475f | |||
cb9934f67a | |||
e7140262f2 | |||
a9bcc70a2b | |||
2936d73911 | |||
df4a403473 | |||
d993b8442a | |||
5aab1fb00b | |||
9b292304d3 |
|
@ -2,11 +2,13 @@
|
|||
"browser": true,
|
||||
"devel": true,
|
||||
"eqeqeq": true,
|
||||
"esnext": true,
|
||||
"esversion": 8,
|
||||
"globals": {
|
||||
"browser": false, // global variable in Firefox, Edge
|
||||
"self": false,
|
||||
"chrome": false,
|
||||
"log": false,
|
||||
"webext": false,
|
||||
"vAPI": false,
|
||||
"µMatrix": false
|
||||
},
|
||||
|
|
|
@ -3,13 +3,13 @@ env:
|
|||
matrix:
|
||||
- BROWSER=chromium EXT=zip
|
||||
- BROWSER=firefox EXT=xpi
|
||||
script: ./tools/make-${BROWSER}.sh all
|
||||
script: "./tools/make-${BROWSER}.sh ${TRAVIS_TAG}"
|
||||
deploy:
|
||||
provider: releases
|
||||
prerelease: true
|
||||
api_key:
|
||||
secure: eQgPAHH6PKu2dLK+NafxwLl66t0cyW5x5NZFquOwsNMal5nsfof7lyXj2F0Q0vUpGeI21MOipBI8UGv5oXPoiXnr0fhEbEBz65C9vypK61WkDCQVGVeZVNGQwSXUm6gD2EzpPgTCIs52+7dKCDJ3stXzdimOiOTYs4WMNKKarFM=
|
||||
file: dist/build/uMatrix.${BROWSER}.${EXT}
|
||||
file: dist/build/uMatrix_${TRAVIS_TAG}.${BROWSER}.${EXT}
|
||||
skip_cleanup: true
|
||||
on:
|
||||
repo: gorhill/uMatrix
|
||||
|
|
|
@ -16,25 +16,6 @@
|
|||
"assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat"
|
||||
]
|
||||
},
|
||||
"malware-0": {
|
||||
"content": "filters",
|
||||
"title": "Malware Domain List",
|
||||
"contentURL": [
|
||||
"https://www.malwaredomainlist.com/hostslist/hosts.txt",
|
||||
"assets/thirdparties/www.malwaredomainlist.com/hostslist/hosts.txt"
|
||||
]
|
||||
},
|
||||
"malware-1": {
|
||||
"content": "filters",
|
||||
"title": "Malware domains",
|
||||
"contentURL": [
|
||||
"https://mirror.cedia.org.ec/malwaredomains/justdomains",
|
||||
"https://mirror1.malwaredomains.com/files/justdomains",
|
||||
"assets/thirdparties/mirror1.malwaredomains.com/files/justdomains",
|
||||
"assets/thirdparties/mirror1.malwaredomains.com/files/justdomains.txt"
|
||||
],
|
||||
"supportURL": "http://www.malwaredomains.com/"
|
||||
},
|
||||
"dpollock-0": {
|
||||
"content": "filters",
|
||||
"updateAfter": 11,
|
||||
|
@ -45,25 +26,15 @@
|
|||
],
|
||||
"supportURL": "https://someonewhocares.org/hosts/"
|
||||
},
|
||||
"hphosts": {
|
||||
"content": "filters",
|
||||
"updateAfter": 11,
|
||||
"title": "hpHosts’ Ad and tracking servers",
|
||||
"contentURL": [
|
||||
"https://hosts-file.net/.%5Cad_servers.txt",
|
||||
"assets/thirdparties/hosts-file.net/ad_servers.txt"
|
||||
],
|
||||
"supportURL": "https://hosts-file.net/"
|
||||
},
|
||||
"mvps-0": {
|
||||
"content": "filters",
|
||||
"updateAfter": 11,
|
||||
"title": "MVPS HOSTS",
|
||||
"contentURL": [
|
||||
"http://winhelp2002.mvps.org/hosts.txt",
|
||||
"https://winhelp2002.mvps.org/hosts.txt",
|
||||
"assets/thirdparties/winhelp2002.mvps.org/hosts.txt"
|
||||
],
|
||||
"supportURL": "http://winhelp2002.mvps.org/"
|
||||
"supportURL": "https://winhelp2002.mvps.org/"
|
||||
},
|
||||
"plowe-0": {
|
||||
"content": "filters",
|
||||
|
|
14
dist/chromium/publish-beta.py
vendored
14
dist/chromium/publish-beta.py
vendored
|
@ -27,13 +27,6 @@ projdir = os.path.split(os.path.abspath(__file__))[0]
|
|||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
|
||||
cs_extension_id = 'eckgcipdkhcfghnmincccnhpdmnbefki'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_zip_filename = 'uMatrix.chromium.zip'
|
||||
raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uMatrix'
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
version = sys.argv[1]
|
||||
|
@ -44,6 +37,13 @@ if not re.search('^\d+\.\d+\.\d+(b|rc)\d+$', version):
|
|||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
|
||||
cs_extension_id = 'eckgcipdkhcfghnmincccnhpdmnbefki'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_zip_filename = 'uMatrix_'+ version + '.chromium.zip'
|
||||
raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uMatrix'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The build directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
|
|
83
dist/firefox/publish-signed-beta.py
vendored
83
dist/firefox/publish-signed-beta.py
vendored
|
@ -42,26 +42,33 @@ if not os.path.isfile(version_filepath):
|
|||
print('Version file not found.')
|
||||
exit(1)
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
tag_version = sys.argv[1]
|
||||
else:
|
||||
tag_version = input('Github release version: ')
|
||||
tag_version.strip()
|
||||
match = re.search('^(\d+\.\d+\.\d+)(?:(b|rc)(\d+))?$', tag_version)
|
||||
if not match:
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
ext_version = match.group(1);
|
||||
if match.group(2):
|
||||
revision = int(match.group(3))
|
||||
if match.group(2) == 'rc':
|
||||
revision += 100;
|
||||
ext_version += '.' + str(revision)
|
||||
|
||||
extension_id = 'uMatrix@raymondhill.net'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_xpi_filename = 'uMatrix.firefox.xpi'
|
||||
raw_xpi_filename = 'uMatrix_' + tag_version + '.firefox.xpi'
|
||||
raw_xpi_filepath = os.path.join(tmpdir.name, raw_xpi_filename)
|
||||
unsigned_xpi_filepath = os.path.join(tmpdir.name, 'uMatrix.firefox.unsigned.xpi')
|
||||
signed_xpi_filename = 'uMatrix.firefox.signed.xpi'
|
||||
signed_xpi_filename = 'uMatrix_' + tag_version + '.firefox.signed.xpi'
|
||||
signed_xpi_filepath = os.path.join(tmpdir.name, signed_xpi_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uMatrix'
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
version = sys.argv[1]
|
||||
else:
|
||||
version = input('Github release version: ')
|
||||
version.strip()
|
||||
if not re.search('^\d+\.\d+\.\d+(b|rc)\d+$', version):
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
|
||||
# Load/save auth secrets
|
||||
# The build directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
|
@ -99,7 +106,7 @@ github_auth = 'token ' + github_token
|
|||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version)
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, tag_version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
|
@ -154,7 +161,7 @@ with zipfile.ZipFile(raw_xpi_filepath, 'r') as zipin:
|
|||
data = zipin.read(item.filename)
|
||||
if item.filename == 'manifest.json':
|
||||
manifest = json.loads(bytes.decode(data))
|
||||
manifest['applications']['gecko']['update_url'] = 'https://raw.githubusercontent.com/{0}/{1}/master/dist/firefox/updates.json'.format(github_owner, github_repo)
|
||||
manifest['browser_specific_settings']['gecko']['update_url'] = 'https://raw.githubusercontent.com/{0}/{1}/master/dist/firefox/updates.json'.format(github_owner, github_repo)
|
||||
data = json.dumps(manifest, indent=2, separators=(',', ': '), sort_keys=True).encode()
|
||||
zipout.writestr(item, data)
|
||||
|
||||
|
@ -166,22 +173,35 @@ with zipfile.ZipFile(raw_xpi_filepath, 'r') as zipin:
|
|||
# - https://addons-server.readthedocs.io/en/latest/topics/api/signing.html
|
||||
#
|
||||
|
||||
print('Ask AMO to sign self-hosted xpi package...')
|
||||
with open(unsigned_xpi_filepath, 'rb') as f:
|
||||
amo_api_key = input_secret('AMO API key', 'amo_api_key')
|
||||
amo_secret = input_secret('AMO API secret', 'amo_secret')
|
||||
amo_api_key = ''
|
||||
amo_secret = ''
|
||||
|
||||
def get_jwt_auth():
|
||||
global amo_api_key
|
||||
if amo_api_key == '':
|
||||
amo_api_key = input_secret('AMO API key', 'amo_api_key')
|
||||
global amo_secret
|
||||
if amo_secret == '':
|
||||
amo_secret = input_secret('AMO API secret', 'amo_secret')
|
||||
amo_nonce = os.urandom(8).hex()
|
||||
jwt_payload = {
|
||||
'iss': amo_api_key,
|
||||
'jti': amo_nonce,
|
||||
'iat': datetime.datetime.utcnow(),
|
||||
'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=180),
|
||||
'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=15),
|
||||
}
|
||||
jwt_auth = 'JWT ' + jwt.encode(jwt_payload, amo_secret).decode()
|
||||
headers = { 'Authorization': jwt_auth, }
|
||||
return 'JWT ' + jwt.encode(jwt_payload, amo_secret).decode()
|
||||
|
||||
print('Ask AMO to sign self-hosted xpi package...')
|
||||
with open(unsigned_xpi_filepath, 'rb') as f:
|
||||
# https://blog.mozilla.org/addons/2019/11/11/security-improvements-in-amo-upload-tools/
|
||||
# "We recommend allowing up to 15 minutes."
|
||||
interval = 60 # check every 60 seconds
|
||||
countdown = 15 * 60 / interval # for at most 15 minutes
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
data = { 'channel': 'unlisted' }
|
||||
files = { 'upload': f, }
|
||||
signing_url = 'https://addons.mozilla.org/api/v3/addons/{0}/versions/{1}/'.format(extension_id, version)
|
||||
signing_url = 'https://addons.mozilla.org/api/v3/addons/{0}/versions/{1}/'.format(extension_id, ext_version)
|
||||
print('Submitting package to be signed...')
|
||||
response = requests.put(signing_url, headers=headers, data=data, files=files)
|
||||
if response.status_code != 202:
|
||||
|
@ -194,30 +214,34 @@ with open(unsigned_xpi_filepath, 'rb') as f:
|
|||
print('Waiting for AMO to process the request to sign the self-hosted xpi package...')
|
||||
# Wait for signed package to be ready
|
||||
signing_check_url = signing_request_response['url']
|
||||
# TODO: use real time instead
|
||||
countdown = 180 / 5
|
||||
while True:
|
||||
sys.stdout.write('.')
|
||||
sys.stdout.flush()
|
||||
time.sleep(5)
|
||||
time.sleep(interval)
|
||||
countdown -= 1
|
||||
if countdown <= 0:
|
||||
print('Error: AMO signing timed out')
|
||||
exit(1)
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
response = requests.get(signing_check_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: AMO signing failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
signing_check_response = response.json()
|
||||
if not signing_check_response['processed']:
|
||||
continue
|
||||
if not signing_check_response['valid']:
|
||||
print('Error: AMO validation failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
if not signing_check_response['files'] or len(signing_check_response['files']) == 0:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['signed']:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['download_url']:
|
||||
print('Error: AMO signing failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('\r')
|
||||
print('Self-hosted xpi package successfully signed.')
|
||||
|
@ -226,6 +250,7 @@ with open(unsigned_xpi_filepath, 'rb') as f:
|
|||
response = requests.get(download_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Download signed package failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
with open(signed_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
|
@ -272,11 +297,11 @@ with open(updates_json_filepath) as f:
|
|||
updates_json = json.load(f)
|
||||
f.close()
|
||||
previous_version = updates_json['addons'][extension_id]['updates'][0]['version']
|
||||
if LooseVersion(version) > LooseVersion(previous_version):
|
||||
if LooseVersion(ext_version) > LooseVersion(previous_version):
|
||||
with open(os.path.join(projdir, 'dist', 'firefox', 'updates.template.json')) as f:
|
||||
template_json = Template(f.read())
|
||||
f.close()
|
||||
updates_json = template_json.substitute(version=version)
|
||||
updates_json = template_json.substitute(ext_version=ext_version, tag_version=tag_version)
|
||||
with open(updates_json_filepath, 'w') as f:
|
||||
f.write(updates_json)
|
||||
f.close()
|
||||
|
@ -290,7 +315,7 @@ with open(updates_json_filepath) as f:
|
|||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[0] == 'M':
|
||||
subprocess.run(['git', 'commit', '-m', 'make Firefox dev build auto-update', updates_json_filepath])
|
||||
subprocess.run(['git', 'push', 'origin', 'master'])
|
||||
subprocess.run(['git', 'commit', '-m', 'Make Firefox dev build auto-update', updates_json_filepath])
|
||||
subprocess.run(['git', 'push', 'origin', 'HEAD'])
|
||||
|
||||
print('All done.')
|
||||
|
|
8
dist/firefox/updates.json
vendored
8
dist/firefox/updates.json
vendored
|
@ -3,10 +3,10 @@
|
|||
"uMatrix@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.3.17rc4",
|
||||
"applications": { "gecko": { "strict_min_version": "56" } },
|
||||
"update_info_url": "https://github.com/gorhill/uMatrix/releases/tag/1.3.17rc4",
|
||||
"update_link": "https://github.com/gorhill/uMatrix/releases/download/1.3.17rc4/uMatrix.firefox.signed.xpi"
|
||||
"version": "1.4.1.6",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "56" } },
|
||||
"update_info_url": "https://github.com/gorhill/uMatrix/releases/tag/1.4.1b6",
|
||||
"update_link": "https://github.com/gorhill/uMatrix/releases/download/1.4.1b6/uMatrix_1.4.1b6.firefox.signed.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
8
dist/firefox/updates.template.json
vendored
8
dist/firefox/updates.template.json
vendored
|
@ -3,10 +3,10 @@
|
|||
"uMatrix@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "$version",
|
||||
"applications": { "gecko": { "strict_min_version": "56" } },
|
||||
"update_info_url": "https://github.com/gorhill/uMatrix/releases/tag/$version",
|
||||
"update_link": "https://github.com/gorhill/uMatrix/releases/download/$version/uMatrix.firefox.signed.xpi"
|
||||
"version": "$ext_version",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "56" } },
|
||||
"update_info_url": "https://github.com/gorhill/uMatrix/releases/tag/$tag_version",
|
||||
"update_link": "https://github.com/gorhill/uMatrix/releases/download/$tag_version/uMatrix_$tag_version.firefox.signed.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
2
dist/version
vendored
2
dist/version
vendored
|
@ -1 +1 @@
|
|||
1.4.0
|
||||
1.4.3.0
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
"content_scripts": [
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["/js/vapi-client.js", "/js/contentscript-start.js"],
|
||||
"js": ["/js/vapi.js", "/js/vapi-client.js", "/js/contentscript-start.js"],
|
||||
"run_at": "document_start",
|
||||
"all_frames": true
|
||||
},
|
||||
|
|
File diff suppressed because it is too large
Load diff
308
platform/chromium/vapi-client-extra.js
Normal file
308
platform/chromium/vapi-client-extra.js
Normal file
|
@ -0,0 +1,308 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2019-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
// For non-background page
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Direct messaging connection ability
|
||||
|
||||
(( ) => {
|
||||
// >>>>>>>> start of private namespace
|
||||
|
||||
if (
|
||||
typeof vAPI !== 'object' ||
|
||||
vAPI.messaging instanceof Object === false ||
|
||||
vAPI.MessagingConnection instanceof Function
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const listeners = new Set();
|
||||
const connections = new Map();
|
||||
|
||||
vAPI.MessagingConnection = class {
|
||||
constructor(handler, details) {
|
||||
this.messaging = vAPI.messaging;
|
||||
this.handler = handler;
|
||||
this.id = details.id;
|
||||
this.to = details.to;
|
||||
this.toToken = details.toToken;
|
||||
this.from = details.from;
|
||||
this.fromToken = details.fromToken;
|
||||
this.checkTimer = undefined;
|
||||
// On Firefox it appears ports are not automatically disconnected
|
||||
// when navigating to another page.
|
||||
const ctor = vAPI.MessagingConnection;
|
||||
if ( ctor.pagehide !== undefined ) { return; }
|
||||
ctor.pagehide = ( ) => {
|
||||
for ( const connection of connections.values() ) {
|
||||
connection.disconnect();
|
||||
connection.handler(
|
||||
connection.toDetails('connectionBroken')
|
||||
);
|
||||
}
|
||||
};
|
||||
window.addEventListener('pagehide', ctor.pagehide);
|
||||
}
|
||||
toDetails(what, payload) {
|
||||
return {
|
||||
what: what,
|
||||
id: this.id,
|
||||
from: this.from,
|
||||
fromToken: this.fromToken,
|
||||
to: this.to,
|
||||
toToken: this.toToken,
|
||||
payload: payload
|
||||
};
|
||||
}
|
||||
disconnect() {
|
||||
if ( this.checkTimer !== undefined ) {
|
||||
clearTimeout(this.checkTimer);
|
||||
this.checkTimer = undefined;
|
||||
}
|
||||
connections.delete(this.id);
|
||||
const port = this.messaging.getPort();
|
||||
if ( port === null ) { return; }
|
||||
port.postMessage({
|
||||
channel: 'vapi',
|
||||
msg: this.toDetails('connectionBroken'),
|
||||
});
|
||||
}
|
||||
checkAsync() {
|
||||
if ( this.checkTimer !== undefined ) {
|
||||
clearTimeout(this.checkTimer);
|
||||
}
|
||||
this.checkTimer = vAPI.setTimeout(
|
||||
( ) => { this.check(); },
|
||||
499
|
||||
);
|
||||
}
|
||||
check() {
|
||||
this.checkTimer = undefined;
|
||||
if ( connections.has(this.id) === false ) { return; }
|
||||
const port = this.messaging.getPort();
|
||||
if ( port === null ) { return; }
|
||||
port.postMessage({
|
||||
channel: 'vapi',
|
||||
msg: this.toDetails('connectionCheck'),
|
||||
});
|
||||
this.checkAsync();
|
||||
}
|
||||
receive(details) {
|
||||
switch ( details.what ) {
|
||||
case 'connectionAccepted':
|
||||
this.toToken = details.toToken;
|
||||
this.handler(details);
|
||||
this.checkAsync();
|
||||
break;
|
||||
case 'connectionBroken':
|
||||
connections.delete(this.id);
|
||||
this.handler(details);
|
||||
break;
|
||||
case 'connectionMessage':
|
||||
this.handler(details);
|
||||
this.checkAsync();
|
||||
break;
|
||||
case 'connectionCheck':
|
||||
const port = this.messaging.getPort();
|
||||
if ( port === null ) { return; }
|
||||
if ( connections.has(this.id) ) {
|
||||
this.checkAsync();
|
||||
} else {
|
||||
details.what = 'connectionBroken';
|
||||
port.postMessage({ channel: 'vapi', msg: details });
|
||||
}
|
||||
break;
|
||||
case 'connectionRefused':
|
||||
connections.delete(this.id);
|
||||
this.handler(details);
|
||||
break;
|
||||
}
|
||||
}
|
||||
send(payload) {
|
||||
const port = this.messaging.getPort();
|
||||
if ( port === null ) { return; }
|
||||
port.postMessage({
|
||||
channel: 'vapi',
|
||||
msg: this.toDetails('connectionMessage', payload),
|
||||
});
|
||||
}
|
||||
|
||||
static addListener(listener) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
static async connectTo(from, to, handler) {
|
||||
const port = vAPI.messaging.getPort();
|
||||
if ( port === null ) { return; }
|
||||
const connection = new vAPI.MessagingConnection(handler, {
|
||||
id: `${from}-${to}-${vAPI.sessionId}`,
|
||||
to: to,
|
||||
from: from,
|
||||
fromToken: port.name
|
||||
});
|
||||
connections.set(connection.id, connection);
|
||||
port.postMessage({
|
||||
channel: 'vapi',
|
||||
msg: {
|
||||
what: 'connectionRequested',
|
||||
id: connection.id,
|
||||
from: from,
|
||||
fromToken: port.name,
|
||||
to: to,
|
||||
}
|
||||
});
|
||||
return connection.id;
|
||||
}
|
||||
static disconnectFrom(connectionId) {
|
||||
const connection = connections.get(connectionId);
|
||||
if ( connection === undefined ) { return; }
|
||||
connection.disconnect();
|
||||
}
|
||||
static sendTo(connectionId, payload) {
|
||||
const connection = connections.get(connectionId);
|
||||
if ( connection === undefined ) { return; }
|
||||
connection.send(payload);
|
||||
}
|
||||
static canDestroyPort() {
|
||||
return listeners.length === 0 && connections.size === 0;
|
||||
}
|
||||
static mustDestroyPort() {
|
||||
if ( connections.size === 0 ) { return; }
|
||||
for ( const connection of connections.values() ) {
|
||||
connection.receive({ what: 'connectionBroken' });
|
||||
}
|
||||
connections.clear();
|
||||
}
|
||||
static canProcessMessage(details) {
|
||||
if ( details.channel !== 'vapi' ) { return; }
|
||||
switch ( details.msg.what ) {
|
||||
case 'connectionAccepted':
|
||||
case 'connectionBroken':
|
||||
case 'connectionCheck':
|
||||
case 'connectionMessage':
|
||||
case 'connectionRefused': {
|
||||
const connection = connections.get(details.msg.id);
|
||||
if ( connection === undefined ) { break; }
|
||||
connection.receive(details.msg);
|
||||
return true;
|
||||
}
|
||||
case 'connectionRequested':
|
||||
if ( listeners.length === 0 ) { return; }
|
||||
const port = vAPI.messaging.getPort();
|
||||
if ( port === null ) { break; }
|
||||
let listener, result;
|
||||
for ( listener of listeners ) {
|
||||
result = listener(details.msg);
|
||||
if ( result !== undefined ) { break; }
|
||||
}
|
||||
if ( result === undefined ) { break; }
|
||||
if ( result === true ) {
|
||||
details.msg.what = 'connectionAccepted';
|
||||
details.msg.toToken = port.name;
|
||||
const connection = new vAPI.MessagingConnection(
|
||||
listener,
|
||||
details.msg
|
||||
);
|
||||
connections.set(connection.id, connection);
|
||||
} else {
|
||||
details.msg.what = 'connectionRefused';
|
||||
}
|
||||
port.postMessage(details);
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
vAPI.messaging.extensions.push(vAPI.MessagingConnection);
|
||||
|
||||
// <<<<<<<< end of private namespace
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Broadcast listening ability
|
||||
|
||||
(( ) => {
|
||||
// >>>>>>>> start of private namespace
|
||||
|
||||
if (
|
||||
typeof vAPI !== 'object' ||
|
||||
vAPI.messaging instanceof Object === false ||
|
||||
vAPI.broadcastListener instanceof Object
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const listeners = new Set();
|
||||
|
||||
vAPI.broadcastListener = {
|
||||
add: function(listener) {
|
||||
listeners.add(listener);
|
||||
vAPI.messaging.getPort();
|
||||
},
|
||||
remove: function(listener) {
|
||||
listeners.delete(listener);
|
||||
},
|
||||
canDestroyPort() {
|
||||
return listeners.size === 0;
|
||||
},
|
||||
mustDestroyPort() {
|
||||
listeners.clear();
|
||||
},
|
||||
canProcessMessage(details) {
|
||||
if ( details.broadcast === false ) { return; }
|
||||
for ( const listener of listeners ) {
|
||||
listener(details.msg);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
vAPI.messaging.extensions.push(vAPI.broadcastListener);
|
||||
|
||||
// <<<<<<<< end of private namespace
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
DO NOT:
|
||||
- Remove the following code
|
||||
- Add code beyond the following code
|
||||
Reason:
|
||||
- https://github.com/gorhill/uBlock/pull/3721
|
||||
- uBO never uses the return value from injected content scripts
|
||||
|
||||
**/
|
||||
|
||||
void 0;
|
|
@ -1,7 +1,8 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uMatrix - a browser extension to block requests.
|
||||
Copyright (C) 2014-2018 The uMatrix/uBlock Origin authors
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2014-2015 The uBlock Origin authors
|
||||
Copyright (C) 2014-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -16,60 +17,61 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uMatrix
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
// For non background pages
|
||||
// For non-background page
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
(function(self) {
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://bugs.chromium.org/p/project-zero/issues/detail?id=1225&desc=6#c10
|
||||
if ( self.vAPI === undefined || self.vAPI.uMatrix !== true ) {
|
||||
self.vAPI = { uMatrix: true };
|
||||
}
|
||||
|
||||
var vAPI = self.vAPI;
|
||||
var chrome = self.chrome;
|
||||
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/456
|
||||
// Already injected?
|
||||
if ( vAPI.vapiClientInjected ) {
|
||||
//console.debug('vapi-client.js already injected: skipping.');
|
||||
return;
|
||||
}
|
||||
vAPI.vapiClientInjected = true;
|
||||
// Skip if already injected.
|
||||
|
||||
vAPI.sessionId = String.fromCharCode(Date.now() % 26 + 97) +
|
||||
Math.random().toString(36).slice(2);
|
||||
// >>>>>>>> start of HUGE-IF-BLOCK
|
||||
if (
|
||||
typeof vAPI === 'object' &&
|
||||
vAPI.randomToken instanceof Function === false
|
||||
) {
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.randomToken = function() {
|
||||
const now = Date.now();
|
||||
return String.fromCharCode(now % 26 + 97) +
|
||||
Math.floor((1 + Math.random()) * now).toString(36);
|
||||
};
|
||||
|
||||
vAPI.sessionId = vAPI.randomToken();
|
||||
vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.shutdown = (function() {
|
||||
var jobs = [];
|
||||
|
||||
var add = function(job) {
|
||||
jobs.push(job);
|
||||
};
|
||||
|
||||
var exec = function() {
|
||||
//console.debug('Shutting down...');
|
||||
var job;
|
||||
while ( (job = jobs.pop()) ) {
|
||||
job();
|
||||
vAPI.shutdown = {
|
||||
jobs: [],
|
||||
add: function(job) {
|
||||
this.jobs.push(job);
|
||||
},
|
||||
exec: function() {
|
||||
// Shutdown asynchronously, to ensure shutdown jobs are called from
|
||||
// the top context.
|
||||
self.requestIdleCallback(( ) => {
|
||||
const jobs = this.jobs.slice();
|
||||
this.jobs.length = 0;
|
||||
while ( jobs.length !== 0 ) {
|
||||
(jobs.pop())();
|
||||
}
|
||||
});
|
||||
},
|
||||
remove: function(job) {
|
||||
let pos;
|
||||
while ( (pos = this.jobs.indexOf(job)) !== -1 ) {
|
||||
this.jobs.splice(pos, 1);
|
||||
}
|
||||
};
|
||||
|
||||
return {
|
||||
add: add,
|
||||
exec: exec
|
||||
};
|
||||
})();
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -77,9 +79,10 @@ vAPI.messaging = {
|
|||
port: null,
|
||||
portTimer: null,
|
||||
portTimerDelay: 10000,
|
||||
listeners: new Set(),
|
||||
extended: undefined,
|
||||
extensions: [],
|
||||
msgIdGenerator: 1,
|
||||
pending: new Map(),
|
||||
auxProcessId: 1,
|
||||
shuttingDown: false,
|
||||
|
||||
shutdown: function() {
|
||||
|
@ -87,41 +90,53 @@ vAPI.messaging = {
|
|||
this.destroyPort();
|
||||
},
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/403
|
||||
// Spurious disconnection can happen, so do not consider such events
|
||||
// as world-ending, i.e. stay around. Except for embedded frames.
|
||||
|
||||
disconnectListener: function() {
|
||||
this.port = null;
|
||||
vAPI.shutdown.exec();
|
||||
if ( window !== window.top ) {
|
||||
vAPI.shutdown.exec();
|
||||
}
|
||||
},
|
||||
disconnectListenerBound: null,
|
||||
|
||||
messageListener: function(details) {
|
||||
if ( !details ) { return; }
|
||||
|
||||
// Sent to all listeners
|
||||
if ( details.broadcast ) {
|
||||
this.sendToListeners(details.msg);
|
||||
return;
|
||||
}
|
||||
if ( details instanceof Object === false ) { return; }
|
||||
|
||||
// Response to specific message previously sent
|
||||
var listener;
|
||||
if ( details.auxProcessId ) {
|
||||
listener = this.pending.get(details.auxProcessId);
|
||||
if ( listener !== undefined ) {
|
||||
this.pending.delete(details.auxProcessId);
|
||||
listener(details.msg);
|
||||
if ( details.msgId !== undefined ) {
|
||||
const resolver = this.pending.get(details.msgId);
|
||||
if ( resolver !== undefined ) {
|
||||
this.pending.delete(details.msgId);
|
||||
resolver(details.msg);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Unhandled messages
|
||||
this.extensions.every(ext => ext.canProcessMessage(details) !== true);
|
||||
},
|
||||
messageListenerBound: null,
|
||||
|
||||
canDestroyPort: function() {
|
||||
return this.pending.size === 0 &&
|
||||
(
|
||||
this.extensions.length === 0 ||
|
||||
this.extensions.every(e => e.canDestroyPort())
|
||||
);
|
||||
},
|
||||
|
||||
mustDestroyPort: function() {
|
||||
if ( this.extensions.length === 0 ) { return; }
|
||||
this.extensions.forEach(e => e.mustDestroyPort());
|
||||
this.extensions.length = 0;
|
||||
},
|
||||
messageListenerCallback: null,
|
||||
|
||||
portPoller: function() {
|
||||
this.portTimer = null;
|
||||
if (
|
||||
this.port !== null &&
|
||||
this.listeners.size === 0 &&
|
||||
this.pending.size === 0
|
||||
) {
|
||||
if ( this.port !== null && this.canDestroyPort() ) {
|
||||
return this.destroyPort();
|
||||
}
|
||||
this.portTimer = vAPI.setTimeout(this.portPollerBound, this.portTimerDelay);
|
||||
|
@ -134,48 +149,50 @@ vAPI.messaging = {
|
|||
clearTimeout(this.portTimer);
|
||||
this.portTimer = null;
|
||||
}
|
||||
var port = this.port;
|
||||
const port = this.port;
|
||||
if ( port !== null ) {
|
||||
port.disconnect();
|
||||
port.onMessage.removeListener(this.messageListenerCallback);
|
||||
port.onMessage.removeListener(this.messageListenerBound);
|
||||
port.onDisconnect.removeListener(this.disconnectListenerBound);
|
||||
this.port = null;
|
||||
}
|
||||
this.listeners.clear();
|
||||
this.mustDestroyPort();
|
||||
// service pending callbacks
|
||||
if ( this.pending.size !== 0 ) {
|
||||
var pending = this.pending;
|
||||
const pending = this.pending;
|
||||
this.pending = new Map();
|
||||
for ( var callback of pending.values() ) {
|
||||
if ( typeof callback === 'function' ) {
|
||||
callback(null);
|
||||
}
|
||||
for ( const resolver of pending.values() ) {
|
||||
resolver();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
createPort: function() {
|
||||
if ( this.shuttingDown ) { return null; }
|
||||
if ( this.messageListenerCallback === null ) {
|
||||
this.messageListenerCallback = this.messageListener.bind(this);
|
||||
if ( this.messageListenerBound === null ) {
|
||||
this.messageListenerBound = this.messageListener.bind(this);
|
||||
this.disconnectListenerBound = this.disconnectListener.bind(this);
|
||||
this.portPollerBound = this.portPoller.bind(this);
|
||||
}
|
||||
try {
|
||||
this.port = chrome.runtime.connect({name: vAPI.sessionId}) || null;
|
||||
this.port = browser.runtime.connect({name: vAPI.sessionId}) || null;
|
||||
} catch (ex) {
|
||||
this.port = null;
|
||||
}
|
||||
if ( this.port !== null ) {
|
||||
this.port.onMessage.addListener(this.messageListenerCallback);
|
||||
this.port.onDisconnect.addListener(this.disconnectListenerBound);
|
||||
this.portTimerDelay = 10000;
|
||||
if ( this.portTimer === null ) {
|
||||
this.portTimer = vAPI.setTimeout(
|
||||
this.portPollerBound,
|
||||
this.portTimerDelay
|
||||
);
|
||||
}
|
||||
// Not having a valid port at this point means the main process is
|
||||
// not available: no point keeping the content scripts alive.
|
||||
if ( this.port === null ) {
|
||||
vAPI.shutdown.exec();
|
||||
return null;
|
||||
}
|
||||
this.port.onMessage.addListener(this.messageListenerBound);
|
||||
this.port.onDisconnect.addListener(this.disconnectListenerBound);
|
||||
this.portTimerDelay = 10000;
|
||||
if ( this.portTimer === null ) {
|
||||
this.portTimer = vAPI.setTimeout(
|
||||
this.portPollerBound,
|
||||
this.portTimerDelay
|
||||
);
|
||||
}
|
||||
return this.port;
|
||||
},
|
||||
|
@ -184,70 +201,68 @@ vAPI.messaging = {
|
|||
return this.port !== null ? this.port : this.createPort();
|
||||
},
|
||||
|
||||
send: function(channelName, message, callback) {
|
||||
send: function(channel, msg) {
|
||||
// Too large a gap between the last request and the last response means
|
||||
// the main process is no longer reachable: memory leaks and bad
|
||||
// performance become a risk -- especially for long-lived, dynamic
|
||||
// pages. Guard against this.
|
||||
if ( this.pending.size > 25 ) {
|
||||
if ( this.pending.size > 50 ) {
|
||||
vAPI.shutdown.exec();
|
||||
}
|
||||
var port = this.getPort();
|
||||
const port = this.getPort();
|
||||
if ( port === null ) {
|
||||
if ( typeof callback === 'function' ) { callback(); }
|
||||
return;
|
||||
return Promise.resolve();
|
||||
}
|
||||
var auxProcessId;
|
||||
if ( callback ) {
|
||||
auxProcessId = this.auxProcessId++;
|
||||
this.pending.set(auxProcessId, callback);
|
||||
}
|
||||
port.postMessage({
|
||||
channelName: channelName,
|
||||
auxProcessId: auxProcessId,
|
||||
msg: message
|
||||
const msgId = this.msgIdGenerator++;
|
||||
const promise = new Promise(resolve => {
|
||||
this.pending.set(msgId, resolve);
|
||||
});
|
||||
port.postMessage({ channel, msgId, msg });
|
||||
return promise;
|
||||
},
|
||||
|
||||
addListener: function(listener) {
|
||||
this.listeners.add(listener);
|
||||
this.getPort();
|
||||
},
|
||||
|
||||
removeListener: function(listener) {
|
||||
this.listeners.delete(listener);
|
||||
},
|
||||
|
||||
removeAllListeners: function() {
|
||||
this.listeners.clear();
|
||||
},
|
||||
|
||||
sendToListeners: function(msg) {
|
||||
for ( var listener of this.listeners ) {
|
||||
listener(msg);
|
||||
// Dynamically extend capabilities.
|
||||
extend: function() {
|
||||
if ( this.extended === undefined ) {
|
||||
this.extended = vAPI.messaging.send('vapi', {
|
||||
what: 'extendClient'
|
||||
}).then(( ) => {
|
||||
return self.vAPI instanceof Object &&
|
||||
this.extensions.length !== 0;
|
||||
}).catch(( ) => {
|
||||
});
|
||||
}
|
||||
}
|
||||
return this.extended;
|
||||
},
|
||||
};
|
||||
|
||||
vAPI.shutdown.add(( ) => {
|
||||
vAPI.messaging.shutdown();
|
||||
window.vAPI = undefined;
|
||||
});
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
// No need to have vAPI client linger around after shutdown if
|
||||
// we are not a top window (because element picker can still
|
||||
// be injected in top window).
|
||||
if ( window !== window.top ) {
|
||||
vAPI.shutdown.add(function() {
|
||||
vAPI = null;
|
||||
});
|
||||
}
|
||||
// <<<<<<<< end of HUGE-IF-BLOCK
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.setTimeout = vAPI.setTimeout || function(callback, delay) {
|
||||
setTimeout(function() { callback(); }, delay);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
})(this); // jshint ignore: line
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
DO NOT:
|
||||
- Remove the following code
|
||||
- Add code beyond the following code
|
||||
Reason:
|
||||
- https://github.com/gorhill/uBlock/pull/3721
|
||||
- uBO never uses the return value from injected content scripts
|
||||
|
||||
**/
|
||||
|
||||
void 0;
|
||||
|
|
|
@ -23,32 +23,14 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
if ( self.browser instanceof Object ) {
|
||||
self.chrome = self.browser;
|
||||
} else {
|
||||
self.browser = self.chrome;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
(function(self) {
|
||||
vAPI.T0 = Date.now();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://bugs.chromium.org/p/project-zero/issues/detail?id=1225&desc=6#c10
|
||||
if ( self.vAPI === undefined || self.vAPI.uMatrix !== true ) {
|
||||
self.vAPI = { uMatrix: true };
|
||||
}
|
||||
|
||||
var vAPI = self.vAPI;
|
||||
var chrome = self.chrome;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.setTimeout = vAPI.setTimeout || window.setTimeout.bind(window);
|
||||
vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -57,113 +39,182 @@ vAPI.webextFlavor = {
|
|||
soup: new Set()
|
||||
};
|
||||
|
||||
(function() {
|
||||
var ua = navigator.userAgent,
|
||||
flavor = vAPI.webextFlavor,
|
||||
soup = flavor.soup;
|
||||
var dispatch = function() {
|
||||
(( ) => {
|
||||
const ua = navigator.userAgent;
|
||||
const flavor = vAPI.webextFlavor;
|
||||
const soup = flavor.soup;
|
||||
const dispatch = function() {
|
||||
window.dispatchEvent(new CustomEvent('webextFlavor'));
|
||||
};
|
||||
|
||||
// This is always true.
|
||||
soup.add('ublock');
|
||||
soup.add('ublock').add('webext');
|
||||
|
||||
// Whether this is a dev build.
|
||||
if ( /^\d+\.\d+\.\d+\D/.test(browser.runtime.getManifest().version) ) {
|
||||
soup.add('devbuild');
|
||||
}
|
||||
|
||||
if ( /\bMobile\b/.test(ua) ) {
|
||||
soup.add('mobile');
|
||||
}
|
||||
|
||||
// Asynchronous
|
||||
var async = self.browser instanceof Object &&
|
||||
typeof self.browser.runtime.getBrowserInfo === 'function';
|
||||
if ( async ) {
|
||||
self.browser.runtime.getBrowserInfo().then(function(info) {
|
||||
flavor.major = parseInt(info.version, 10) || 0;
|
||||
if (
|
||||
browser instanceof Object &&
|
||||
typeof browser.runtime.getBrowserInfo === 'function'
|
||||
) {
|
||||
browser.runtime.getBrowserInfo().then(info => {
|
||||
flavor.major = parseInt(info.version, 10) || 60;
|
||||
soup.add(info.vendor.toLowerCase())
|
||||
.add(info.name.toLowerCase());
|
||||
if ( flavor.major >= 53 ) { soup.add('user_stylesheet'); }
|
||||
if ( flavor.major >= 57 ) { soup.add('html_filtering'); }
|
||||
if ( soup.has('firefox') && flavor.major < 57 ) {
|
||||
soup.delete('html_filtering');
|
||||
}
|
||||
dispatch();
|
||||
});
|
||||
if ( browser.runtime.getURL('').startsWith('moz-extension://') ) {
|
||||
soup.add('mozilla')
|
||||
.add('firefox')
|
||||
.add('user_stylesheet')
|
||||
.add('html_filtering');
|
||||
flavor.major = 60;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Synchronous
|
||||
var match = /Firefox\/([\d.]+)/.exec(ua);
|
||||
if ( match !== null ) {
|
||||
// Synchronous -- order of tests is important
|
||||
let match;
|
||||
if ( (match = /\bEdge\/(\d+)/.exec(ua)) !== null ) {
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('mozilla')
|
||||
.add('firefox');
|
||||
if ( flavor.major >= 53 ) { soup.add('user_stylesheet'); }
|
||||
if ( flavor.major >= 57 ) { soup.add('html_filtering'); }
|
||||
} else {
|
||||
match = /OPR\/([\d.]+)/.exec(ua);
|
||||
if ( match !== null ) {
|
||||
var reEx = /Chrom(?:e|ium)\/([\d.]+)/;
|
||||
if ( reEx.test(ua) ) { match = reEx.exec(ua); }
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('opera').add('chromium');
|
||||
} else {
|
||||
match = /Chromium\/([\d.]+)/.exec(ua);
|
||||
if ( match !== null ) {
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('chromium');
|
||||
} else {
|
||||
match = /Chrome\/([\d.]+)/.exec(ua);
|
||||
if ( match !== null ) {
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('google').add('chromium');
|
||||
}
|
||||
}
|
||||
}
|
||||
// https://github.com/gorhill/uBlock/issues/3588
|
||||
if ( soup.has('chromium') && flavor.major >= 67 ) {
|
||||
soup.add('user_stylesheet');
|
||||
}
|
||||
soup.add('microsoft').add('edge');
|
||||
} else if ( (match = /\bOPR\/(\d+)/.exec(ua)) !== null ) {
|
||||
const reEx = /\bChrom(?:e|ium)\/([\d.]+)/;
|
||||
if ( reEx.test(ua) ) { match = reEx.exec(ua); }
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('opera').add('chromium');
|
||||
} else if ( (match = /\bChromium\/(\d+)/.exec(ua)) !== null ) {
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('chromium');
|
||||
} else if ( (match = /\bChrome\/(\d+)/.exec(ua)) !== null ) {
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('google').add('chromium');
|
||||
} else if ( (match = /\bSafari\/(\d+)/.exec(ua)) !== null ) {
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
soup.add('apple').add('safari');
|
||||
}
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/3588
|
||||
if ( soup.has('chromium') && flavor.major >= 66 ) {
|
||||
soup.add('user_stylesheet');
|
||||
}
|
||||
|
||||
// Don't starve potential listeners
|
||||
if ( !async ) {
|
||||
vAPI.setTimeout(dispatch, 97);
|
||||
}
|
||||
vAPI.setTimeout(dispatch, 97);
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// http://www.w3.org/International/questions/qa-scripts#directions
|
||||
{
|
||||
const punycode = self.punycode;
|
||||
const reCommonHostnameFromURL = /^https?:\/\/([0-9a-z_][0-9a-z._-]*[0-9a-z])\//;
|
||||
const reAuthorityFromURI = /^(?:[^:\/?#]+:)?(\/\/[^\/?#]+)/;
|
||||
const reHostFromNakedAuthority = /^[0-9a-z._-]+[0-9a-z]$/i;
|
||||
const reHostFromAuthority = /^(?:[^@]*@)?([^:]+)(?::\d*)?$/;
|
||||
const reIPv6FromAuthority = /^(?:[^@]*@)?(\[[0-9a-f:]+\])(?::\d*)?$/i;
|
||||
const reMustNormalizeHostname = /[^0-9a-z._-]/;
|
||||
|
||||
var setScriptDirection = function(language) {
|
||||
document.body.setAttribute(
|
||||
'dir',
|
||||
['ar', 'he', 'fa', 'ps', 'ur'].indexOf(language) !== -1 ? 'rtl' : 'ltr'
|
||||
);
|
||||
};
|
||||
vAPI.hostnameFromURI = function(uri) {
|
||||
let matches = reCommonHostnameFromURL.exec(uri);
|
||||
if ( matches !== null ) { return matches[1]; }
|
||||
matches = reAuthorityFromURI.exec(uri);
|
||||
if ( matches === null ) { return ''; }
|
||||
const authority = matches[1].slice(2);
|
||||
if ( reHostFromNakedAuthority.test(authority) ) {
|
||||
return authority.toLowerCase();
|
||||
}
|
||||
matches = reHostFromAuthority.exec(authority);
|
||||
if ( matches === null ) {
|
||||
matches = reIPv6FromAuthority.exec(authority);
|
||||
if ( matches === null ) { return ''; }
|
||||
}
|
||||
let hostname = matches[1];
|
||||
while ( hostname.endsWith('.') ) {
|
||||
hostname = hostname.slice(0, -1);
|
||||
}
|
||||
if ( reMustNormalizeHostname.test(hostname) ) {
|
||||
hostname = punycode.toASCII(hostname.toLowerCase());
|
||||
}
|
||||
return hostname;
|
||||
};
|
||||
|
||||
const reHostnameFromNetworkURL =
|
||||
/^(?:http|ws|ftp)s?:\/\/([0-9a-z_][0-9a-z._-]*[0-9a-z])\//;
|
||||
|
||||
vAPI.hostnameFromNetworkURL = function(url) {
|
||||
const matches = reHostnameFromNetworkURL.exec(url);
|
||||
return matches !== null ? matches[1] : '';
|
||||
};
|
||||
|
||||
const psl = self.publicSuffixList;
|
||||
const reIPAddressNaive = /^\d+\.\d+\.\d+\.\d+$|^\[[\da-zA-Z:]+\]$/;
|
||||
|
||||
vAPI.domainFromHostname = function(hostname) {
|
||||
return reIPAddressNaive.test(hostname)
|
||||
? hostname
|
||||
: psl.getDomain(hostname);
|
||||
};
|
||||
|
||||
vAPI.domainFromURI = function(uri) {
|
||||
return uri !== ''
|
||||
? vAPI.domainFromHostname(vAPI.hostnameFromURI(uri))
|
||||
: '';
|
||||
};
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.download = function(details) {
|
||||
if ( !details.url ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var a = document.createElement('a');
|
||||
if ( !details.url ) { return; }
|
||||
const a = document.createElement('a');
|
||||
a.href = details.url;
|
||||
a.setAttribute('download', details.filename || '');
|
||||
a.setAttribute('type', 'text/plain');
|
||||
a.dispatchEvent(new MouseEvent('click'));
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.getURL = chrome.runtime.getURL;
|
||||
vAPI.getURL = browser.runtime.getURL;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.i18n = chrome.i18n.getMessage;
|
||||
vAPI.i18n = browser.i18n.getMessage;
|
||||
|
||||
setScriptDirection(vAPI.i18n('@@ui_locale'));
|
||||
// http://www.w3.org/International/questions/qa-scripts#directions
|
||||
document.body.setAttribute(
|
||||
'dir',
|
||||
['ar', 'he', 'fa', 'ps', 'ur'].indexOf(vAPI.i18n('@@ui_locale')) !== -1
|
||||
? 'rtl'
|
||||
: 'ltr'
|
||||
);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/3057
|
||||
// - webNavigation.onCreatedNavigationTarget become broken on Firefox when we
|
||||
// try to make the popup panel close itself using the original
|
||||
// `window.open('', '_self').close()`.
|
||||
|
||||
vAPI.closePopup = function() {
|
||||
window.close();
|
||||
if ( vAPI.webextFlavor.soup.has('firefox') ) {
|
||||
window.close();
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: try to figure why this was used instead of a plain window.close().
|
||||
// https://github.com/gorhill/uBlock/commit/b301ac031e0c2e9a99cb6f8953319d44e22f33d2#diff-bc664f26b9c453e0d43a9379e8135c6a
|
||||
window.open('', '_self').close();
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -207,8 +258,22 @@ vAPI.localStorage = {
|
|||
}
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
})(this);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
DO NOT:
|
||||
- Remove the following code
|
||||
- Add code beyond the following code
|
||||
Reason:
|
||||
- https://github.com/gorhill/uBlock/pull/3721
|
||||
- uBO never uses the return value from injected content scripts
|
||||
|
||||
**/
|
||||
|
||||
void 0;
|
||||
|
|
|
@ -25,40 +25,17 @@
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
(function() {
|
||||
(( ) => {
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/407
|
||||
if ( vAPI.webextFlavor.soup.has('chromium') === false ) { return; }
|
||||
|
||||
const extToTypeMap = new Map([
|
||||
['eot','font'],['otf','font'],['svg','font'],['ttf','font'],['woff','font'],['woff2','font'],
|
||||
['mp3','media'],['mp4','media'],['webm','media'],
|
||||
['gif','image'],['ico','image'],['jpeg','image'],['jpg','image'],['png','image'],['webp','image']
|
||||
]);
|
||||
|
||||
// https://www.reddit.com/r/uBlockOrigin/comments/9vcrk3/bug_in_ubo_1173_betas_when_saving_files_hosted_on/
|
||||
// Some types can be mapped from 'other', thus include 'other' if and
|
||||
// only if the caller is interested in at least one of those types.
|
||||
const denormalizeTypes = function(aa) {
|
||||
if ( aa.length === 0 ) {
|
||||
return Array.from(vAPI.net.validTypes);
|
||||
}
|
||||
const out = new Set();
|
||||
let i = aa.length;
|
||||
while ( i-- ) {
|
||||
const type = aa[i];
|
||||
if ( vAPI.net.validTypes.has(type) ) {
|
||||
out.add(type);
|
||||
}
|
||||
}
|
||||
if ( out.has('other') === false ) {
|
||||
for ( const type of extToTypeMap.values() ) {
|
||||
if ( out.has(type) ) {
|
||||
out.add('other');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return Array.from(out);
|
||||
};
|
||||
|
||||
const headerValue = function(headers, name) {
|
||||
const headerValue = (headers, name) => {
|
||||
let i = headers.length;
|
||||
while ( i-- ) {
|
||||
if ( headers[i].name.toLowerCase() === name ) {
|
||||
|
@ -70,128 +47,131 @@
|
|||
|
||||
const parsedURL = new URL('https://www.example.org/');
|
||||
|
||||
vAPI.net.normalizeDetails = function(details) {
|
||||
let type = details.type;
|
||||
// Extend base class to normalize as per platform.
|
||||
|
||||
// https://github.com/uBlockOrigin/uMatrix-issues/issues/156#issuecomment-494427094
|
||||
if ( type === 'main_frame' ) {
|
||||
details.documentUrl = details.url;
|
||||
vAPI.Net = class extends vAPI.Net {
|
||||
constructor() {
|
||||
super();
|
||||
this.suspendedTabIds = new Set();
|
||||
}
|
||||
// Chromium 63+ supports the `initiator` property, which contains
|
||||
// the URL of the origin from which the network request was made.
|
||||
else if (
|
||||
typeof details.initiator === 'string' &&
|
||||
details.initiator !== 'null'
|
||||
) {
|
||||
details.documentUrl = details.initiator;
|
||||
}
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/1493
|
||||
// Chromium 49+/WebExtensions support a new request type: `ping`,
|
||||
// which is fired as a result of using `navigator.sendBeacon`.
|
||||
if ( type === 'ping' ) {
|
||||
details.type = 'beacon';
|
||||
return;
|
||||
}
|
||||
|
||||
if ( type === 'imageset' ) {
|
||||
details.type = 'image';
|
||||
return;
|
||||
}
|
||||
|
||||
// The rest of the function code is to normalize type
|
||||
if ( type !== 'other' ) { return; }
|
||||
|
||||
// Try to map known "extension" part of URL to request type.
|
||||
parsedURL.href = details.url;
|
||||
const path = parsedURL.pathname,
|
||||
pos = path.indexOf('.', path.length - 6);
|
||||
if ( pos !== -1 && (type = extToTypeMap.get(path.slice(pos + 1))) ) {
|
||||
details.type = type;
|
||||
return;
|
||||
}
|
||||
|
||||
// Try to extract type from response headers if present.
|
||||
if ( details.responseHeaders ) {
|
||||
type = headerValue(details.responseHeaders, 'content-type');
|
||||
if ( type.startsWith('font/') ) {
|
||||
details.type = 'font';
|
||||
return;
|
||||
normalizeDetails(details) {
|
||||
// Chromium 63+ supports the `initiator` property, which contains
|
||||
// the URL of the origin from which the network request was made.
|
||||
if (
|
||||
typeof details.initiator === 'string' &&
|
||||
details.initiator !== 'null'
|
||||
) {
|
||||
details.documentUrl = details.initiator;
|
||||
}
|
||||
if ( type.startsWith('image/') ) {
|
||||
|
||||
let type = details.type;
|
||||
|
||||
if ( type === 'imageset' ) {
|
||||
details.type = 'image';
|
||||
return;
|
||||
}
|
||||
if ( type.startsWith('audio/') || type.startsWith('video/') ) {
|
||||
details.type = 'media';
|
||||
|
||||
// The rest of the function code is to normalize type
|
||||
if ( type !== 'other' ) { return; }
|
||||
|
||||
// Try to map known "extension" part of URL to request type.
|
||||
parsedURL.href = details.url;
|
||||
const path = parsedURL.pathname,
|
||||
pos = path.indexOf('.', path.length - 6);
|
||||
if ( pos !== -1 && (type = extToTypeMap.get(path.slice(pos + 1))) ) {
|
||||
details.type = type;
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
vAPI.net.denormalizeFilters = function(filters) {
|
||||
const urls = filters.urls || [ '<all_urls>' ];
|
||||
let types = filters.types;
|
||||
if ( Array.isArray(types) ) {
|
||||
types = denormalizeTypes(types);
|
||||
}
|
||||
if (
|
||||
(vAPI.net.validTypes.has('websocket')) &&
|
||||
(types === undefined || types.indexOf('websocket') !== -1) &&
|
||||
(urls.indexOf('<all_urls>') === -1)
|
||||
) {
|
||||
if ( urls.indexOf('ws://*/*') === -1 ) {
|
||||
urls.push('ws://*/*');
|
||||
}
|
||||
if ( urls.indexOf('wss://*/*') === -1 ) {
|
||||
urls.push('wss://*/*');
|
||||
// Try to extract type from response headers if present.
|
||||
if ( details.responseHeaders ) {
|
||||
type = headerValue(details.responseHeaders, 'content-type');
|
||||
if ( type.startsWith('font/') ) {
|
||||
details.type = 'font';
|
||||
return;
|
||||
}
|
||||
if ( type.startsWith('image/') ) {
|
||||
details.type = 'image';
|
||||
return;
|
||||
}
|
||||
if ( type.startsWith('audio/') || type.startsWith('video/') ) {
|
||||
details.type = 'media';
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
return { types, urls };
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/2067
|
||||
// Experimental: Block everything until uBO is fully ready.
|
||||
|
||||
vAPI.net.onBeforeReady = (function() {
|
||||
let pendings;
|
||||
|
||||
const handler = function(details) {
|
||||
if ( pendings === undefined ) { return; }
|
||||
if ( details.tabId < 0 ) { return; }
|
||||
|
||||
pendings.add(details.tabId);
|
||||
|
||||
//console.log(`Aborting tab ${details.tabId}: ${details.type} ${details.url}`);
|
||||
|
||||
return { cancel: true };
|
||||
};
|
||||
|
||||
return {
|
||||
experimental: true,
|
||||
start: function() {
|
||||
pendings = new Set();
|
||||
browser.webRequest.onBeforeRequest.addListener(
|
||||
handler,
|
||||
{ urls: [ 'http://*/*', 'https://*/*' ] },
|
||||
[ 'blocking' ]
|
||||
);
|
||||
},
|
||||
// https://github.com/gorhill/uBlock/issues/2067
|
||||
// Force-reload tabs for which network requests were blocked
|
||||
// during launch. This can happen only if tabs were "suspended".
|
||||
stop: function() {
|
||||
if ( pendings === undefined ) { return; }
|
||||
browser.webRequest.onBeforeRequest.removeListener(handler);
|
||||
for ( const tabId of pendings ) {
|
||||
//console.log(`Reloading tab ${tabId}`);
|
||||
// https://www.reddit.com/r/uBlockOrigin/comments/9vcrk3/
|
||||
// Some types can be mapped from 'other', thus include 'other' if and
|
||||
// only if the caller is interested in at least one of those types.
|
||||
denormalizeTypes(types) {
|
||||
if ( types.length === 0 ) {
|
||||
return Array.from(this.validTypes);
|
||||
}
|
||||
const out = new Set();
|
||||
for ( const type of types ) {
|
||||
if ( this.validTypes.has(type) ) {
|
||||
out.add(type);
|
||||
}
|
||||
}
|
||||
if ( out.has('other') === false ) {
|
||||
for ( const type of extToTypeMap.values() ) {
|
||||
if ( out.has(type) ) {
|
||||
out.add('other');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return Array.from(out);
|
||||
}
|
||||
suspendOneRequest(details) {
|
||||
this.suspendedTabIds.add(details.tabId);
|
||||
return { cancel: true };
|
||||
}
|
||||
unsuspendAllRequests() {
|
||||
for ( const tabId of this.suspendedTabIds ) {
|
||||
vAPI.tabs.reload(tabId);
|
||||
}
|
||||
pendings = undefined;
|
||||
},
|
||||
this.suspendedTabIds.clear();
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/548
|
||||
// Use `X-DNS-Prefetch-Control` to workaround Chromium's disregard of the
|
||||
// setting "Predict network actions to improve page load performance".
|
||||
|
||||
vAPI.prefetching = (( ) => {
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/407
|
||||
if ( vAPI.webextFlavor.soup.has('chromium') === false ) { return; }
|
||||
|
||||
let listening = false;
|
||||
|
||||
const onHeadersReceived = function(details) {
|
||||
details.responseHeaders.push({
|
||||
name: 'X-DNS-Prefetch-Control',
|
||||
value: 'off'
|
||||
});
|
||||
return { responseHeaders: details.responseHeaders };
|
||||
};
|
||||
|
||||
return state => {
|
||||
const wr = chrome.webRequest;
|
||||
if ( state && listening ) {
|
||||
wr.onHeadersReceived.removeListener(onHeadersReceived);
|
||||
listening = false;
|
||||
} else if ( !state && !listening ) {
|
||||
wr.onHeadersReceived.addListener(
|
||||
onHeadersReceived,
|
||||
{
|
||||
urls: [ 'http://*/*', 'https://*/*' ],
|
||||
types: [ 'main_frame', 'sub_frame' ]
|
||||
},
|
||||
[ 'blocking', 'responseHeaders' ]
|
||||
);
|
||||
listening = true;
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
|
|
86
platform/chromium/vapi.js
Normal file
86
platform/chromium/vapi.js
Normal file
|
@ -0,0 +1,86 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uMatrix - a browser extension to block requests.
|
||||
Copyright (C) 2017-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
/* global HTMLDocument, XMLDocument */
|
||||
|
||||
// For background page, auxiliary pages, and content scripts.
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
if ( self.browser instanceof Object ) {
|
||||
self.chrome = self.browser;
|
||||
} else {
|
||||
self.browser = self.chrome;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1408996#c9
|
||||
var vAPI = self.vAPI; // jshint ignore:line
|
||||
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/464
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/1528
|
||||
// A XMLDocument can be a valid HTML document.
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/1124
|
||||
// Looks like `contentType` is on track to be standardized:
|
||||
// https://dom.spec.whatwg.org/#concept-document-content-type
|
||||
|
||||
// https://forums.lanik.us/viewtopic.php?f=64&t=31522
|
||||
// Skip text/plain documents.
|
||||
|
||||
if (
|
||||
(
|
||||
document instanceof HTMLDocument ||
|
||||
document instanceof XMLDocument &&
|
||||
document.createElement('div') instanceof HTMLDivElement
|
||||
) &&
|
||||
(
|
||||
/^image\/|^text\/plain/.test(document.contentType || '') === false
|
||||
) &&
|
||||
(
|
||||
self.vAPI instanceof Object === false || vAPI.uMatrix !== true
|
||||
)
|
||||
) {
|
||||
vAPI = self.vAPI = { uMatrix: true };
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
DO NOT:
|
||||
- Remove the following code
|
||||
- Add code beyond the following code
|
||||
Reason:
|
||||
- https://github.com/gorhill/uBlock/pull/3721
|
||||
- uMatrix never uses the return value from injected content scripts
|
||||
|
||||
**/
|
||||
|
||||
void 0;
|
176
platform/chromium/webext.js
Normal file
176
platform/chromium/webext.js
Normal file
|
@ -0,0 +1,176 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2019-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
// `webext` is a promisified api of `chrome`. Entries are added as
|
||||
// the promisification of uBO progress.
|
||||
|
||||
const webext = (( ) => { // jshint ignore:line
|
||||
// >>>>> start of private scope
|
||||
|
||||
const noopFunc = ( ) => { };
|
||||
|
||||
const promisifyNoFail = function(thisArg, fnName, outFn = r => r) {
|
||||
const fn = thisArg[fnName];
|
||||
return function() {
|
||||
return new Promise(resolve => {
|
||||
fn.call(thisArg, ...arguments, function() {
|
||||
if ( chrome.runtime.lastError instanceof Object ) {
|
||||
void chrome.runtime.lastError.message;
|
||||
}
|
||||
resolve(outFn(...arguments));
|
||||
});
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
const promisify = function(thisArg, fnName) {
|
||||
const fn = thisArg[fnName];
|
||||
return function() {
|
||||
return new Promise((resolve, reject) => {
|
||||
fn.call(thisArg, ...arguments, function() {
|
||||
const lastError = chrome.runtime.lastError;
|
||||
if ( lastError instanceof Object ) {
|
||||
return reject(lastError.message);
|
||||
}
|
||||
resolve(...arguments);
|
||||
});
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
const webext = {
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction
|
||||
browserAction: {
|
||||
setBadgeBackgroundColor: promisifyNoFail(chrome.browserAction, 'setBadgeBackgroundColor'),
|
||||
setBadgeText: promisifyNoFail(chrome.browserAction, 'setBadgeText'),
|
||||
setBadgeTextColor: noopFunc,
|
||||
setIcon: promisifyNoFail(chrome.browserAction, 'setIcon'),
|
||||
setTitle: promisifyNoFail(chrome.browserAction, 'setTitle'),
|
||||
},
|
||||
cookies: {
|
||||
getAll: promisifyNoFail(chrome.cookies, 'getAll'),
|
||||
remove: promisifyNoFail(chrome.cookies, 'remove'),
|
||||
},
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/menus
|
||||
/*
|
||||
menus: {
|
||||
create: function() {
|
||||
return chrome.contextMenus.create(...arguments, ( ) => {
|
||||
void chrome.runtime.lastError;
|
||||
});
|
||||
},
|
||||
onClicked: chrome.contextMenus.onClicked,
|
||||
remove: promisifyNoFail(chrome.contextMenus, 'remove'),
|
||||
},
|
||||
*/
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy
|
||||
privacy: {
|
||||
},
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage
|
||||
storage: {
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/local
|
||||
local: {
|
||||
clear: promisify(chrome.storage.local, 'clear'),
|
||||
get: promisify(chrome.storage.local, 'get'),
|
||||
getBytesInUse: promisify(chrome.storage.local, 'getBytesInUse'),
|
||||
remove: promisify(chrome.storage.local, 'remove'),
|
||||
set: promisify(chrome.storage.local, 'set'),
|
||||
},
|
||||
},
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs
|
||||
tabs: {
|
||||
get: promisifyNoFail(chrome.tabs, 'get', tab => tab instanceof Object ? tab : null),
|
||||
executeScript: promisifyNoFail(chrome.tabs, 'executeScript'),
|
||||
insertCSS: promisifyNoFail(chrome.tabs, 'insertCSS'),
|
||||
query: promisifyNoFail(chrome.tabs, 'query', tabs => Array.isArray(tabs) ? tabs : []),
|
||||
reload: promisifyNoFail(chrome.tabs, 'reload'),
|
||||
remove: promisifyNoFail(chrome.tabs, 'remove'),
|
||||
update: promisifyNoFail(chrome.tabs, 'update', tab => tab instanceof Object ? tab : null),
|
||||
},
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webNavigation
|
||||
webNavigation: {
|
||||
getFrame: promisify(chrome.webNavigation, 'getFrame'),
|
||||
},
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/windows
|
||||
windows: {
|
||||
get: promisifyNoFail(chrome.windows, 'get', win => win instanceof Object ? win : null),
|
||||
create: promisifyNoFail(chrome.windows, 'create', win => win instanceof Object ? win : null),
|
||||
update: promisifyNoFail(chrome.windows, 'update', win => win instanceof Object ? win : null),
|
||||
},
|
||||
};
|
||||
|
||||
// browser.privacy entries
|
||||
{
|
||||
const settings = [
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy/network
|
||||
[ 'network', 'networkPredictionEnabled' ],
|
||||
[ 'network', 'webRTCIPHandlingPolicy' ],
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/privacy/websites
|
||||
[ 'websites', 'hyperlinkAuditingEnabled' ],
|
||||
];
|
||||
for ( const [ category, setting ] of settings ) {
|
||||
let categoryEntry = webext.privacy[category];
|
||||
if ( categoryEntry instanceof Object === false ) {
|
||||
categoryEntry = webext.privacy[category] = {};
|
||||
}
|
||||
const settingEntry = categoryEntry[setting] = {};
|
||||
const thisArg = chrome.privacy[category][setting];
|
||||
settingEntry.clear = promisifyNoFail(thisArg, 'clear');
|
||||
settingEntry.get = promisifyNoFail(thisArg, 'get');
|
||||
settingEntry.set = promisifyNoFail(thisArg, 'set');
|
||||
}
|
||||
}
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/managed
|
||||
if ( chrome.storage.managed instanceof Object ) {
|
||||
webext.storage.managed = {
|
||||
get: promisify(chrome.storage.managed, 'get'),
|
||||
};
|
||||
}
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage/sync
|
||||
if ( chrome.storage.sync instanceof Object ) {
|
||||
webext.storage.sync = {
|
||||
QUOTA_BYTES: chrome.storage.sync.QUOTA_BYTES,
|
||||
QUOTA_BYTES_PER_ITEM: chrome.storage.sync.QUOTA_BYTES_PER_ITEM,
|
||||
MAX_ITEMS: chrome.storage.sync.MAX_ITEMS,
|
||||
MAX_WRITE_OPERATIONS_PER_HOUR: chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_HOUR,
|
||||
MAX_WRITE_OPERATIONS_PER_MINUTE: chrome.storage.sync.MAX_WRITE_OPERATIONS_PER_MINUTE,
|
||||
|
||||
clear: promisify(chrome.storage.sync, 'clear'),
|
||||
get: promisify(chrome.storage.sync, 'get'),
|
||||
getBytesInUse: promisify(chrome.storage.sync, 'getBytesInUse'),
|
||||
remove: promisify(chrome.storage.sync, 'remove'),
|
||||
set: promisify(chrome.storage.sync, 'set'),
|
||||
};
|
||||
}
|
||||
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=608854
|
||||
if ( chrome.tabs.removeCSS instanceof Function ) {
|
||||
webext.tabs.removeCSS = promisifyNoFail(chrome.tabs, 'removeCSS');
|
||||
}
|
||||
|
||||
return webext;
|
||||
|
||||
// <<<<< end of private scope
|
||||
})();
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"applications": {
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"id": "uMatrix@raymondhill.net",
|
||||
"strict_min_version": "56.0a1"
|
||||
|
@ -20,7 +20,7 @@
|
|||
"content_scripts": [
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["/js/vapi-client.js", "/js/contentscript-start.js"],
|
||||
"js": ["/js/vapi.js", "/js/vapi-client.js", "/js/contentscript-start.js"],
|
||||
"run_at": "document_start",
|
||||
"all_frames": true
|
||||
},
|
||||
|
@ -46,6 +46,7 @@
|
|||
"permissions": [
|
||||
"browsingData",
|
||||
"cookies",
|
||||
"dns",
|
||||
"privacy",
|
||||
"storage",
|
||||
"tabs",
|
||||
|
|
|
@ -1,263 +0,0 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uMatrix - a browser extension to block requests.
|
||||
Copyright (C) 2016-2017 The uBlock Origin authors
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
/* global indexedDB, IDBDatabase */
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// The code below has been originally manually imported from:
|
||||
// Commit: https://github.com/nikrolls/uBlock-Edge/commit/d1538ea9bea89d507219d3219592382eee306134
|
||||
// Commit date: 29 October 2016
|
||||
// Commit author: https://github.com/nikrolls
|
||||
// Commit message: "Implement cacheStorage using IndexedDB"
|
||||
|
||||
// The original imported code has been subsequently modified as it was not
|
||||
// compatible with Firefox.
|
||||
// (a Promise thing, see https://github.com/dfahlander/Dexie.js/issues/317)
|
||||
// Furthermore, code to migrate from browser.storage.local to vAPI.cacheStorage
|
||||
// has been added, for seamless migration of cache-related entries into
|
||||
// indexedDB.
|
||||
|
||||
// Imported from uBlock Origin project.
|
||||
|
||||
vAPI.cacheStorage = (function() {
|
||||
const STORAGE_NAME = 'uMatrixCacheStorage';
|
||||
var db;
|
||||
var pending = [];
|
||||
|
||||
// prime the db so that it's ready asap for next access.
|
||||
getDb(noopfn);
|
||||
|
||||
return { get, set, remove, clear, getBytesInUse };
|
||||
|
||||
function get(input, callback) {
|
||||
if ( typeof callback !== 'function' ) { return; }
|
||||
if ( input === null ) {
|
||||
return getAllFromDb(callback);
|
||||
}
|
||||
var toRead, output = {};
|
||||
if ( typeof input === 'string' ) {
|
||||
toRead = [ input ];
|
||||
} else if ( Array.isArray(input) ) {
|
||||
toRead = input;
|
||||
} else /* if ( typeof input === 'object' ) */ {
|
||||
toRead = Object.keys(input);
|
||||
output = input;
|
||||
}
|
||||
return getFromDb(toRead, output, callback);
|
||||
}
|
||||
|
||||
function set(input, callback) {
|
||||
putToDb(input, callback);
|
||||
}
|
||||
|
||||
function remove(key, callback) {
|
||||
deleteFromDb(key, callback);
|
||||
}
|
||||
|
||||
function clear(callback) {
|
||||
clearDb(callback);
|
||||
}
|
||||
|
||||
function getBytesInUse(keys, callback) {
|
||||
// TODO: implement this
|
||||
callback(0);
|
||||
}
|
||||
|
||||
function genericErrorHandler(error) {
|
||||
console.error('[%s]', STORAGE_NAME, error);
|
||||
}
|
||||
|
||||
function noopfn() {
|
||||
}
|
||||
|
||||
function processPendings() {
|
||||
var cb;
|
||||
while ( (cb = pending.shift()) ) {
|
||||
cb(db);
|
||||
}
|
||||
}
|
||||
|
||||
function getDb(callback) {
|
||||
if ( pending === undefined ) {
|
||||
return callback();
|
||||
}
|
||||
if ( pending.length !== 0 ) {
|
||||
return pending.push(callback);
|
||||
}
|
||||
if ( db instanceof IDBDatabase ) {
|
||||
return callback(db);
|
||||
}
|
||||
pending.push(callback);
|
||||
if ( pending.length !== 1 ) { return; }
|
||||
// https://github.com/gorhill/uBlock/issues/3156
|
||||
// I have observed that no event was fired in Tor Browser 7.0.7 +
|
||||
// medium security level after the request to open the database was
|
||||
// created. When this occurs, I have also observed that the `error`
|
||||
// property was already set, so this means uBO can detect here whether
|
||||
// the database can be opened successfully. A try-catch block is
|
||||
// necessary when reading the `error` property because we are not
|
||||
// allowed to read this propery outside of event handlers in newer
|
||||
// implementation of IDBRequest (my understanding).
|
||||
var req;
|
||||
try {
|
||||
req = indexedDB.open(STORAGE_NAME, 1);
|
||||
if ( req.error ) {
|
||||
console.log(req.error);
|
||||
req = undefined;
|
||||
}
|
||||
} catch(ex) {
|
||||
}
|
||||
if ( req === undefined ) {
|
||||
processPendings();
|
||||
pending = undefined;
|
||||
return;
|
||||
}
|
||||
req.onupgradeneeded = function(ev) {
|
||||
req = undefined;
|
||||
db = ev.target.result;
|
||||
db.onerror = db.onabort = genericErrorHandler;
|
||||
var table = db.createObjectStore(STORAGE_NAME, { keyPath: 'key' });
|
||||
table.createIndex('value', 'value', { unique: false });
|
||||
};
|
||||
req.onsuccess = function(ev) {
|
||||
req = undefined;
|
||||
db = ev.target.result;
|
||||
db.onerror = db.onabort = genericErrorHandler;
|
||||
processPendings();
|
||||
};
|
||||
req.onerror = req.onblocked = function() {
|
||||
req = undefined;
|
||||
console.log(this.error);
|
||||
processPendings();
|
||||
pending = undefined;
|
||||
};
|
||||
}
|
||||
|
||||
function getFromDb(keys, store, callback) {
|
||||
if ( typeof callback !== 'function' ) { return; }
|
||||
if ( keys.length === 0 ) { return callback(store); }
|
||||
var gotOne = function() {
|
||||
if ( typeof this.result === 'object' ) {
|
||||
store[this.result.key] = this.result.value;
|
||||
}
|
||||
};
|
||||
getDb(function(db) {
|
||||
if ( !db ) { return callback(); }
|
||||
var transaction = db.transaction(STORAGE_NAME);
|
||||
transaction.oncomplete =
|
||||
transaction.onerror =
|
||||
transaction.onabort = function() {
|
||||
return callback(store);
|
||||
};
|
||||
var table = transaction.objectStore(STORAGE_NAME);
|
||||
for ( var key of keys ) {
|
||||
var req = table.get(key);
|
||||
req.onsuccess = gotOne;
|
||||
req.onerror = noopfn;
|
||||
req = undefined;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getAllFromDb(callback) {
|
||||
if ( typeof callback !== 'function' ) {
|
||||
callback = noopfn;
|
||||
}
|
||||
getDb(function(db) {
|
||||
if ( !db ) { return callback(); }
|
||||
var output = {};
|
||||
var transaction = db.transaction(STORAGE_NAME);
|
||||
transaction.oncomplete =
|
||||
transaction.onerror =
|
||||
transaction.onabort = function() {
|
||||
callback(output);
|
||||
};
|
||||
var table = transaction.objectStore(STORAGE_NAME),
|
||||
req = table.openCursor();
|
||||
req.onsuccess = function(ev) {
|
||||
var cursor = ev.target.result;
|
||||
if ( !cursor ) { return; }
|
||||
output[cursor.key] = cursor.value;
|
||||
cursor.continue();
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function putToDb(input, callback) {
|
||||
if ( typeof callback !== 'function' ) {
|
||||
callback = noopfn;
|
||||
}
|
||||
var keys = Object.keys(input);
|
||||
if ( keys.length === 0 ) { return callback(); }
|
||||
getDb(function(db) {
|
||||
if ( !db ) { return callback(); }
|
||||
var transaction = db.transaction(STORAGE_NAME, 'readwrite');
|
||||
transaction.oncomplete =
|
||||
transaction.onerror =
|
||||
transaction.onabort = callback;
|
||||
var table = transaction.objectStore(STORAGE_NAME);
|
||||
for ( var key of keys ) {
|
||||
var entry = {};
|
||||
entry.key = key;
|
||||
entry.value = input[key];
|
||||
table.put(entry);
|
||||
entry = undefined;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function deleteFromDb(input, callback) {
|
||||
if ( typeof callback !== 'function' ) {
|
||||
callback = noopfn;
|
||||
}
|
||||
var keys = Array.isArray(input) ? input.slice() : [ input ];
|
||||
if ( keys.length === 0 ) { return callback(); }
|
||||
getDb(function(db) {
|
||||
if ( !db ) { return callback(); }
|
||||
var transaction = db.transaction(STORAGE_NAME, 'readwrite');
|
||||
transaction.oncomplete =
|
||||
transaction.onerror =
|
||||
transaction.onabort = callback;
|
||||
var table = transaction.objectStore(STORAGE_NAME);
|
||||
for ( var key of keys ) {
|
||||
table.delete(key);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function clearDb(callback) {
|
||||
if ( typeof callback !== 'function' ) {
|
||||
callback = noopfn;
|
||||
}
|
||||
getDb(function(db) {
|
||||
if ( !db ) { return callback(); }
|
||||
var req = db.transaction(STORAGE_NAME, 'readwrite')
|
||||
.objectStore(STORAGE_NAME)
|
||||
.clear();
|
||||
req.onsuccess = req.onerror = callback;
|
||||
});
|
||||
}
|
||||
}());
|
||||
|
||||
/******************************************************************************/
|
|
@ -25,12 +25,14 @@
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
(function() {
|
||||
(( ) => {
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/407
|
||||
if ( vAPI.webextFlavor.soup.has('firefox') === false ) { return; }
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/2950
|
||||
// Firefox 56 does not normalize URLs to ASCII, uBO must do this itself.
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=945240
|
||||
const evalMustPunycode = function() {
|
||||
const evalMustPunycode = ( ) => {
|
||||
return vAPI.webextFlavor.soup.has('firefox') &&
|
||||
vAPI.webextFlavor.major < 57;
|
||||
};
|
||||
|
@ -43,142 +45,218 @@
|
|||
mustPunycode = evalMustPunycode();
|
||||
}, { once: true });
|
||||
|
||||
const denormalizeTypes = function(aa) {
|
||||
if ( aa.length === 0 ) {
|
||||
return Array.from(vAPI.net.validTypes);
|
||||
}
|
||||
const out = new Set();
|
||||
let i = aa.length;
|
||||
while ( i-- ) {
|
||||
let type = aa[i];
|
||||
if ( vAPI.net.validTypes.has(type) ) {
|
||||
out.add(type);
|
||||
}
|
||||
if ( type === 'image' && vAPI.net.validTypes.has('imageset') ) {
|
||||
out.add('imageset');
|
||||
}
|
||||
if ( type === 'sub_frame' ) {
|
||||
out.add('object');
|
||||
}
|
||||
}
|
||||
return Array.from(out);
|
||||
};
|
||||
|
||||
const punycode = self.punycode;
|
||||
const reAsciiHostname = /^https?:\/\/[0-9a-z_.:@-]+[/?#]/;
|
||||
const parsedURL = new URL('about:blank');
|
||||
|
||||
vAPI.net.normalizeDetails = function(details) {
|
||||
if ( mustPunycode && !reAsciiHostname.test(details.url) ) {
|
||||
parsedURL.href = details.url;
|
||||
details.url = details.url.replace(
|
||||
parsedURL.hostname,
|
||||
punycode.toASCII(parsedURL.hostname)
|
||||
);
|
||||
// Related issues:
|
||||
// - https://github.com/gorhill/uBlock/issues/1327
|
||||
// - https://github.com/uBlockOrigin/uBlock-issues/issues/128
|
||||
// - https://bugzilla.mozilla.org/show_bug.cgi?id=1503721
|
||||
|
||||
// Extend base class to normalize as per platform.
|
||||
|
||||
vAPI.Net = class extends vAPI.Net {
|
||||
constructor() {
|
||||
super();
|
||||
this.pendingRequests = [];
|
||||
this.cnames = new Map([ [ '', '' ] ]);
|
||||
this.cnameIgnoreList = null;
|
||||
this.cnameIgnore1stParty = true;
|
||||
this.cnameIgnoreExceptions = true;
|
||||
this.cnameIgnoreRootDocument = true;
|
||||
this.cnameMaxTTL = 60;
|
||||
this.cnameReplayFullURL = false;
|
||||
this.cnameTimer = undefined;
|
||||
this.canRevealCNAME = browser.dns instanceof Object;
|
||||
}
|
||||
|
||||
const type = details.type;
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/1493
|
||||
// Chromium 49+/WebExtensions support a new request type: `ping`,
|
||||
// which is fired as a result of using `navigator.sendBeacon`.
|
||||
if ( type === 'ping' ) {
|
||||
details.type = 'beacon';
|
||||
return;
|
||||
setOptions(options) {
|
||||
super.setOptions(options);
|
||||
this.cnameIgnoreList = this.regexFromStrList(options.cnameIgnoreList);
|
||||
this.cnameIgnore1stParty = options.cnameIgnore1stParty !== false;
|
||||
this.cnameIgnoreExceptions = options.cnameIgnoreExceptions !== false;
|
||||
this.cnameIgnoreRootDocument = options.cnameIgnoreRootDocument !== false;
|
||||
this.cnameMaxTTL = options.cnameMaxTTL || 120;
|
||||
this.cnameReplayFullURL = options.cnameReplayFullURL === true;
|
||||
this.cnames.clear(); this.cnames.set('', '');
|
||||
}
|
||||
normalizeDetails(details) {
|
||||
if ( mustPunycode && !reAsciiHostname.test(details.url) ) {
|
||||
parsedURL.href = details.url;
|
||||
details.url = details.url.replace(
|
||||
parsedURL.hostname,
|
||||
punycode.toASCII(parsedURL.hostname)
|
||||
);
|
||||
}
|
||||
|
||||
if ( type === 'imageset' ) {
|
||||
details.type = 'image';
|
||||
return;
|
||||
}
|
||||
const type = details.type;
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/345
|
||||
// Re-categorize an embedded object as a `sub_frame` if its
|
||||
// content type is that of a HTML document.
|
||||
if ( type === 'object' && Array.isArray(details.responseHeaders) ) {
|
||||
for ( const header of details.responseHeaders ) {
|
||||
if ( header.name.toLowerCase() === 'content-type' ) {
|
||||
if ( header.value.startsWith('text/html') ) {
|
||||
details.type = 'sub_frame';
|
||||
if ( type === 'imageset' ) {
|
||||
details.type = 'image';
|
||||
return;
|
||||
}
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/345
|
||||
// Re-categorize an embedded object as a `sub_frame` if its
|
||||
// content type is that of a HTML document.
|
||||
if ( type === 'object' && Array.isArray(details.responseHeaders) ) {
|
||||
for ( const header of details.responseHeaders ) {
|
||||
if ( header.name.toLowerCase() === 'content-type' ) {
|
||||
if ( header.value.startsWith('text/html') ) {
|
||||
details.type = 'sub_frame';
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
vAPI.net.denormalizeFilters = function(filters) {
|
||||
const urls = filters.urls || [ '<all_urls>' ];
|
||||
let types = filters.types;
|
||||
if ( Array.isArray(types) ) {
|
||||
types = denormalizeTypes(types);
|
||||
}
|
||||
if (
|
||||
(vAPI.net.validTypes.has('websocket')) &&
|
||||
(types === undefined || types.indexOf('websocket') !== -1) &&
|
||||
(urls.indexOf('<all_urls>') === -1)
|
||||
) {
|
||||
if ( urls.indexOf('ws://*/*') === -1 ) {
|
||||
urls.push('ws://*/*');
|
||||
denormalizeTypes(types) {
|
||||
if ( types.length === 0 ) {
|
||||
return Array.from(this.validTypes);
|
||||
}
|
||||
if ( urls.indexOf('wss://*/*') === -1 ) {
|
||||
urls.push('wss://*/*');
|
||||
const out = new Set();
|
||||
for ( const type of types ) {
|
||||
if ( this.validTypes.has(type) ) {
|
||||
out.add(type);
|
||||
}
|
||||
if ( type === 'image' && this.validTypes.has('imageset') ) {
|
||||
out.add('imageset');
|
||||
}
|
||||
if ( type === 'sub_frame' ) {
|
||||
out.add('object');
|
||||
}
|
||||
}
|
||||
return Array.from(out);
|
||||
}
|
||||
return { types, urls };
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Related issues:
|
||||
// - https://github.com/gorhill/uBlock/issues/1327
|
||||
// - https://github.com/uBlockOrigin/uBlock-issues/issues/128
|
||||
// - https://bugzilla.mozilla.org/show_bug.cgi?id=1503721
|
||||
|
||||
vAPI.net.onBeforeReady = (function() {
|
||||
let pendings;
|
||||
|
||||
const handler = function(details) {
|
||||
if ( pendings === undefined ) { return; }
|
||||
if ( details.tabId < 0 ) { return; }
|
||||
|
||||
//console.log(`Deferring tab ${details.tabId}: ${details.type} ${details.url}`);
|
||||
|
||||
const pending = {
|
||||
details: Object.assign({}, details),
|
||||
resolve: undefined,
|
||||
promise: undefined
|
||||
};
|
||||
|
||||
pending.promise = new Promise(function(resolve) {
|
||||
pending.resolve = resolve;
|
||||
});
|
||||
|
||||
pendings.push(pending);
|
||||
|
||||
return pending.promise;
|
||||
};
|
||||
|
||||
return {
|
||||
start: function() {
|
||||
pendings = [];
|
||||
browser.webRequest.onBeforeRequest.addListener(
|
||||
handler,
|
||||
{ urls: [ 'http://*/*', 'https://*/*' ] },
|
||||
[ 'blocking' ]
|
||||
processCanonicalName(hn, cn, details) {
|
||||
const hnBeg = details.url.indexOf(hn);
|
||||
if ( hnBeg === -1 ) { return; }
|
||||
const oldURL = details.url;
|
||||
let newURL = oldURL.slice(0, hnBeg) + cn;
|
||||
const hnEnd = hnBeg + hn.length;
|
||||
if ( this.cnameReplayFullURL ) {
|
||||
newURL += oldURL.slice(hnEnd);
|
||||
} else {
|
||||
const pathBeg = oldURL.indexOf('/', hnEnd);
|
||||
if ( pathBeg !== -1 ) {
|
||||
newURL += oldURL.slice(hnEnd, pathBeg + 1);
|
||||
}
|
||||
}
|
||||
details.url = newURL;
|
||||
details.aliasURL = oldURL;
|
||||
return super.onBeforeSuspendableRequest(details);
|
||||
}
|
||||
recordCanonicalName(hn, record) {
|
||||
let cname =
|
||||
typeof record.canonicalName === 'string' &&
|
||||
record.canonicalName !== hn
|
||||
? record.canonicalName
|
||||
: '';
|
||||
if (
|
||||
cname !== '' &&
|
||||
this.cnameIgnore1stParty &&
|
||||
vAPI.domainFromHostname(cname) === vAPI.domainFromHostname(hn)
|
||||
) {
|
||||
cname = '';
|
||||
}
|
||||
if (
|
||||
cname !== '' &&
|
||||
this.cnameIgnoreList !== null &&
|
||||
this.cnameIgnoreList.test(cname)
|
||||
) {
|
||||
cname = '';
|
||||
}
|
||||
this.cnames.set(hn, cname);
|
||||
if ( this.cnameTimer === undefined ) {
|
||||
this.cnameTimer = self.setTimeout(
|
||||
( ) => {
|
||||
this.cnameTimer = undefined;
|
||||
this.cnames.clear(); this.cnames.set('', '');
|
||||
},
|
||||
this.cnameMaxTTL * 60000
|
||||
);
|
||||
}
|
||||
return cname;
|
||||
}
|
||||
regexFromStrList(list) {
|
||||
if (
|
||||
typeof list !== 'string' ||
|
||||
list.length === 0 ||
|
||||
list === 'unset' ||
|
||||
browser.dns instanceof Object === false
|
||||
) {
|
||||
return null;
|
||||
}
|
||||
if ( list === '*' ) {
|
||||
return /^./;
|
||||
}
|
||||
return new RegExp(
|
||||
'(?:^|\.)(?:' +
|
||||
list.trim()
|
||||
.split(/\s+/)
|
||||
.map(a => a.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
|
||||
.join('|') +
|
||||
')$'
|
||||
);
|
||||
},
|
||||
stop: function(resolver) {
|
||||
if ( pendings === undefined ) { return; }
|
||||
for ( const pending of pendings ) {
|
||||
const details = pending.details;
|
||||
vAPI.net.normalizeDetails(details);
|
||||
//console.log(`Processing tab ${details.tabId}: ${details.type} ${details.url}`);
|
||||
pending.resolve(resolver(details));
|
||||
}
|
||||
onBeforeSuspendableRequest(details) {
|
||||
const r = super.onBeforeSuspendableRequest(details);
|
||||
if ( this.canRevealCNAME === false ) { return r; }
|
||||
if ( r !== undefined ) {
|
||||
if ( r.cancel === false ) { return; }
|
||||
if (
|
||||
r.cancel === true ||
|
||||
r.redirectUrl !== undefined ||
|
||||
this.cnameIgnoreExceptions
|
||||
) {
|
||||
return r;
|
||||
}
|
||||
}
|
||||
pendings = undefined;
|
||||
},
|
||||
if (
|
||||
details.type === 'main_frame' &&
|
||||
this.cnameIgnoreRootDocument
|
||||
) {
|
||||
return;
|
||||
}
|
||||
const hn = vAPI.hostnameFromNetworkURL(details.url);
|
||||
const cname = this.cnames.get(hn);
|
||||
if ( cname === '' ) { return; }
|
||||
if ( cname !== undefined ) {
|
||||
return this.processCanonicalName(hn, cname, details);
|
||||
}
|
||||
return browser.dns.resolve(hn, [ 'canonical_name' ]).then(
|
||||
rec => {
|
||||
const cname = this.recordCanonicalName(hn, rec);
|
||||
if ( cname === '' ) { return; }
|
||||
return this.processCanonicalName(hn, cname, details);
|
||||
},
|
||||
( ) => {
|
||||
this.cnames.set(hn, '');
|
||||
}
|
||||
);
|
||||
}
|
||||
suspendOneRequest(details) {
|
||||
const pending = {
|
||||
details: Object.assign({}, details),
|
||||
resolve: undefined,
|
||||
promise: undefined
|
||||
};
|
||||
pending.promise = new Promise(resolve => {
|
||||
pending.resolve = resolve;
|
||||
});
|
||||
this.pendingRequests.push(pending);
|
||||
return pending.promise;
|
||||
}
|
||||
unsuspendAllRequests() {
|
||||
const pendingRequests = this.pendingRequests;
|
||||
this.pendingRequests = [];
|
||||
for ( const entry of pendingRequests ) {
|
||||
entry.resolve(this.onBeforeSuspendableRequest(entry.details));
|
||||
}
|
||||
}
|
||||
canSuspend() {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
|
|
24
platform/firefox/webext.js
Normal file
24
platform/firefox/webext.js
Normal file
|
@ -0,0 +1,24 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2019-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const webext = browser; // jshint ignore:line
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "سكربت",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "محاكات وسمات <code><noscript></code>",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "إعادة كافة التغييرات المؤقتة",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "تحديث الصفحة",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "فلتر مرشح",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "حذف الارتباط: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "فشل في حذف الارتباط: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "مخبأ المتصفح مسح",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "الأصول تحديث: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – إعدادات",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "انهيار نائبا من عناصر المحظورة",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "تقليص مكان العناصر المدرجة في القائمة السوداء",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "الحذر! سيؤدي هذا إلى إزالة كافة الإعدادات المخصصة الخاصة بك. هل أنت متأكد أنك تريد المتابعة؟?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "فلتر مرشح",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "الحد الأقصى لعدد المحاولات",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "حذف الارتباط: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "فشل في حذف الارتباط: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "مخبأ المتصفح مسح",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "الأصول تحديث: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "منعت uMatrix على الصفحة التالية من التحميل:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "تطبيق التغييرات",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
"description": "a tab in dashboard"
|
||||
},
|
||||
"userRulesPageName": {
|
||||
"message": "Мои правила",
|
||||
"message": "Мой правила",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
|
@ -71,8 +71,8 @@
|
|||
"message": "скрипт",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -108,7 +108,7 @@
|
|||
"description": "Tool tip for the revert local permission button"
|
||||
},
|
||||
"matrixReloadButton": {
|
||||
"message": "Презарежда страницата.\nС натискане на Shift прескача буфера на четеца.",
|
||||
"message": "Презареждане на страницата.\nС натискане на Shift прескача буфера на четеца.",
|
||||
"description": "Tool tip for the reload button"
|
||||
},
|
||||
"matrix1stPartyLabel": {
|
||||
|
@ -120,11 +120,11 @@
|
|||
"description": "Appears in the metadata row of bottom-most group: **mind the limited width**"
|
||||
},
|
||||
"matrixSwitchNoMixedContent": {
|
||||
"message": "Без смесено съдържание",
|
||||
"message": "Забрана на смесено съдържание",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoWorker": {
|
||||
"message": "Забрани web workers",
|
||||
"message": "Забрана на web workers",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchReferrerSpoof": {
|
||||
|
@ -135,20 +135,24 @@
|
|||
"message": "Фалшифицирайте <code><noscript></code> таговете",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Отхвърля всички временни промени",
|
||||
"message": "Отмяна на всички временни промени",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixLoggerMenuEntry": {
|
||||
"message": "Отваря журнала",
|
||||
"message": "Отваряне на журнала",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixDashboardMenuEntry": {
|
||||
"message": "Към таблото",
|
||||
"message": "Към контролното табло",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound": {
|
||||
"message": "Не е намерена уеб страница",
|
||||
"message": "Няма намерена уеб страница",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Опресняване",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "филтърен израз(и)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "изтрити бисквитки: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "грешка при изтриване на бисквитки: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "кешът в браузъра е изчистен",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "ресурс обновен: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Настройки",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -476,7 +628,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Auto-update assets",
|
||||
"message": "Автоматично обновяване на ресурси",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
|
@ -488,7 +640,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsHint": {
|
||||
"message": "Import external assets here: \nOne URL per line; invalid URLs will be silently ignored.",
|
||||
"message": "Въведете външни ресурси тук:\nЕдин URL адрес по ред; невалидни URL адреси ще бъдат игнорирани без уведомяване.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsParse": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Внимание! Така ще бъдат заличени всички ръчни настройки. Наистина ли искате да продължите?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "филтърен израз(и)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Максимален брой записи",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "изтрити бисквитки: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "грешка при изтриване на бисквитки: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "кешът в браузъра е изчистен",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix попречи на зареждането на следната страница:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Прилагане на промените",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "স্ক্রিপ্ট",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "সব অস্থায়ী পরিবর্তন প্রত্যাবর্তন করুন",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "পুন:সতেজ",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "পরিশোধকের অভিব্যক্তি",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "কুকি অপসারিত: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "কুকি অপসারণ করতে ব্যর্থ: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "ব্রাউজারের ক্যাশে পরিষ্কার হয়েছে",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "অ্যাসেট হালনাগাদকৃত: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uম্যাট্রিক্স – সেটিংস",
|
||||
"description": ""
|
||||
|
@ -321,10 +473,10 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "অবরুদ্ধ উপাদান সংকোচনের স্থানধারক",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "সতর্কতা! এটি আপনার সব স্বনির্ধারিত সেটিংস সরিয়ে দেবে? আপনি কি অগ্রসর হতে চান?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "পরিশোধকের অভিব্যক্তি",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "ভুক্তির সর্বাধিক সংখ্যা",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "কুকি অপসারিত: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "কুকি অপসারণ করতে ব্যর্থ: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "ব্রাউজারের ক্যাশে পরিষ্কার হয়েছে",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "অ্যাসেট হালনাগাদকৃত: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uম্যাট্রিক্স নিচের পৃষ্ঠা লোড করাকে প্রতিহত করেছে:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "পরিবর্তনগুলি প্রয়োগ করুন",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
"message": "Assets",
|
||||
"message": "Assety",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
|
@ -71,8 +71,8 @@
|
|||
"message": "skript",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Falšovat <code><noscript></code> tagy",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Vrátit všechny dočasné změny",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Obnovit",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "výraz(y) filtru",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie odstraněno: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "smazání cookie se nepodařilo: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "cache prohlížeče vymazána",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset aktualizován: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "µMatrix – Nastavení",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Skrýt zástupné objekty zablokovaných prvků",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Skrýt blokované prvky",
|
||||
|
@ -452,7 +604,7 @@
|
|||
"description": "default file name to use"
|
||||
},
|
||||
"assetsHostsSection": {
|
||||
"message": "Hosts files",
|
||||
"message": "Soubory hostů",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt": {
|
||||
|
@ -476,7 +628,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Auto-update assets",
|
||||
"message": "Automatické aktualizace assetů",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
|
@ -524,7 +676,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"message": "Moje recepty",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Varování: Tento příkaz odstraní všechna vaše nastavení. Jste si jisti, že chcete pokračovat?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "výraz(y) filtru",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximální počet záznamů",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie odstraněno: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "smazání cookie se nepodařilo: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "cache prohlížeče vymazána",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset aktualizován: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "µMatrix zabránil následující stránce v načítání:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Použít změny",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Tilbagestil alle midlertidige ændringer",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Genindlæs",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie slettet: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "Mislykkedes med at slette cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache slettet",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "Komponenter opdateret: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Indstillinger",
|
||||
"description": ""
|
||||
|
@ -321,10 +473,10 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Sammenfold pladsholder for blokerede elementer",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Forsigtig! Dette slette alle brugerdefinerede indstillinger. Er du sikker på, at du vil fortsætte?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Det maksimale antal af linjer",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie slettet: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "Mislykkedes med at slette cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache slettet",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "Komponenter opdateret: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix har blokeret den følgende webside:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "Skript",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "<code><noscript></code> Tags verschleiern",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Mache alle temporären Änderungen rückgängig",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Neu laden",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "Filter-Ausdrücke",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "Cookie gelöscht: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "Löschen des Cookies fehlgeschlagen: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "Browser-Cache geleert",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "Hosts-Dateien aktualisiert: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Einstellungen",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Verstecke die Platzhalter für blockierte Elemente",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Verstecke die Platzhalter für Elemente auf der Blacklist",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Vorsicht! Dies wird alle deine individuellen Einstellungen entfernen. Bist du sicher, dass du fortfahren willst?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "Filter-Ausdrücke",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximale Zahl an Einträgen",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "Cookie gelöscht: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "Löschen des Cookies fehlgeschlagen: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "Browser-Cache geleert",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "Hosts-Dateien aktualisiert: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix hat das Laden der folgenden Seite verhindert:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Änderungen anwenden",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "Δέσμη ενεργειών",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Επαναφορά όλων των προσωρινών αλλαγών",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Ανανέωση",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,8 +73,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -139,6 +139,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname" : {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry" : {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -284,8 +288,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
|
||||
"logAll":{
|
||||
"message":"All",
|
||||
"description":"Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene":{
|
||||
"message":"Tabless",
|
||||
"description":"Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab":{
|
||||
"message":"Current tab",
|
||||
"description":"Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip":{
|
||||
"message":"Reload the tab content",
|
||||
"description":"Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder" : {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted" : {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError" : {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared" : {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated" : {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip":{
|
||||
"message":"Toggle logger filtering",
|
||||
"description":"Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt":{
|
||||
"message":"filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip":{
|
||||
"message":"Toggle the popup panel",
|
||||
"description":"Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip":{
|
||||
"message":"uBlock Origin wiki: The logger",
|
||||
"description":"Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip":{
|
||||
"message":"Clear logger",
|
||||
"description":"Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip":{
|
||||
"message":"Pause logger (discard all incoming data)",
|
||||
"description":"Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip":{
|
||||
"message":"Unpause logger",
|
||||
"description":"Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip":{
|
||||
"message":"Logger filtering options",
|
||||
"description":"Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot":{
|
||||
"message":"Not",
|
||||
"description":"A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked":{
|
||||
"message":"blocked",
|
||||
"description":"A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo":{
|
||||
"message":"info",
|
||||
"description":"A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p":{
|
||||
"message":"1st-party",
|
||||
"description":"A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p":{
|
||||
"message":"3rd-party",
|
||||
"description":"A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader":{
|
||||
"message":"Details",
|
||||
"description":"Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext":{
|
||||
"message":"Context",
|
||||
"description":"Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness":{
|
||||
"message":"Partyness",
|
||||
"description":"Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType":{
|
||||
"message":"Type",
|
||||
"description":"Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL":{
|
||||
"message":"URL",
|
||||
"description":"Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader":{
|
||||
"message":"Rule",
|
||||
"description":"Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt":{
|
||||
"message":"Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description":"Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge":{
|
||||
"message":"Preserve entries from the last {{input}} minutes",
|
||||
"description":"A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads":{
|
||||
"message":"Preserve at most {{input}} page loads per tab",
|
||||
"description":"A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries":{
|
||||
"message":"Preserve at most {{input}} entries per tab",
|
||||
"description":"A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount":{
|
||||
"message":"Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description":"A logger setting"
|
||||
},
|
||||
"loggerExportFormatList":{
|
||||
"message":"List",
|
||||
"description":"Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable":{
|
||||
"message":"Table",
|
||||
"description":"Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain":{
|
||||
"message":"Plain",
|
||||
"description":"Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown":{
|
||||
"message":"Markdown",
|
||||
"description":"Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle" : {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -622,31 +772,6 @@
|
|||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
|
||||
"loggerFilterInputPlaceholder" : {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip" : {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted" : {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError" : {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared" : {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated" : {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -752,5 +877,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard":{
|
||||
"message":"Copy to clipboard",
|
||||
"description":"Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "skripto",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Aktualigi",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "kuketo forigita: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Agordoj",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "kuketo forigita: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Falsificar etiquetas <code><noscript></code>",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Revelar nombres canónicos",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revertir todos los cambios temporales",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Actualizar",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "Todo",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Sin pestaña",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Pestaña actual",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Recargar contenido de la pestaña",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "expresiones de filtros",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie eliminada: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "error al eliminar cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "caché del navegador vaciado",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "recurso actualizado: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Alternar el filtrado del registro de peticiones",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filtrar contenido",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Alternar el panel emergente",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: Registro de peticiones",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Borrar el registro de peticiones",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pausar registro de peticiones (descarta todos los datos entrantes)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Continuar con el registro de peticiones",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Opciones de filtrado del registro de peticiones",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "No",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "bloqueado",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "petición del dominio",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "petición de tercero",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Detalles",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Contexto",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Tipo de petición",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Tipo",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Regla",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Las entradas del registro de peticiones que no cumplan las tres condiciones a continuación se descartarán automáticamente:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Conservar entradas de los últimos {{input}} minutos",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Conservar como máximo {{input}} cargas de página por pestaña",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Conservar como máximo {{input}} entradas por pestaña",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Usar {{input}} líneas por entrada en modo expandido verticalmente",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "Lista",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Tabla",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Sin formato",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Configuración",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Ocultar marcadores de posición de los elementos bloqueados",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Ocultar marcadores de posición de los elementos en la lista negra",
|
||||
|
@ -380,7 +532,7 @@
|
|||
"description": "Second part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCacheHelp": {
|
||||
"message": "<p>Algunos sitios web están tan enfocados en rastrearle, que usarán ciertos trucos bastantes sucios para burlar cualquier medida que se tome para evitar ser rastreado.</p><p>Unos cuantos de estos trucos se basan<sup style='font-size:smaller'>[1, 2]</sup> en la <a href='https://es.wikipedia.org/wiki/Cach%C3%A9_web'>caché del navegador</a>, cuyo contenido como norma es perdurable, ya que raramente los usuarios se toman el trabajo de limpiarlo de forma regular.</p><p>Limpiar la caché de manera regular es bastante fácil (probablemente ni siquiera lo perciba cuando ocurra), con el beneficio de impedir a estos molestos rastreadores invadir su privacidad.</p><p>Active esta opción para que <i>uMatrix</i> lo haga por usted, en el intervalo deseado.</p><p style='font-size:smaller'>[1] <a href='https://grepular.com/Preventing_Web_Tracking_via_the_Browser_Cache'>“Preventing Web Tracking via the Browser Cache”</a><br>[2] <a href='http://lucb1e.com/rp/cookielesscookies/'>“Cookieless cookies”</a></p>",
|
||||
"message": "<p>Algunos sitios web están tan enfocados en rastrearle, que usarán ciertos trucos bastantes sucios para burlar cualquier medida que se tome para evitar ser rastreado.</p><p>Unos cuantos de estos trucos se basan<sup style='font-size:smaller'>[1, 2]</sup> en la <a href='https://es.wikipedia.org/wiki/Cach%C3%A9_web'>caché del navegador</a>, cuyo contenido como norma es perdurable, ya que raramente los usuarios se toman el trabajo de limpiarlo de forma regular.</p><p>Limpiar la caché de manera regular es bastante fácil (probablemente ni siquiera lo perciba cuando ocurra), con el beneficio de impedir a estos molestos rastreadores invadir tu privacidad.</p><p>Active esta opción para que <i>uMatrix</i> lo haga por usted, en el intervalo deseado.</p><p style='font-size:smaller'>[1] <a href='https://grepular.com/Preventing_Web_Tracking_via_the_Browser_Cache'>“Preventing Web Tracking via the Browser Cache”</a><br>[2] <a href='http://lucb1e.com/rp/cookielesscookies/'>“Cookieless cookies”</a></p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererPrompt": {
|
||||
|
@ -528,7 +680,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "¡Atención! Cambie estas configuraciones bajo su propio riesgo.",
|
||||
"message": "¡Atención! Cambie estas configuraciones bajo tu propio riesgo.",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
|
@ -572,7 +724,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"aboutUserDataHeader": {
|
||||
"message": "Sus datos",
|
||||
"message": "Tus datos",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupButton": {
|
||||
|
@ -604,33 +756,9 @@
|
|||
"description": "English: Reset to default settings"
|
||||
},
|
||||
"aboutResetConfirm": {
|
||||
"message": "¡Atención! Esto borrará todas sus configuraciones personalizadas. ¿Seguro desea continuar?",
|
||||
"message": "¡Atención! Esto borrará todas tus configuraciones personalizadas. ¿Seguro desea continuar?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "expresiones de filtros",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Número máximo de registros",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie eliminada: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "fallo intentando eliminar cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "caché del navegador vaciado",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "recurso actualizado: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix impidió la carga de la página:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Aplicar cambios",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copiar al portapapeles",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "skript",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Narrita <code><noscript></code> märksõnu",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Taasta kõik ajutised muudatused",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Värskenda",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix'i – seaded",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Rakenda muudatused",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "اسکریپت",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "بازگرداندن همهی تغییرات موقتی",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "تازهسازی",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "کوکی پاکشده: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "کش مروگر پاک شد",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "هشدار! این عمل تمام تنظیمات سفارشی شما را از بین میبرد. آیا از انجام آن مطمئن هستید؟",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "بیشترین تعداد ورودیها",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "کوکی پاکشده: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "کش مروگر پاک شد",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "More",
|
||||
"message": "Lisää",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
|
@ -71,8 +71,8 @@
|
|||
"message": "komentosarja",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Kumoa kaikki väliaikaiset muutokset",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -156,7 +160,7 @@
|
|||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"message": "Tallenna säännöt",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Päivitä",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -312,7 +464,7 @@
|
|||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "Domain",
|
||||
"message": "Verkkotunnus",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -408,11 +560,11 @@
|
|||
"description": ""
|
||||
},
|
||||
"userRulesPermanentHeader": {
|
||||
"message": "Permanent rules",
|
||||
"message": "Pysyvät säännöt",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesTemporaryHeader": {
|
||||
"message": "Temporary rules",
|
||||
"message": "Väliaikaiset säännöt",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesRevert": {
|
||||
|
@ -516,7 +668,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"assetsImportLabel": {
|
||||
"message": "Import...",
|
||||
"message": "Tuo...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
|
@ -532,7 +684,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "<a href='https://github.com/gorhill/uMatrix/releases'>Change log</a>",
|
||||
"message": "<a href='https://github.com/gorhill/uMatrix/releases'>Muutosloki</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutStorageUsed": {
|
||||
|
@ -544,7 +696,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"aboutPermissions": {
|
||||
"message": "<a href='https://github.com/gorhill/uMatrix/wiki/Permissions'>Permissions</a>",
|
||||
"message": "<a href='https://github.com/gorhill/uMatrix/wiki/Permissions'>Käyttöoikeudet</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode": {
|
||||
|
@ -596,7 +748,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"aboutOr": {
|
||||
"message": "... or ...",
|
||||
"message": "... tai ...",
|
||||
"description": "English: ... or ..."
|
||||
},
|
||||
"aboutResetButton": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -648,11 +776,11 @@
|
|||
"description": "English: Go back"
|
||||
},
|
||||
"mainBlockedClose": {
|
||||
"message": "Close",
|
||||
"message": "Sulje",
|
||||
"description": "English: Close"
|
||||
},
|
||||
"commandRevertAll": {
|
||||
"message": "Revert all temporary changes",
|
||||
"message": "Kumoa kaikki väliaikaiset muutokset",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistPageDomain": {
|
||||
|
@ -668,27 +796,27 @@
|
|||
"description": ""
|
||||
},
|
||||
"elapsedOneMinuteAgo": {
|
||||
"message": "a minute ago",
|
||||
"message": "minuutti sitten",
|
||||
"description": "English: a minute ago"
|
||||
},
|
||||
"elapsedManyMinutesAgo": {
|
||||
"message": "{{value}} minutes ago",
|
||||
"message": "{{value}} minuuttia sitten",
|
||||
"description": "English: {{value}} minutes ago"
|
||||
},
|
||||
"elapsedOneHourAgo": {
|
||||
"message": "an hour ago",
|
||||
"message": "tunti sitten",
|
||||
"description": "English: an hour ago"
|
||||
},
|
||||
"elapsedManyHoursAgo": {
|
||||
"message": "{{value}} hours ago",
|
||||
"message": "{{value}} tuntia sitten",
|
||||
"description": "English: {{value}} hours ago"
|
||||
},
|
||||
"elapsedOneDayAgo": {
|
||||
"message": "a day ago",
|
||||
"message": "päivä sitten",
|
||||
"description": "English: a day ago"
|
||||
},
|
||||
"elapsedManyDaysAgo": {
|
||||
"message": "{{value}} days ago",
|
||||
"message": "{{value}} päivää sitten",
|
||||
"description": "English: {{value}} days ago"
|
||||
},
|
||||
"showDashboardButton": {
|
||||
|
@ -728,7 +856,11 @@
|
|||
"description": ""
|
||||
},
|
||||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"message": "Vahvista muutokset",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Ibalik ang lahat ng mga pansamantalang pagbabago",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "(mga) expression ng filter",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "tinanggal ang cookie: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "bigo na tanggalin ang cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "naka-clear ang cache ng browser",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "na-update ang asset: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "I-collapse ang mga placeholder ng mga naka-block na elemento",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "I-collapse ang mga placeholder ng mga naka-blacklist na elemento",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Mag-ingat! aalisin nito ang lahat ng iyong mga pasadyang setting. Sigurado ka bang gusto mong magpatuloy?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "(mga) expression ng filter",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Pinakamataas na bilang ng mga entry",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "tinanggal ang cookie: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "bigo na tanggalin ang cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "naka-clear ang cache ng browser",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "na-update ang asset: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "Pinigilan ng uMatrix ang sumusunod na pahina mula sa paglo-load:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "Script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "Chercher",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Modifier les balises <code><noscript></code>",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Révéler les noms canoniques",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Annuler tous les changements temporaires",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Actualiser",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "Tout",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "En coulisses",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Onglet courant",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Recharger le contenu de l'onglet",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "Expression(s) de filtre",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "Cookie supprimé : {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "Échec lors de la suppression du cookie : {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "Cache du navigateur nettoyé",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "Élément mis à jour : {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Commuter le filtrage du journal",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "Filtrer le contenu du journal",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Commuter le panneau pop-up",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "Wiki uBlock Origin : Le journal",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Vider le journal",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Mettre en pause le journal (ignorer les données entrantes)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Reprendre la journalisation",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Options de filtrage du journal",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Non",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "Bloquée",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "Information",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "Première partie",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "Tierce-partie",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Détails",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Contexte",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Niveau de partie",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "Lien",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Règle",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Les entrées de journal ne remplissant aucune de ces trois conditions seront automatiquement rejetées :",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Conserver les entrées des {{input}} dernières minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Conserver au maximum {{input}} chargements de page par onglet",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Conserver au maximum {{input}} entrées par onglet",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Utiliser {{input}} lignes par entrée dans le mode verticalement étendu",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "Liste",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Tableau",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Simple",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Réglages",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Cacher les espaces réservés aux éléments bloqués",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Cacher les espaces réservés aux éléments de la liste noire",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Attention ! Cela supprimera tous vos paramétrages personnels. Désirez-vous vraiment réinitialiser ?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "Expression(s) de filtre",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Nombre maximum d'entrées",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "Cookie supprimé : {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "Échec lors de la suppression du cookie : {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "Cache du navigateur nettoyé",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "Élément mis à jour : {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix a empêché le chargement de cette page :",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Appliquer",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copier dans le presse-papier",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "סקריפט",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "זיוף תגיות <code><noscript></code>",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "מחק את כל השינויים הזמניים",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "רענן",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "ביטוי(י) פילטור",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "עוגייה נמחקה: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "נכשל במחיקת העוגייה: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "זיכרון מטמון נמחק",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "הנכס עודכן: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – הגדרות",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "הסתר את המקום שנשאר מחסימה של אלמנטים",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "הסתר את המקום שנשאר מחסימה של אלמנטים",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "אזהרה! פעולה זו תוביל למחיקה של כל ההגדרות המותאמות אישית שלך. האם אתה בטוח שאתה רוצה להמשיך?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "ביטוי(י) פילטור",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "מספר רשומות מקסימליות",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "עוגייה נמחקה: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "נכשל במחיקת העוגייה: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "זיכרון מטמון נמחק",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "הנכס עודכן: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix מנע מהעמוד הבא מלהיטען:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "החל שינויים",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "लिपि",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "रिफ्रेश",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "µMatrix – सेटिंग्स",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "szkript",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "<code><noscript></code> tagek felülírása",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Minden ideiglenes változtatás visszavonása",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Frissítés",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "szűrő kifejezés(ek)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "süti törölve: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "süti törlése sikertelen: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "böngésző gyorsítótára kiürítve",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "host adatok frissítve: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Beállítások",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Blokkolt elemek helyőrzőinek elrejtése",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Tiltott elemek helyőrzőinek elrejtése",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Vigyázat! A kiegészítő minden egyéni beállítása eltávolításra fog kerülni. Biztosan ezt tegyem?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "szűrő kifejezés(ek)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximális bejegyzések száma",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "süti törölve: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "süti törlése sikertelen: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "böngésző gyorsítótára kiürítve",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "host adatok frissítve: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "A uMatrix megakadályozta a következő oldal betöltését:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Módosítások alkalmazása",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "skrip",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Palsukan tag <code><noscript></code>",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Kembalikan semua ubahan sementara",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Segarkan",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "ekspresi penyaring",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "kuki dihapus: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "gagal menghapus kuki: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "tembolok peramban dibersihkan",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "aset diperbarui: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Pengaturan",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Sembunyikan wadah elemen yang diblokir",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Sembunyikan wadah elemen terdaftar hitam",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Peringatan! ini akan membuang semua pengaturan tersesuai anda. Apakah anda yakin ingin melanjutkan?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "ekspresi penyaring",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Jumlah maksimum entri",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "kuki dihapus: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "gagal menghapus kuki: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "tembolok peramban dibersihkan",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "aset diperbarui: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix telah mencegah laman berikut dimuat:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Terapkan perubahan",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof dei tag <code><noscript></code>",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Rivela i nomi canonici",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Ripristina tutte le modifiche temporanee",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Aggiorna",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "Tutti",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Senza scheda",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Scheda attuale",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Ricarica il contenuto della scheda",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filtra espressione/i",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie eliminato: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "impossibile eliminare il cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "cache del browser svuotata",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset aggiornato: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "contenuto filtro registro",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "Wiki di uBlock Origin: Il registro",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Svuota registro",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Metti in pausa il registro (scarta tutti i dati in ingresso)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Fai ripartire il registro",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Opzioni di filtraggio del registro",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Non",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "bloccato",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "Dominio attuale",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "Terze parti",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Dettagli",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Contesto",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Tipo",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Regola",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Le voci del registro che non soddisfano tutte e tre le condizioni sottostanti saranno automaticamente scartate:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Mantieni le voci degli ultimi {{input}} minuti",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Mantieni al massimo {{input}} voci per scheda",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Usa {{input}} righe per voce in modalità espansa verticalmente",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "Elenco",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Tabella",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Testo semplice",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Impostazioni",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Nascondi lo spazio riservato agli elementi bloccati",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Nascondi lo spazio riservato agli elementi in lista nera",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Attenzione! Questo rimuoverà tutte le impostazioni personalizzate. Sei sicuro di voler procedere?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "espressione/i filtro",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Numero massimo di voci",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie eliminato: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "impossibile eliminare il cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "cache del browser svuotata",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset aggiornato: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix ha impedito alla seguente pagina di caricarsi:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Applica modifiche",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copia negli appunti",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "Script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "<code><noscript></code> タグの偽装",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "すべての一時的な変更を元に戻す",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "再読み込み",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "フィルタする",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "削除した Cookie:{{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "Cookie の削除に失敗しました:{{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "ブラウザのキャッシュを削除しました",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "リソースを更新しました:{{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – 設定",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "ブロックした要素のプレースホルダを表示しない",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "明示的に拒否した要素のプレースホルダを表示しない",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "注意! 設定はすべて削除されます。続行してもよろしいですか?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "フィルタする",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "エントリの最大数",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "削除した Cookie:{{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "Cookie の削除に失敗しました:{{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "ブラウザのキャッシュを削除しました",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "リソースを更新しました:{{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix はこのページの読み込みをブロックしています:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "変更を適用",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "<code><noscript></code> 태그 위조",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "모든 임시 변경 사항 초기화",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "새로고침",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "필터링",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "쿠키 삭제: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "삭제 못 한 쿠키: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "브라우저 케시 삭제 완료",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "자원 업데이트 완료:{{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "µMatrix – 설정",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "차단 된 요청과 관련된 페이지 콘텐츠를 숨깁니다.",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "블랙리스트와 관련된 페이지 콘텐츠 숨김",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "주의! 모든 개인설정이 제거됩니다. 정말로 계속하시겠습니까?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "필터링",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "최대 항목 수",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "쿠키 삭제: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "삭제 못 한 쿠키: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "브라우저 케시 삭제 완료",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "자원 업데이트 완료:{{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix가 다음 페이지를 불러오지 못하게했습니다.",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "변경사항 적용",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "skripts",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Atjaunot",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "µMatrix – Iestatījumi",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Uzmanību! tiks atcelti visi jūsu izveidotie iestatījumi. Vai vēlaties turpināt?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "സ്ക്രിപ്റ്റ്",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "എക്സ്എച്ച്ആര്",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "എല്ലാ താത്കാലിക മാറ്റങ്ങളും ഉപേക്ഷിക്കുക",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "skript",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Etterlign <code><noscript></code>-merkene",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Tilbakestill alle midlertidige endringer",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Gjenoppfrisk",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter-uttrykk",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "kake slettet: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "kunne ikke slette kake: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "nettlesermellomlager tømt",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "verdigjenstand oppdatert: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – innstillinger",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Fold sammen plassholderen tilhørende blokkerte elementer",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Klapp sammen stumtjeneren for svartelistede elementer",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Advarsel! Dette vil fjerne alle dine egenkomponerte innstillinger. Bekreft at du vil fortsette.",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter-uttrykk",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maksimalt antall oppføringer",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "kake slettet: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "kunne ikke slette kake: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "nettlesermellomlager tømt",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "verdigjenstand oppdatert: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix har forhindret innlasting av følgende side:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Bruk endringer",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "ophalen",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "<code><noscript></code>-tags vervalsen",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Canonieke namen onthullen",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Alle tijdelijke wijzigingen ongedaan maken",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Vernieuwen",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "Alles",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Achter de schermen",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Huidige tabblad",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "De tabbladinhoud vernieuwen",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filterexpressie(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie verwijderd: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "cookie verwijderen mislukt: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browsercache gewist",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "hosts-bestand bijgewerkt: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Loggerfiltering in-/uitschakelen",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "loggerinhoud filteren",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Het pop-uppaneel in-/uitschakelen",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin-wiki: de logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Logger wissen",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Logger pauzeren (alle inkomende gegevens negeren)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Logger hervatten",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Opties voor loggerfiltering",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Niet",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "geblokkeerd",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "huidige domein",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "van derden",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "1e/3e partij",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Regel",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Loggervermeldingen die niet aan alle drie de onderstaande voorwaarden voldoen, worden automatisch genegeerd:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Vermeldingen van de laatste {{input}} minuten behouden",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Maximaal {{input}} paginaladingen per tabblad behouden",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Maximaal {{input}} vermeldingen per tabblad behouden",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "{{input}} regels per vermelding in verticaal uitgevouwen modus gebruiken",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "Lijst",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Tabel",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plat",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Instellingen",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Tijdelijke aanduiding van geblokkeerde elementen samenvouwen",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Tijdelijke aanduiding van geblokkeerde elementen verbergen",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Tijdelijke aanduiding van geblackliste elementen samenvouwen",
|
||||
"message": "Tijdelijke aanduiding van geblackliste elementen verbergen",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Waarschuwing! Hierdoor worden alle aangepaste instellingen verwijderd. Weet u zeker dat u wilt doorgaan?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filterexpressie(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximale aantal vermeldingen",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie verwijderd: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "cookie verwijderen mislukt: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browsercache gewist",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "hosts-bestand bijgewerkt: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix heeft voorkomen dat de volgende pagina werd geladen:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Wijzigingen toepassen",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Kopiëren naar klembord",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "skrypt",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Podrabianie tagów <code><noscript></code>",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Ujawnij nazwy kanoniczne",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Cofnij wszystkie tymczasowe zmiany",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Odśwież",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "Wszystkie",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Bez kart",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Aktywna karta",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Przeładuj zawartość karty",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filtruj wpisy dziennika",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "ciastko usunięte: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "Nie udało się usunąć ciasteczka: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "pamięć podręczna przeglądarki wyczyszczona",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "zaktualizowano: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Przełącz filtrowanie rejestru",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filtruj zawartość rejestru",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Przełącz panel popup",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: Rejestrator",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Wyczyść rejestr",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pauzuj rejestrowanie (porzuć wszystkie przychodzące dane)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Wznów rejestrowanie",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Opcje filtrowania rejestru",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Nie",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "zablokowane",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "własna domena",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "domeny trzecie",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Szczegóły",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Kontekst",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Lokalność",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Typ",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "Adres URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Reguła",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Wpisy rejestru nie spełniające wszystkich trzech warunków będą automatycznie porzucane:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Zachowuj wpisy z ostatnich {{input}} minut",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Zachowuj nie więcej niż {{input}} przeładowań strony na kartę",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Zachowuj nie więcej niż {{input}} wpisów na kartę",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Użyj {{input}} linie na wpis w widoku poszerzonym",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "Lista",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Tabela",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Bez formatowania",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Ustawienia",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Ukryj symbole zastępcze zablokowanych elementów",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Ukryj pozostałości po zablokowanych elementach",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Ukryj symbole zastępcze czarno-listowanych elementów",
|
||||
"message": "Ukryj pozostałości po elementach na czarnej liście",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Uwaga! Twoje ustawienia zostaną usunięte. Czy na pewno chcesz kontynuować?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filtruj wpisy dziennika",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maksymalna ilość wpisów",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "ciastko usunięte: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "Nie udało się usunąć ciasteczka: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "pamięć podręczna przeglądarki wyczyszczona",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "zaktualizowano: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix nie pozwolił załadować się następującej stronie:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Zastosuj zmiany",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Kopiuj do schowka",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Disfarçar <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Revelar nomes canônicos",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Reverter todas as mudanças temporárias",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Atualizar",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "Tudo",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Sem aba",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Aba atual",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Recarregar o conteúdo da aba",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filtrar expressão(ões)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie apagado: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "falha ao apagar cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "cache do navegador limpo",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "recurso atualizado: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Alternar filtragem no registro",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filtrar conteúdo do registro",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Alternar o painel do pop-up",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: Registros",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Limpar registro",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pausar registro (descartar todos dados de entrada)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Despausar registro",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Opções de filtragem do registro",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Não",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "bloqueado",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1º nível",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3º nível",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Detalhes",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Contexto",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Sem nível",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Tipo",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Regra",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Entradas no registro que não preenchem todas três condições abaixo irão ser automaticamente descartadas:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preservar entradas dos últimos {{input}} minutos",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preservar, no máximo, {{input}} páginas carregadas por aba",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preservar, no máximo, {{input}} entradas por aba",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Usar {{input}} linhas por entrada no modo expandido verticalmente",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "Lista",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Tabela",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plano",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Configurações",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Agrupar espaços reservados a elementos bloqueados",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Ocultar espaços de elementos bloqueados",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Agrupar espaços reservados a elementos da lista negra",
|
||||
"message": "Ocultar espaços de elementos da lista negra",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -476,7 +628,7 @@
|
|||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Autoatualizar recursos",
|
||||
"message": "Auto-atualizar recursos",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Aviso! Isso irá remover todas as suas configurações personalizadas. Você está certo de que deseja continuar?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filtrar expressão(ões)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Número máximo de entradas",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie apagado: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "falha ao apagar cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "cache do navegador limpo",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "recurso atualizado: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix impediu que a seguinte página fosse carregada:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Aplicar mudanças",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copiar para área de transferência",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Reverter todas as modificações temporárias",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Atualizar",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filtrar expressão(ões)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie apagado: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "falha ao eliminar cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "cache do browser apagada",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "recurso actualizado: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Definições",
|
||||
"description": ""
|
||||
|
@ -321,10 +473,10 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Colapsar espaço reservado dos elementos bloqueados ",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Aviso! isto irá remover todas as sua definições. Tem a certeza que pretende proceder?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filtrar expressão(ões)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Número máximo de entradas",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie apagado: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "falha ao eliminar cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "cache do browser apagada",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "recurso actualizado: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix impediu a seguinte página de ser carregada:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Aplicar alterações",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Elimină toate modificările temporare",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Reîncarcă",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie șters: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie șters: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Подмена <code><noscript></code> тегов",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Показать каноничные имена",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Отменить все временные изменения",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Обновить",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "Все",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Без вкладки",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Текущая вкладка",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Перезагрузить содержимое вкладки",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "фильтровать выражение(я)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie удалено: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "не удалось удалить куки: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "кэш браузера очищен",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "актив обновлен: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Вкл/Выкл фильтрацию логгера",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "фильтровать содержимое логгера",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Вкл/Выкл всплывающую панель",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: Логгер",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Очистить логгер",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Поставить логгер на паузу (отбрасывать все входящие данные)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Снять логгер с паузы",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Настройки фильтрации логгера",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Детали",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Контекст",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Источник",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Тип",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Правило",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Записи логгера, которые не удовлетворяют всем трем нижестоящим условиям будут автоматически отброшены:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Сохранять записи за последние {{input}} минут",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Сохранять не больше {{input}} загрузок страницы для каждой вкладки",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Сохранять не больше {{input}} записей для каждой вкладки",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Использовать {{input}} строк для каждой записи при режиме вертикального расширения",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "Список",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Таблица",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Без форматирования",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Настройки",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Скрывать заполнитель заблокированных элементов",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Скрывать оставшееся от заблокированных элементов место",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Скрывать заполнитель элементов из чёрного списка",
|
||||
"message": "Скрывать оставшееся место от элементов из черного списка",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Внимание! Это сбросит все ваши ручные настройки. Вы уверены, что хотите продолжить?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "фильтровать выражение(я)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Максимальное число записей",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie удалено: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "не удалось удалить куки: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "кэш браузера очищен",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "актив обновлен: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix предотвратил загрузку следующей страницы:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Применить изменения",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Скопировать в буфер обмена",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "skript",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "скрипта",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Лажирање <code><noscript></code> тагова",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Врати све привремене измене",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Освежи",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "филтрирање израза",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "колачића избрисано: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "неуспелих брисања колачића: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "кеш прегледача очишћен",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "ажурираних средстава: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Подешавања",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Скупи држач блокираних елемената",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Скупи држач елемената на црној листи",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Пажња! Ово ће уклонити ваша прилагођена подешавања. Да ли сте сигурни да желите да наставите?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "филтрирање израза",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Највећи број уноса",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "колачића избрисано: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "неуспелих брисања колачића: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "кеш прегледача очишћен",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "ажурираних средстава: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix је спречио учитавање следеће странице:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Примени промене",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "skript",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Förvanska <code><noscript></code>-taggar",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Återställ alla tillfälliga ändringar",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Uppdatera",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filteruttryck",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "borttagna kakor: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "misslyckades med att ta bort kaka: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "webbläsarens cache rensades",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "komponent uppdaterad: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Inställningar",
|
||||
"description": ""
|
||||
|
@ -321,7 +473,7 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Kollapsa blockerade objekt",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Dölj platshållare för svartlistade element",
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Obs! Detta kommer att ta bort alla dina egna inställningar. Är du säkert på att du vill fortsätta?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filteruttryck",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Högst antal inlägg",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "borttagna kakor: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "misslyckades med att ta bort kaka: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "webbläsarens cache rensades",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "komponent uppdaterad: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix har förhindrat denna sida från att laddas:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Tillämpa ändringar",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "స్క్రిప్ట్",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -321,10 +473,10 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "నిరోధించబడిన అంశాలయోక్క సంగ్రాహకాలను దాచుము",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Refresh",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Settings",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "filter expression(s)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maximum number of entries",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "cookie deleted: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "failed to delete cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "browser cache cleared",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "asset updated: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix has prevented the following page from loading:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "betik",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "getir",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "<code><noscript></code> etiketlerini aldat",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Kanonik isimleri ortaya çıkar",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Geçici değişikliklerin tümünü geri al",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Yenile",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "Tümü",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Sekmesiz",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Mevcut sekme",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Sekme içeriğini yeniden yükle",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "süzgeç ifadeleri",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "çerez silindi: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "çerez silme başarısız: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "tarayıcı önbelleği temizlendi",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "liste güncellendi: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Kaydedici filtrelemesini aç/kapat",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "kaydedici içeriğini filtrele",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Açılır pencere panelini aç/kapat",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin viki: Kaydedici",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Kaydediciyi temizle",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Kaydediciyi duraklat (gelen tüm verileri sil)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Kaydediciyi devam ettir",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Kaydedici filtreleme seçenekleri",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Değil",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "engellendi",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "bilgi",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1. taraf",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3. taraf",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Ayrıntılar",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "İçerik",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Taraf",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Tür",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Kural",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Aşağıdaki üç koşulu da karşılamayan kaydedici girdileri otomatik olarak atılacaktır:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Son {{input}} dakikadaki girdileri muhafaza et",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Sekme başına en fazla {{input}} sayfa yüklenmesini muhafaza et",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Sekme başına en fazla {{input}} girdiyi muhafaza et",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Dikey olarak genişletildiğinde girdi başına {{input}} satır kullan",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "Liste",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Tablo",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Düz",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Ayarları",
|
||||
"description": ""
|
||||
|
@ -321,10 +473,10 @@
|
|||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Engellenmiş elementlerin yertutucularını daralt",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Kara listelenmiş ögelerin yertutucularını daralt",
|
||||
"message": "Kara listeye alınan elemanların yer tutucusunu gizle",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Uyarı! Bu işlem tüm kişisel ayarlarınızı kaldıracaktır. Devam etmek istediğinizden emin misiniz?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "süzgeç ifadeleri",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Maksimum giriş sayısı",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "çerez silindi: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "çerez silme başarısız: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "tarayıcı önbelleği temizlendi",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "liste güncellendi: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix aşağıdaki sayfaların yüklenmesini engelledi:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Değişiklikleri uygula",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Panoya kopyala",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "скрипт",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Відмінити усі тимчасові зміни",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Оновити",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "фільтр(и)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "кукі видалено: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "не вдалося видалити кукі: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "кеш браузера очищено",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "компонент оновлено: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – Налаштування",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Увага! Ваші ручні налаштування буде видалено. Продовжити?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "фільтр(и)",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Максимальна кількість записів",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "кукі видалено: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "не вдалося видалити кукі: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "кеш браузера очищено",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "компонент оновлено: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix заблокував завантаження сторінки:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "Spoof <code><noscript></code> tags",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "Reveal canonical names",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "Hủy các thay đổi tạm thời",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "Tải lại",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "All",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "Tabless",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "Current tab",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "Reload the tab content",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "diễn tả bộ lọc",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "đã xoá cookie: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "không thể xoá cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "đã xoá bộ đệm trình duyệt",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "đã cập nhật tài nguyên: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "Toggle logger filtering",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "filter logger content",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "Toggle the popup panel",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki: The logger",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "Clear logger",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "Pause logger (discard all incoming data)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "Unpause logger",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "Logger filtering options",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "Not",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "blocked",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "info",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "1st-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "3rd-party",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "Details",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "Context",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "Partyness",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "Type",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "Rule",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "Logger entries which do not fulfill all three conditions below will be automatically discarded:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "Preserve entries from the last {{input}} minutes",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "Preserve at most {{input}} page loads per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "Preserve at most {{input}} entries per tab",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "Use {{input}} lines per entry in vertically expanded mode",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "List",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "Table",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "Plain",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "Cài đặt µMatrix",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Collapse placeholder of blocked elements",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Collapse placeholder of blacklisted elements",
|
||||
"message": "Hide placeholder of blacklisted elements",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "Cẩn trọng! Điều này sẽ xoá tất cả cấu hình tuỳ chỉnh của bạn. Bạn chắc muốn tiến hành?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "diễn tả bộ lọc",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "Số mục tối đa",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "đã xoá cookie: {{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "không thể xoá cookie: {{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "đã xoá bộ đệm trình duyệt",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "đã cập nhật tài nguyên: {{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix đã chặn truy cập trang này:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "脚本",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "模拟 <code><noscript></code> 元素",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "显示真实域名",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "撤销所有临时变更",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "刷新",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "全部",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "后台网络请求",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "当前标签页",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "重新加载该标签页的内容",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "日志过滤表达式",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "已删除 Cookie:{{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "无法删除 Cookie:{{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "浏览器缓存清除完毕",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "辅助规则已更新:{{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "开闭记录筛选",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "筛选记录条目",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "开闭弹出面板",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki:记录器",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "清空记录",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "暂停记录(放弃所有传入数据)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "取消暂停记录",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "记录器筛选设定",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "非",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "已屏蔽",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "提示信息",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "第一方",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "第三方",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "详细资料",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "上下文",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "第一方/第三方",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "类型",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "规则",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "不符合以下任一状况的记录将会被自动清除:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "最多保留 {{input}} 分钟以内的记录",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "每个分页最多保留 {{input}} 次内容加载产生的记录",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "每个分页最多保留 {{input}} 条记录",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "垂直扩展模式下每项使用 {{input}} 行",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "列表",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "表格",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "纯文本",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – 设置",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "隐藏已拦截请求所关联的页面内容",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "隐藏已屏蔽元素的占位符",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "隐藏因域名黑名单而被屏蔽的內容",
|
||||
"message": "隐藏被加入黑名单的元素的占位符",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "注意!这将移除您的所有个人设置。您确定要继续吗?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "规则过滤表达式",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "日志条数限制",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "已删除 Cookie:{{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "无法删除 Cookie:{{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "浏览器缓存清除完毕",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "辅助规则已更新:{{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix 已阻止载入以下页面:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "应用变更",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "复制到剪贴板",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,8 +71,8 @@
|
|||
"message": "指令",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"xhrPrettyName": {
|
||||
"message": "XHR",
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
|
@ -135,6 +135,10 @@
|
|||
"message": "模擬 <code><noscript></code> 元素",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchRevealCname": {
|
||||
"message": "顯示真實域名",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixRevertAllEntry": {
|
||||
"message": "撤銷所有臨時變更",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
|
@ -279,6 +283,154 @@
|
|||
"message": "重新整理",
|
||||
"description": ""
|
||||
},
|
||||
"logAll": {
|
||||
"message": "全部",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"logBehindTheScene": {
|
||||
"message": "背景網路連線請求",
|
||||
"description": "Pretty name for behind-the-scene network requests"
|
||||
},
|
||||
"loggerCurrentTab": {
|
||||
"message": "目前分頁",
|
||||
"description": "Appears in the logger's tab selector"
|
||||
},
|
||||
"loggerReloadTip": {
|
||||
"message": "重新載入分頁內容",
|
||||
"description": "Tooltip for the reload button in the logger page"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "日誌過濾表達式",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "已刪除 Cookie:{{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "無法刪除 Cookie:{{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "瀏覽器快取清除完畢",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "已更新資料:{{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"loggerRowFiltererButtonTip": {
|
||||
"message": "開閉記錄篩選",
|
||||
"description": "Tooltip for the row filterer button in the logger page"
|
||||
},
|
||||
"logFilterPrompt": {
|
||||
"message": "篩選記錄條目",
|
||||
"description": "Placeholder string for logger output filtering input field"
|
||||
},
|
||||
"loggerPopupPanelTip": {
|
||||
"message": "開閉彈出式面板",
|
||||
"description": "Tooltip for the popup panel button in the logger page"
|
||||
},
|
||||
"loggerInfoTip": {
|
||||
"message": "uBlock Origin wiki:記錄器",
|
||||
"description": "Tooltip for the top-right info label in the logger page"
|
||||
},
|
||||
"loggerClearTip": {
|
||||
"message": "清除記錄",
|
||||
"description": "Tooltip for the eraser in the logger page; used to blank the content of the logger"
|
||||
},
|
||||
"loggerPauseTip": {
|
||||
"message": "暫停記錄(丟棄所有傳入資料)",
|
||||
"description": "Tooltip for the pause button in the logger page"
|
||||
},
|
||||
"loggerUnpauseTip": {
|
||||
"message": "取消暫停記錄",
|
||||
"description": "Tooltip for the play button in the logger page"
|
||||
},
|
||||
"loggerRowFiltererBuiltinTip": {
|
||||
"message": "記錄器篩選設定",
|
||||
"description": "Tooltip for the button to bring up logger output filtering options"
|
||||
},
|
||||
"loggerRowFiltererBuiltinNot": {
|
||||
"message": "非",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinBlocked": {
|
||||
"message": "已封鎖",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltinInfo": {
|
||||
"message": "提示信息",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin1p": {
|
||||
"message": "第一方",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerRowFiltererBuiltin3p": {
|
||||
"message": "第三方",
|
||||
"description": "A keyword in the built-in row filtering expression"
|
||||
},
|
||||
"loggerEntryDetailsHeader": {
|
||||
"message": "詳細資料",
|
||||
"description": "Small header to identify the 'Details' pane for a specific logger entry"
|
||||
},
|
||||
"loggerEntryDetailsContext": {
|
||||
"message": "上下文",
|
||||
"description": "Label to identify a context field (typically a hostname)"
|
||||
},
|
||||
"loggerEntryDetailsPartyness": {
|
||||
"message": "第一方/第三方",
|
||||
"description": "Label to identify a field providing partyness information"
|
||||
},
|
||||
"loggerEntryDetailsType": {
|
||||
"message": "類型",
|
||||
"description": "Label to identify the type of an entry"
|
||||
},
|
||||
"loggerEntryDetailsURL": {
|
||||
"message": "URL",
|
||||
"description": "Label to identify the URL of an entry"
|
||||
},
|
||||
"loggerEntryRuleHeader": {
|
||||
"message": "規則",
|
||||
"description": "Small header to identify the 'Rule' pane for a specific logger entry"
|
||||
},
|
||||
"loggerSettingDiscardPrompt": {
|
||||
"message": "不符合以下任一狀況的記錄將會被自動清除:",
|
||||
"description": "Logger setting: A sentence to describe the purpose of the settings below"
|
||||
},
|
||||
"loggerSettingPerEntryMaxAge": {
|
||||
"message": "最多保留 {{input}} 分鐘以內的記錄",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxLoads": {
|
||||
"message": "每個分頁最多保留 {{input}} 次內容加載產生的記錄",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerTabMaxEntries": {
|
||||
"message": "每個分頁最多保留 {{input}} 條記錄",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerSettingPerEntryLineCount": {
|
||||
"message": "在垂直延展模式中每條記錄顯示 {{input}} 行",
|
||||
"description": "A logger setting"
|
||||
},
|
||||
"loggerExportFormatList": {
|
||||
"message": "列表",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportFormatTable": {
|
||||
"message": "表格",
|
||||
"description": "Label for radio-button to pick export format"
|
||||
},
|
||||
"loggerExportEncodePlain": {
|
||||
"message": "純文字",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"loggerExportEncodeMarkdown": {
|
||||
"message": "Markdown",
|
||||
"description": "Label for radio-button to pick export text format"
|
||||
},
|
||||
"settingsPageTitle": {
|
||||
"message": "uMatrix – 設定",
|
||||
"description": ""
|
||||
|
@ -320,11 +472,11 @@
|
|||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "隱藏已阻擋請求所關聯的頁面內容",
|
||||
"description": "English: Collapse placeholder of blocked elements"
|
||||
"message": "隱藏已封鎖元素的佔位符",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "隱藏因域名黑名單而遭遮蔽的內容",
|
||||
"message": "隱藏被加入黑名單的元素的佔位符",
|
||||
"description": "A setting in the dashboard's Settings pane: 'blacklisted' means 'for which there is a specific block rule', 'specific' means 'a rule for which the destination hostname is not `*`'"
|
||||
},
|
||||
"settingsNoscriptTagsSpoofed": {
|
||||
|
@ -607,30 +759,6 @@
|
|||
"message": "小心!這將移除您的所有設定。確定要繼續?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"loggerFilterInputPlaceholder": {
|
||||
"message": "規則過濾表達式",
|
||||
"description": "Appears in the input filed where filter expressions are entered"
|
||||
},
|
||||
"loggerMaxEntriesTip": {
|
||||
"message": "日誌條數限制",
|
||||
"description": "Appears as a tooltip when hovering the input field"
|
||||
},
|
||||
"loggerEntryCookieDeleted": {
|
||||
"message": "已刪除 Cookie:{{value}}",
|
||||
"description": "An entry for when a cookie is deleted"
|
||||
},
|
||||
"loggerEntryDeleteCookieError": {
|
||||
"message": "無法刪除 Cookie:{{value}}",
|
||||
"description": "An entry for when the browser cache is cleared"
|
||||
},
|
||||
"loggerEntryBrowserCacheCleared": {
|
||||
"message": "瀏覽器快取清除完畢",
|
||||
"description": "An entry for when a cookie can't be deleted"
|
||||
},
|
||||
"loggerEntryAssetUpdated": {
|
||||
"message": "已更新資料:{{value}}",
|
||||
"description": "An entry for when an asset was updated"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uMatrix 已阻止載入以下頁面:",
|
||||
"description": "English: uMatrix has prevented the following page from loading:"
|
||||
|
@ -730,5 +858,9 @@
|
|||
"genericApplyChanges": {
|
||||
"message": "應用變更",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "複製到剪貼簿",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,10 @@
|
|||
<link rel="stylesheet" type="text/css" href="css/common.css">
|
||||
<link rel="stylesheet" type="text/css" href="css/dashboard-common.css">
|
||||
<style>
|
||||
div.body > ul {
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
ul {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
@ -17,6 +21,8 @@ ul {
|
|||
|
||||
<h3>uMatrix <span id="aboutVersion"></span></h3>
|
||||
<ul>
|
||||
<li>Copyright (c) Raymond Hill 2013-present<br>
|
||||
<li>
|
||||
<li><span id="aboutStorageUsed"></span><br>
|
||||
<li>
|
||||
<li><span data-i18n="aboutChangelog"></span><br>
|
||||
|
@ -55,6 +61,7 @@ ul {
|
|||
<span data-i18n="aboutResetConfirm"></span>
|
||||
</div>
|
||||
|
||||
<script src="js/vapi.js"></script>
|
||||
<script src="js/vapi-common.js"></script>
|
||||
<script src="js/vapi-client.js"></script>
|
||||
<script src="js/udom.js"></script>
|
||||
|
|
|
@ -4,18 +4,45 @@
|
|||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>uMatrix — Asset viewer</title>
|
||||
<link rel="stylesheet" href="lib/codemirror/lib/codemirror.css">
|
||||
<link rel="stylesheet" href="lib/codemirror/addon/search/matchesonscrollbar.css">
|
||||
<link rel="stylesheet" href="css/fa-icons.css">
|
||||
<link rel="stylesheet" href="css/codemirror.css">
|
||||
<style>
|
||||
body {
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#content {
|
||||
font: 12px monospace;
|
||||
white-space: pre;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
/* https://github.com/uBlockOrigin/uBlock-issues/issues/292 */
|
||||
.CodeMirror-wrap pre {
|
||||
word-break: break-all;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="content"></div>
|
||||
<div id="content" class="codeMirrorContainer"></div>
|
||||
|
||||
<script src="lib/codemirror/lib/codemirror.js"></script>
|
||||
<script src="lib/codemirror/addon/display/panel.js"></script>
|
||||
<script src="lib/codemirror/addon/scroll/annotatescrollbar.js"></script>
|
||||
<script src="lib/codemirror/addon/search/matchesonscrollbar.js"></script>
|
||||
<script src="lib/codemirror/addon/search/searchcursor.js"></script>
|
||||
<script src="lib/codemirror/addon/selection/active-line.js"></script>
|
||||
|
||||
<script src="js/codemirror/search.js"></script>
|
||||
|
||||
<script src="js/fa-icons.js"></script>
|
||||
<script src="js/vapi.js"></script>
|
||||
<script src="js/vapi-common.js"></script>
|
||||
<script src="js/vapi-client.js"></script>
|
||||
<script src="js/udom.js"></script>
|
||||
<script src="js/dashboard-common.js"></script>
|
||||
<script src="js/asset-viewer.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -5,33 +5,34 @@
|
|||
<title>uMatrix</title>
|
||||
</head>
|
||||
<body>
|
||||
<script src="js/console.js"></script>
|
||||
<script src="lib/lz4/lz4-block-codec-any.js"></script>
|
||||
<script src="lib/punycode.js"></script>
|
||||
<script src="lib/publicsuffixlist.js"></script>
|
||||
<script src="lib/publicsuffixlist/publicsuffixlist.js"></script>
|
||||
<script src="js/webext.js"></script>
|
||||
<script src="js/vapi.js"></script>
|
||||
<script src="js/vapi-common.js"></script>
|
||||
<script src="js/vapi-background.js"></script>
|
||||
|
||||
<!-- Forks can pick the chromium, firefox, or their own implementation -->
|
||||
<script src="js/vapi-webrequest.js"></script>
|
||||
|
||||
<!-- Optional -->
|
||||
<script src="js/vapi-cachestorage.js"></script>
|
||||
|
||||
<script src="js/background.js"></script>
|
||||
<script src="js/traffic.js"></script>
|
||||
<script src="js/hntrie.js"></script>
|
||||
<script src="js/utils.js"></script>
|
||||
<script src="js/uritools.js"></script>
|
||||
<script src="js/lz4.js"></script>
|
||||
<script src="js/usersettings.js"></script>
|
||||
<script src="js/liquid-dict.js"></script>
|
||||
<script src="js/matrix.js"></script>
|
||||
<script src="js/recipe-manager.js"></script>
|
||||
<script src="js/utils.js"></script>
|
||||
<script src="js/cachestorage.js"></script>
|
||||
<script src="js/assets.js"></script>
|
||||
<script src="js/filtering-context.js"></script>
|
||||
<script src="js/httpsb.js"></script>
|
||||
<script src="js/uritools.js"></script>
|
||||
<script src="js/cookies.js"></script>
|
||||
<script src="js/logger.js"></script>
|
||||
<script src="js/messaging.js"></script>
|
||||
<script src="js/storage.js"></script>
|
||||
<script src="js/pagestats.js"></script>
|
||||
<script src="js/tab.js"></script>
|
||||
<script src="js/traffic.js"></script>
|
||||
<script src="js/browsercache.js"></script>
|
||||
<script src="js/start.js"></script>
|
||||
</body>
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
.codeMirrorContainer {
|
||||
font-size: 12px;
|
||||
line-height: 1.25;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
@ -18,6 +17,73 @@
|
|||
height: 100%;
|
||||
}
|
||||
|
||||
.cm-s-default .cm-comment { color: #777; }
|
||||
.cm-directive { color: #333; font-weight: bold; }
|
||||
.cm-staticext { color: #008; }
|
||||
.cm-staticnetBlock { color: #800; }
|
||||
.cm-staticnetAllow { color: #004f00; }
|
||||
.cm-staticOpt { background-color: #ddd; font-weight: bold; }
|
||||
|
||||
.cm-search-widget {
|
||||
align-items: center;
|
||||
background-color: #eee;
|
||||
cursor: default;
|
||||
direction: ltr;
|
||||
display: flex;
|
||||
flex-shrink: 0;
|
||||
font-size: 110%;
|
||||
justify-content: center;
|
||||
padding: 4px 8px;
|
||||
/* position: absolute; */
|
||||
right: 2em;
|
||||
top: 0;
|
||||
user-select: none;
|
||||
-moz-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
z-index: 1000;
|
||||
}
|
||||
.cm-search-widget .fa-icon {
|
||||
fill: #888;
|
||||
font-size: 140%;
|
||||
}
|
||||
.cm-search-widget .fa-icon:not(.fa-icon-ro):hover {
|
||||
fill: #000;
|
||||
}
|
||||
.cm-search-widget-input {
|
||||
border: 1px solid gray;
|
||||
border-radius: 3px;
|
||||
display: inline-flex;
|
||||
min-width: 16em;
|
||||
}
|
||||
.cm-search-widget-input > input {
|
||||
border: 0;
|
||||
flex-grow: 1;
|
||||
}
|
||||
.cm-search-widget-input > .cm-search-widget-count {
|
||||
align-items: center;
|
||||
color: #888;
|
||||
display: none;
|
||||
flex-grow: 0;
|
||||
font-size: 80%;
|
||||
padding: 0 0.4em;
|
||||
pointer-events: none;
|
||||
}
|
||||
.cm-search-widget[data-query] .cm-search-widget-count {
|
||||
display: inline-flex;
|
||||
}
|
||||
.cm-search-widget .cm-search-widget-button:hover {
|
||||
color: #000;
|
||||
}
|
||||
.cm-search-widget .sourceURL {
|
||||
padding-left: 0.5em;
|
||||
padding-right: 0.5em;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
}
|
||||
.cm-search-widget .sourceURL[href=""] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.CodeMirror-merge-l-deleted {
|
||||
background-image: none;
|
||||
font-weight: bold;
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
}
|
||||
|
||||
body {
|
||||
font-size: 14px;
|
||||
font: 14px sans-serif;
|
||||
}
|
||||
body[dir="ltr"] {
|
||||
direction: ltr;
|
||||
|
@ -111,3 +111,35 @@ button.custom[disabled] {
|
|||
code {
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
.px-icon {
|
||||
align-items: center;
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
display: inline-flex;
|
||||
filter: grayscale(100%);
|
||||
justify-content: center;
|
||||
margin: 0;
|
||||
padding: 0.1em;
|
||||
position: relative;
|
||||
}
|
||||
.px-icon > * {
|
||||
pointer-events: none;
|
||||
}
|
||||
.px-icon.disabled,
|
||||
.disabled > .px-icon,
|
||||
.px-icon[disabled],
|
||||
[disabled] > .px-icon {
|
||||
color: #000;
|
||||
fill: #000;
|
||||
opacity: 0.25;
|
||||
stroke: #888;
|
||||
pointer-events: none;
|
||||
}
|
||||
.px-icon > img {
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
}
|
||||
.px-icon.active {
|
||||
filter: none;
|
||||
}
|
||||
|
|
|
@ -23,9 +23,13 @@ body {
|
|||
white-space: nowrap;
|
||||
background-color: white;
|
||||
}
|
||||
#dashboard-nav-widgets span {
|
||||
#dashboard-nav-widgets > span {
|
||||
padding: 0 0.5em;
|
||||
font-size: larger;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
#dashboard-nav-widgets > span > img {
|
||||
width: 1em;
|
||||
}
|
||||
.tabButton {
|
||||
margin: 0;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -54,9 +54,7 @@ a {
|
|||
border: 0;
|
||||
color: #bbb;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
font: 12px/1 sans-serif;
|
||||
margin: 0;
|
||||
padding: 3px 0;
|
||||
position: relative;
|
||||
|
@ -65,17 +63,11 @@ a {
|
|||
|
||||
.paneHead {
|
||||
background-color: white;
|
||||
left: 0;
|
||||
padding: 0;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
.paneContent {
|
||||
padding-top: 5.5em;
|
||||
}
|
||||
|
||||
|
||||
.paneHead > a:first-child {
|
||||
background-color: #444;
|
||||
|
@ -152,6 +144,9 @@ body .toolbar button.disabled {
|
|||
opacity: 1;
|
||||
stroke: none;
|
||||
}
|
||||
#mtxSwitches > li > svg > * {
|
||||
fill: #bbb;
|
||||
}
|
||||
#mtxSwitches > li.relevant > svg .dot {
|
||||
fill: #aaa;
|
||||
}
|
||||
|
@ -181,6 +176,13 @@ body .toolbar button.disabled {
|
|||
#mtxSwitches > li > a:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
#mtxSwitches > li.unsupported {
|
||||
cursor: default;
|
||||
}
|
||||
#mtxSwitches > li.unsupported > svg .on,
|
||||
#mtxSwitches > li.unsupported > svg .off {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.dropdown-menu-capture {
|
||||
background-color: rgba(0,0,0,0.2);
|
||||
|
@ -336,30 +338,33 @@ body[data-scope="*"] .toolbar .scopeRel.disabled {
|
|||
color: #ccc;
|
||||
}
|
||||
|
||||
body.embedded [data-extension-url],
|
||||
body.tabless .needtab {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.matrix {
|
||||
text-align: left;
|
||||
}
|
||||
.matRow {
|
||||
white-space: nowrap;
|
||||
align-items: flex-start;
|
||||
display: flex;
|
||||
}
|
||||
.matCell {
|
||||
margin: 1px 1px 0 0;
|
||||
border: 1px dotted rgba(0,0,0,0.2);
|
||||
padding: 6px 1px 3px 1px;
|
||||
display: inline-block;
|
||||
box-sizing: content-box;
|
||||
-moz-box-sizing: content-box;
|
||||
width: 2.6em;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
display: inline-flex;
|
||||
flex-shrink: 0;
|
||||
justify-content: center;
|
||||
line-height: 110%;
|
||||
margin: 1px 1px 0 0;
|
||||
padding: 6px 2px;
|
||||
position: relative;
|
||||
width: 2.6em;
|
||||
}
|
||||
|
||||
#matHead {
|
||||
border-top: 1px dotted #ccc;
|
||||
padding-bottom: 1px;
|
||||
padding-top: 1px;
|
||||
margin: 1px 0 0 0;
|
||||
}
|
||||
.paneHead .matCell:nth-child(2) {
|
||||
letter-spacing: -0.3px;
|
||||
|
@ -375,25 +380,25 @@ body[data-scope="*"] .toolbar .scopeRel.disabled {
|
|||
/* RFC 3987 Internationalized Resource Identifiers (IRIs) -- 4.4 */
|
||||
.matrix .matRow > .matCell:first-child {
|
||||
direction: ltr;
|
||||
text-align: right;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
justify-content: flex-end;
|
||||
unicode-bidi: embed;
|
||||
width: 16em;
|
||||
word-break: keep-all;
|
||||
}
|
||||
.matrix .matGroup.g4 .matRow.ro > .matCell:first-child {
|
||||
direction: inherit;
|
||||
}
|
||||
.matrix .matRow.l2 > .matCell:first-child {
|
||||
margin-left: 1px;
|
||||
width: calc(16em - 1px);
|
||||
}
|
||||
.matrix .matRow > .matCell:hover {
|
||||
border-style: solid;
|
||||
}
|
||||
.matrix .matGroup .matSection {
|
||||
margin: 2px 0 0 0;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
/* background-color: rgba(0,0,0,0.05); */
|
||||
}
|
||||
.matrix .matGroup .matSection:hover {
|
||||
}
|
||||
.matrix .matGroup.g0 .matSection:first-child {
|
||||
margin-top: 0;
|
||||
|
@ -406,7 +411,7 @@ body[data-scope="*"] .toolbar .scopeRel.disabled {
|
|||
display: none;
|
||||
}
|
||||
.matrix .matSection.collapsible.collapsed .matRow.meta {
|
||||
display: block;
|
||||
display: flex;
|
||||
}
|
||||
.matrix .matSection.collapsible.collapsed .matRow.l1:not(.meta) {
|
||||
display: none;
|
||||
|
@ -416,6 +421,9 @@ body[data-scope="*"] .toolbar .scopeRel.disabled {
|
|||
}
|
||||
|
||||
/* Collapsing of blacklisted */
|
||||
.matrix .matGroup.g4 {
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
.matrix .g4Meta {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
@ -443,7 +451,7 @@ body.powerOff .matrix .g4Meta.g4Collapsed ~ .matSection {
|
|||
display: none;
|
||||
}
|
||||
.matrix .g4Meta.g4Collapsed ~ .matRow.ro {
|
||||
display: block;
|
||||
display: flex;
|
||||
}
|
||||
body.powerOff .matrix .g4Meta.g4Collapsed ~ .matRow.ro {
|
||||
display: none;
|
||||
|
@ -463,12 +471,10 @@ body.powerOff .matrix .g4Meta.g4Collapsed ~ .matRow.ro {
|
|||
background-color: #080;
|
||||
}
|
||||
.t1 {
|
||||
border-color: #debaba;
|
||||
color: black;
|
||||
background-color: #f8d0d0;
|
||||
}
|
||||
.t2 {
|
||||
border-color: #bad6ba;
|
||||
color: black;
|
||||
background-color: #d0f0d0;
|
||||
}
|
||||
|
@ -489,17 +495,14 @@ body.colorblind .t81 {
|
|||
background-color: rgb(0, 19, 110);
|
||||
}
|
||||
body.colorblind .t82 {
|
||||
border-color: rgb(255, 194, 57);
|
||||
color: black;
|
||||
background-color: rgb(255, 194, 57);
|
||||
}
|
||||
body.colorblind .t1 {
|
||||
border-color: rgba(0, 19, 110, 0.3);
|
||||
color: black;
|
||||
background-color: rgba(0, 19, 110, 0.2);
|
||||
}
|
||||
body.colorblind .t2 {
|
||||
border-color: rgba(255, 194, 57, 0.3);
|
||||
color: black;
|
||||
background-color: rgba(255, 194, 57, 0.2);
|
||||
}
|
||||
|
@ -612,7 +615,7 @@ body.colorblind .rw .matCell.t2 #blacklist:hover {
|
|||
}
|
||||
.matSection.collapsible .matRow.l1 .matCell:nth-of-type(1):hover #domainOnly,
|
||||
#matHead.collapsible .matRow .matCell:nth-of-type(1):hover #domainOnly {
|
||||
display: inline-flex;
|
||||
display: inline-block;
|
||||
}
|
||||
#domainOnly:hover {
|
||||
opacity: 1;
|
||||
|
@ -638,12 +641,6 @@ body.noTabFound #noTabFound {
|
|||
body.hConstrained {
|
||||
overflow-x: auto;
|
||||
}
|
||||
body.hConstrained .paneHead {
|
||||
left: auto;
|
||||
position: absolute;
|
||||
right: auto;
|
||||
width: 100%;
|
||||
}
|
||||
body[data-touch="true"] .matCell {
|
||||
line-height: 200%;
|
||||
}
|
||||
|
|
|
@ -1,20 +1,16 @@
|
|||
div.body {
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
html {
|
||||
height: 100vh;
|
||||
justify-content: space-between;
|
||||
overflow: hidden;
|
||||
}
|
||||
p {
|
||||
margin: 0.5em 0;
|
||||
body {
|
||||
overflow: hidden;
|
||||
}
|
||||
textarea {
|
||||
box-sizing: border-box;
|
||||
flex-grow: 1;
|
||||
resize: none;
|
||||
#rawSettings {
|
||||
border-top: 1px solid #ddd;
|
||||
height: 75vh;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
width: 100%;
|
||||
word-wrap: normal;
|
||||
}
|
||||
.CodeMirror-wrap pre {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
|
|
@ -5,15 +5,15 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="shortcut icon" type="image/png" href="img/icon_16.png">
|
||||
<title data-i18n="dashboardPageName"></title>
|
||||
<link href='css/dashboard.css' rel='stylesheet' type='text/css'>
|
||||
<link href='css/common.css' rel='stylesheet' type='text/css'>
|
||||
<link href="css/dashboard.css" rel="stylesheet" type="text/css">
|
||||
<link href="css/common.css" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="dashboard-nav">
|
||||
<div id="dashboard-nav-widgets">
|
||||
<span>uMatrix</span>
|
||||
<a class="tabButton" id="settings" href="#settings" data-dashboard-panel-url="settings.html" data-i18n="settingsPageName"></a>
|
||||
<span data-i18n-title="extName"><img src="img/icon_64.png"></span><!--
|
||||
--><a class="tabButton" id="settings" href="#settings" data-dashboard-panel-url="settings.html" data-i18n="settingsPageName"></a>
|
||||
<a class="tabButton" id="user-rules" href="#user-rules" data-dashboard-panel-url="user-rules.html" data-i18n="userRulesPageName"></a>
|
||||
<a class="tabButton" id="hosts-files" href="#hosts-files" data-dashboard-panel-url="hosts-files.html" data-i18n="ubiquitousRulesPageName"></a>
|
||||
<a class="tabButton" id="raw-settings" href="#raw-settings" data-dashboard-panel-url="raw-settings.html" data-i18n="rawSettingsPageName"></a>
|
||||
|
@ -23,6 +23,7 @@
|
|||
|
||||
<iframe src=""></iframe>
|
||||
|
||||
<script src="js/vapi.js"></script>
|
||||
<script src="js/vapi-common.js"></script>
|
||||
<script src="js/vapi-client.js"></script>
|
||||
<script src="js/udom.js"></script>
|
||||
|
|
|
@ -66,8 +66,10 @@
|
|||
</div><!-- end of div.body -->
|
||||
|
||||
<script src="js/fa-icons.js"></script>
|
||||
<script src="js/vapi.js"></script>
|
||||
<script src="js/vapi-common.js"></script>
|
||||
<script src="js/vapi-client.js"></script>
|
||||
<script src="js/vapi-client-extra.js"></script>
|
||||
<script src="js/udom.js"></script>
|
||||
<script src="js/i18n.js"></script>
|
||||
<script src="js/dashboard-common.js"></script>
|
||||
|
|
|
@ -28,6 +28,7 @@ License - https://github.com/FortAwesome/Font-Awesome/tree/a8386aae19e200ddb0f68
|
|||
<defs>
|
||||
<symbol id="angle-up" viewBox="0 0 998 582"><path d="m 998,499 q 0,13 -10,23 l -50,50 q -10,10 -23,10 -13,0 -23,-10 L 499,179 106,572 Q 96,582 83,582 70,582 60,572 L 10,522 Q 0,512 0,499 0,486 10,476 L 476,10 q 10,-10 23,-10 13,0 23,10 l 466,466 q 10,10 10,23 z"/></symbol>
|
||||
<symbol id="arrow-left" viewBox="0 0 1472 1558"><path d="m 1472,715 0,128 q 0,53 -32.5,90.5 Q 1407,971 1355,971 l -704,0 293,294 q 38,36 38,90 0,54 -38,90 l -75,76 q -37,37 -90,37 -52,0 -91,-37 L 37,869 Q 0,832 0,779 0,727 37,688 L 688,38 q 38,-38 91,-38 52,0 90,38 l 75,74 q 38,38 38,91 0,53 -38,91 l -293,293 704,0 q 52,0 84.5,37.5 32.5,37.5 32.5,90.5 z"/></symbol>
|
||||
<symbol id="clipboard" viewBox="0 0 1792 1792"><path d="m 768,1664 896,0 0,-640 -416,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-416 -384,0 0,1152 z m 256,-1440 0,-64 q 0,-13 -9.5,-22.5 Q 1005,128 992,128 l -704,0 q -13,0 -22.5,9.5 Q 256,147 256,160 l 0,64 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 l 704,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 z m 256,672 299,0 -299,-299 0,299 z m 512,128 0,672 q 0,40 -28,68 -28,28 -68,28 l -960,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-160 -544,0 Q 56,1536 28,1508 0,1480 0,1440 L 0,96 Q 0,56 28,28 56,0 96,0 l 1088,0 q 40,0 68,28 28,28 28,68 l 0,328 q 21,13 36,28 l 408,408 q 28,28 48,76 20,48 20,88 z"/></symbol>
|
||||
<symbol id="clock" viewBox="0 0 1536 1536"><path d="m 896,416 0,448 q 0,14 -9,23 -9,9 -23,9 l -320,0 q -14,0 -23,-9 -9,-9 -9,-23 l 0,-64 q 0,-14 9,-23 9,-9 23,-9 l 224,0 0,-352 q 0,-14 9,-23 9,-9 23,-9 l 64,0 q 14,0 23,9 9,9 9,23 z m 416,352 q 0,-148 -73,-273 -73,-125 -198,-198 -125,-73 -273,-73 -148,0 -273,73 -125,73 -198,198 -73,125 -73,273 0,148 73,273 73,125 198,198 125,73 273,73 148,0 273,-73 125,-73 198,-198 73,-125 73,-273 z m 224,0 q 0,209 -103,385.5 Q 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 Z"/></symbol>
|
||||
<symbol id="cloud-download" viewBox="0 0 1920 1408"><path d="m 1280,800 q 0,-14 -9,-23 -9,-9 -23,-9 l -224,0 0,-352 q 0,-13 -9.5,-22.5 Q 1005,384 992,384 l -192,0 q -13,0 -22.5,9.5 Q 768,403 768,416 l 0,352 -224,0 q -13,0 -22.5,9.5 -9.5,9.5 -9.5,22.5 0,14 9,23 l 352,352 q 9,9 23,9 14,0 23,-9 l 351,-351 q 10,-12 10,-24 z m 640,224 q 0,159 -112.5,271.5 Q 1695,1408 1536,1408 l -1088,0 Q 263,1408 131.5,1276.5 0,1145 0,960 0,830 70,720 140,610 258,555 256,525 256,512 256,300 406,150 556,0 768,0 q 156,0 285.5,87 129.5,87 188.5,231 71,-62 166,-62 106,0 181,75 75,75 75,181 0,76 -41,138 130,31 213.5,135.5 Q 1920,890 1920,1024 Z"/></symbol>
|
||||
<symbol id="cloud-upload" viewBox="0 0 1920 1408"><path d="m 1280,736 q 0,-14 -9,-23 L 919,361 q -9,-9 -23,-9 -14,0 -23,9 L 522,712 q -10,12 -10,24 0,14 9,23 9,9 23,9 l 224,0 0,352 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 l 192,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 l 0,-352 224,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 z m 640,288 q 0,159 -112.5,271.5 Q 1695,1408 1536,1408 l -1088,0 Q 263,1408 131.5,1276.5 0,1145 0,960 0,830 70,720 140,610 258,555 256,525 256,512 256,300 406,150 556,0 768,0 q 156,0 285.5,87 129.5,87 188.5,231 71,-62 166,-62 106,0 181,75 75,75 75,181 0,76 -41,138 130,31 213.5,135.5 Q 1920,890 1920,1024 Z"/></symbol>
|
||||
|
@ -42,6 +43,8 @@ License - https://github.com/FortAwesome/Font-Awesome/tree/a8386aae19e200ddb0f68
|
|||
<symbol id="info-circle" viewBox="0 0 1536 1536"><path d="m 1024,1248 0,-160 q 0,-14 -9,-23 -9,-9 -23,-9 l -96,0 0,-512 q 0,-14 -9,-23 -9,-9 -23,-9 l -320,0 q -14,0 -23,9 -9,9 -9,23 l 0,160 q 0,14 9,23 9,9 23,9 l 96,0 0,320 -96,0 q -14,0 -23,9 -9,9 -9,23 l 0,160 q 0,14 9,23 9,9 23,9 l 448,0 q 14,0 23,-9 9,-9 9,-23 z M 896,352 896,192 q 0,-14 -9,-23 -9,-9 -23,-9 l -192,0 q -14,0 -23,9 -9,9 -9,23 l 0,160 q 0,14 9,23 9,9 23,9 l 192,0 q 14,0 23,-9 9,-9 9,-23 z m 640,416 q 0,209 -103,385.5 Q 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 Z"/></symbol>
|
||||
<symbol id="list-alt" viewBox="0 0 1792 1408"><path d="m 384,1056 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -64,0 q -13,0 -22.5,-9.5 Q 256,1133 256,1120 l 0,-64 q 0,-13 9.5,-22.5 9.5,-9.5 22.5,-9.5 l 64,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 Q 365,896 352,896 l -64,0 q -13,0 -22.5,-9.5 Q 256,877 256,864 l 0,-64 q 0,-13 9.5,-22.5 Q 275,768 288,768 l 64,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 Q 365,640 352,640 l -64,0 q -13,0 -22.5,-9.5 Q 256,621 256,608 l 0,-64 q 0,-13 9.5,-22.5 Q 275,512 288,512 l 64,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 1152,512 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -960,0 q -13,0 -22.5,-9.5 Q 512,1133 512,1120 l 0,-64 q 0,-13 9.5,-22.5 9.5,-9.5 22.5,-9.5 l 960,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -960,0 q -13,0 -22.5,-9.5 Q 512,877 512,864 l 0,-64 q 0,-13 9.5,-22.5 Q 531,768 544,768 l 960,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 0,-256 0,64 q 0,13 -9.5,22.5 -9.5,9.5 -22.5,9.5 l -960,0 q -13,0 -22.5,-9.5 Q 512,621 512,608 l 0,-64 q 0,-13 9.5,-22.5 Q 531,512 544,512 l 960,0 q 13,0 22.5,9.5 9.5,9.5 9.5,22.5 z m 128,704 0,-832 q 0,-13 -9.5,-22.5 Q 1645,384 1632,384 l -1472,0 q -13,0 -22.5,9.5 Q 128,403 128,416 l 0,832 q 0,13 9.5,22.5 9.5,9.5 22.5,9.5 l 1472,0 q 13,0 22.5,-9.5 9.5,-9.5 9.5,-22.5 z m 128,-1088 0,1088 q 0,66 -47,113 -47,47 -113,47 l -1472,0 Q 94,1408 47,1361 0,1314 0,1248 L 0,160 Q 0,94 47,47 94,0 160,0 l 1472,0 q 66,0 113,47 47,47 47,113 z"/></symbol>
|
||||
<symbol id="lock" viewBox="0 0 1152 1408"><path d="m 320,640 512,0 0,-192 q 0,-106 -75,-181 -75,-75 -181,-75 -106,0 -181,75 -75,75 -75,181 l 0,192 z m 832,96 0,576 q 0,40 -28,68 -28,28 -68,28 l -960,0 Q 56,1408 28,1380 0,1352 0,1312 L 0,736 q 0,-40 28,-68 28,-28 68,-28 l 32,0 0,-192 Q 128,264 260,132 392,0 576,0 q 184,0 316,132 132,132 132,316 l 0,192 32,0 q 40,0 68,28 28,28 28,68 z"/></symbol>
|
||||
<symbol id="pause-circle-o" viewBox="0 0 1536 1536"><path d="M 768,0 Q 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 1536,977 1433,1153.5 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 Z m 0,1312 q 148,0 273,-73 125,-73 198,-198 73,-125 73,-273 0,-148 -73,-273 -73,-125 -198,-198 -125,-73 -273,-73 -148,0 -273,73 -125,73 -198,198 -73,125 -73,273 0,148 73,273 73,125 198,198 125,73 273,73 z m 96,-224 q -14,0 -23,-9 -9,-9 -9,-23 l 0,-576 q 0,-14 9,-23 9,-9 23,-9 l 192,0 q 14,0 23,9 9,9 9,23 l 0,576 q 0,14 -9,23 -9,9 -23,9 l -192,0 z m -384,0 q -14,0 -23,-9 -9,-9 -9,-23 l 0,-576 q 0,-14 9,-23 9,-9 23,-9 l 192,0 q 14,0 23,9 9,9 9,23 l 0,576 q 0,14 -9,23 -9,9 -23,9 l -192,0 z"/></symbol>
|
||||
<symbol id="play-circle-o" viewBox="0 0 1536 1536"><path d="m 1184,768 q 0,37 -32,55 l -544,320 q -15,9 -32,9 -16,0 -32,-8 -32,-19 -32,-56 l 0,-640 q 0,-37 32,-56 33,-18 64,1 l 544,320 q 32,18 32,55 z m 128,0 q 0,-148 -73,-273 -73,-125 -198,-198 -125,-73 -273,-73 -148,0 -273,73 -125,73 -198,198 -73,125 -73,273 0,148 73,273 73,125 198,198 125,73 273,73 148,0 273,-73 125,-73 198,-198 73,-125 73,-273 z m 224,0 q 0,209 -103,385.5 Q 1330,1330 1153.5,1433 977,1536 768,1536 559,1536 382.5,1433 206,1330 103,1153.5 0,977 0,768 0,559 103,382.5 206,206 382.5,103 559,0 768,0 977,0 1153.5,103 1330,206 1433,382.5 1536,559 1536,768 Z"/></symbol>
|
||||
<symbol id="plus" viewBox="0 0 1408 1408"><path d="m 1408,608 0,192 q 0,40 -28,68 -28,28 -68,28 l -416,0 0,416 q 0,40 -28,68 -28,28 -68,28 l -192,0 q -40,0 -68,-28 -28,-28 -28,-68 l 0,-416 -416,0 Q 56,896 28,868 0,840 0,800 L 0,608 q 0,-40 28,-68 28,-28 68,-28 l 416,0 0,-416 Q 512,56 540,28 568,0 608,0 l 192,0 q 40,0 68,28 28,28 28,68 l 0,416 416,0 q 40,0 68,28 28,28 28,68 z"/></symbol>
|
||||
<symbol id="power-off" viewBox="0 0 1536 1664"><path d="m 1536,896 q 0,156 -61,298 -61,142 -164,245 -103,103 -245,164 -142,61 -298,61 -156,0 -298,-61 Q 328,1542 225,1439 122,1336 61,1194 0,1052 0,896 0,714 80.5,553 161,392 307,283 q 43,-32 95.5,-25 52.5,7 83.5,50 32,42 24.5,94.5 Q 503,455 461,487 363,561 309.5,668 256,775 256,896 q 0,104 40.5,198.5 40.5,94.5 109.5,163.5 69,69 163.5,109.5 94.5,40.5 198.5,40.5 104,0 198.5,-40.5 Q 1061,1327 1130,1258 1199,1189 1239.5,1094.5 1280,1000 1280,896 1280,775 1226.5,668 1173,561 1075,487 1033,455 1025.5,402.5 1018,350 1050,308 q 31,-43 84,-50 53,-7 95,25 146,109 226.5,270 80.5,161 80.5,343 z m -640,-768 0,640 q 0,52 -38,90 -38,38 -90,38 -52,0 -90,-38 -38,-38 -38,-90 l 0,-640 q 0,-52 38,-90 38,-38 90,-38 52,0 90,38 38,38 38,90 z"/></symbol>
|
||||
<symbol id="puzzle-piece" viewBox="0 0 1664 1572"><path d="m 1664,1098 q 0,81 -44.5,135 -44.5,54 -123.5,54 -41,0 -77.5,-17.5 -36.5,-17.5 -59,-38 -22.5,-20.5 -56.5,-38 -34,-17.5 -71,-17.5 -110,0 -110,124 0,39 16,115 16,76 15,115 l 0,5 q -22,0 -33,1 -34,3 -97.5,11.5 -63.5,8.5 -115.5,13.5 -52,5 -98,5 -61,0 -103,-26.5 -42,-26.5 -42,-83.5 0,-37 17.5,-71 17.5,-34 38,-56.5 20.5,-22.5 38,-59 17.5,-36.5 17.5,-77.5 0,-79 -54,-123.5 -54,-44.5 -135,-44.5 -84,0 -143,45.5 -59,45.5 -59,127.5 0,43 15,83 15,40 33.5,64.5 18.5,24.5 33.5,53 15,28.5 15,50.5 0,45 -46,89 -37,35 -117,35 -95,0 -245,-24 -9,-2 -27.5,-4 -18.5,-2 -27.5,-4 l -13,-2 q -1,0 -3,-1 -2,0 -2,-1 L 0,512 q 2,1 17.5,3.5 15.5,2.5 34,5 18.5,2.5 21.5,3.5 150,24 245,24 80,0 117,-35 46,-44 46,-89 0,-22 -15,-50.5 Q 451,345 432.5,320.5 414,296 399,256 384,216 384,173 384,91 443,45.5 502,0 587,0 667,0 721,44.5 775,89 775,168 q 0,41 -17.5,77.5 -17.5,36.5 -38,59 -20.5,22.5 -38,56.5 -17.5,34 -17.5,71 0,57 42,83.5 42,26.5 103,26.5 64,0 180,-15 116,-15 163,-17 l 0,2 q -1,2 -3.5,17.5 -2.5,15.5 -5,34 -2.5,18.5 -3.5,21.5 -24,150 -24,245 0,80 35,117 44,46 89,46 22,0 50.5,-15 28.5,-15 53,-33.5 24.5,-18.5 64.5,-33.5 40,-15 83,-15 82,0 127.5,59 45.5,59 45.5,143 z"/></symbol>
|
||||
|
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 26 KiB |
124
src/js/about.js
124
src/js/about.js
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uMatrix - a Chromium browser extension to black/white list requests.
|
||||
Copyright (C) 2014-2018 Raymond Hill
|
||||
Copyright (C) 2014-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -25,83 +25,82 @@
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
uDom.onLoad(function() {
|
||||
{
|
||||
// >>>>> start of local scope
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var backupUserDataToFile = function() {
|
||||
var userDataReady = function(userData) {
|
||||
const backupUserDataToFile = function() {
|
||||
vAPI.messaging.send('dashboard', {
|
||||
what: 'getAllUserData',
|
||||
}).then(userData => {
|
||||
vAPI.download({
|
||||
'url': 'data:text/plain,' + encodeURIComponent(JSON.stringify(userData, null, 2)),
|
||||
'filename': uDom('[data-i18n="aboutBackupFilename"]').text()
|
||||
url: 'data:text/plain,' + encodeURIComponent(
|
||||
JSON.stringify(userData, null, 2)
|
||||
),
|
||||
filename:
|
||||
uDom.nodeFromSelector('[data-i18n="aboutBackupFilename"]')
|
||||
.textContent
|
||||
});
|
||||
};
|
||||
|
||||
vAPI.messaging.send('about.js', { what: 'getAllUserData' }, userDataReady);
|
||||
});
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
function restoreUserDataFromFile() {
|
||||
var validateBackup = function(s) {
|
||||
var userData = null;
|
||||
const restoreUserDataFromFile = function() {
|
||||
const validateBackup = function(s) {
|
||||
let userData;
|
||||
try {
|
||||
userData = JSON.parse(s);
|
||||
}
|
||||
catch (e) {
|
||||
userData = null;
|
||||
}
|
||||
if ( userData === null ) {
|
||||
return null;
|
||||
catch (ex) {
|
||||
}
|
||||
if ( userData === undefined ) { return; }
|
||||
if (
|
||||
typeof userData !== 'object' ||
|
||||
typeof userData.app !== 'string' ||
|
||||
typeof userData.version !== 'string' ||
|
||||
typeof userData.when !== 'number' ||
|
||||
typeof userData.settings !== 'object' ||
|
||||
(typeof userData.rules !== 'string' &&
|
||||
Array.isArray(userData.rules) === false)
|
||||
typeof userData.rules !== 'string' &&
|
||||
Array.isArray(userData.rules) === false
|
||||
) {
|
||||
return null;
|
||||
return;
|
||||
}
|
||||
return userData;
|
||||
};
|
||||
|
||||
var fileReaderOnLoadHandler = function() {
|
||||
var userData = validateBackup(this.result);
|
||||
if ( !userData ) {
|
||||
const fileReaderOnLoadHandler = function() {
|
||||
const userData = validateBackup(this.result);
|
||||
if ( userData instanceof Object === false ) {
|
||||
window.alert(uDom('[data-i18n="aboutRestoreError"]').text());
|
||||
return;
|
||||
}
|
||||
var time = new Date(userData.when);
|
||||
var msg = uDom('[data-i18n="aboutRestoreConfirm"]').text()
|
||||
.replace('{{time}}', time.toLocaleString());
|
||||
var proceed = window.confirm(msg);
|
||||
const time = new Date(userData.when);
|
||||
const msg = uDom.nodeFromSelector('[data-i18n="aboutRestoreConfirm"]')
|
||||
.textContent
|
||||
.replace('{{time}}', time.toLocaleString());
|
||||
const proceed = window.confirm(msg);
|
||||
if ( proceed ) {
|
||||
vAPI.messaging.send(
|
||||
'about.js',
|
||||
{ what: 'restoreAllUserData', userData: userData }
|
||||
);
|
||||
vAPI.messaging.send('dashboard', {
|
||||
what: 'restoreAllUserData',
|
||||
userData
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var file = this.files[0];
|
||||
if ( file === undefined || file.name === '' ) {
|
||||
return;
|
||||
}
|
||||
if ( file.type.indexOf('text') !== 0 ) {
|
||||
return;
|
||||
}
|
||||
var fr = new FileReader();
|
||||
const file = this.files[0];
|
||||
if ( file === undefined || file.name === '' ) { return; }
|
||||
if ( file.type.indexOf('text') !== 0 ) { return; }
|
||||
const fr = new FileReader();
|
||||
fr.onload = fileReaderOnLoadHandler;
|
||||
fr.readAsText(file);
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var startRestoreFilePicker = function() {
|
||||
var input = document.getElementById('restoreFilePicker');
|
||||
const startRestoreFilePicker = function() {
|
||||
const input = document.getElementById('restoreFilePicker');
|
||||
// Reset to empty string, this will ensure an change event is properly
|
||||
// triggered if the user pick a file, even if it is the same as the last
|
||||
// one picked.
|
||||
|
@ -111,28 +110,30 @@ var startRestoreFilePicker = function() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var resetUserData = function() {
|
||||
var proceed = window.confirm(uDom('[data-i18n="aboutResetConfirm"]').text());
|
||||
if ( proceed ) {
|
||||
vAPI.messaging.send('about.js', { what: 'resetAllUserData' });
|
||||
}
|
||||
const resetUserData = function() {
|
||||
const msg = uDom.nodeFromSelector('[data-i18n="aboutResetConfirm"]')
|
||||
.textContent;
|
||||
const proceed = window.confirm(msg);
|
||||
if ( proceed !== true ) { return; }
|
||||
vAPI.messaging.send('dashboard', {
|
||||
what: 'resetAllUserData',
|
||||
});
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
(function() {
|
||||
var renderStats = function(details) {
|
||||
document.getElementById('aboutVersion').textContent = details.version;
|
||||
var template = uDom('[data-i18n="aboutStorageUsed"]').text();
|
||||
var storageUsed = '?';
|
||||
if ( typeof details.storageUsed === 'number' ) {
|
||||
storageUsed = details.storageUsed.toLocaleString();
|
||||
}
|
||||
document.getElementById('aboutStorageUsed').textContent =
|
||||
template.replace('{{storageUsed}}', storageUsed);
|
||||
};
|
||||
vAPI.messaging.send('about.js', { what: 'getSomeStats' }, renderStats);
|
||||
})();
|
||||
vAPI.messaging.send('dashboard', {
|
||||
what: 'getSomeStats',
|
||||
}).then(details => {
|
||||
document.getElementById('aboutVersion').textContent = details.version;
|
||||
const template = uDom('[data-i18n="aboutStorageUsed"]').text();
|
||||
let storageUsed = '?';
|
||||
if ( typeof details.storageUsed === 'number' ) {
|
||||
storageUsed = details.storageUsed.toLocaleString();
|
||||
}
|
||||
document.getElementById('aboutStorageUsed').textContent =
|
||||
template.replace('{{storageUsed}}', storageUsed);
|
||||
});
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -143,4 +144,5 @@ uDom('#resetUserDataButton').on('click', resetUserData);
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
});
|
||||
// <<<<< end of local scope
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uMatrix - a Chromium browser extension to block requests.
|
||||
Copyright (C) 2014-2017 Raymond Hill
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2014-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -16,30 +16,41 @@
|
|||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uMatrix
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
/* global CodeMirror, uBlockDashboard */
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
(function() {
|
||||
(async ( ) => {
|
||||
const params = new URL(document.location).searchParams;
|
||||
const assetKey = params.get('url');
|
||||
if ( assetKey === null ) { return; }
|
||||
|
||||
var onAssetContentReceived = function(details) {
|
||||
document.getElementById('content').textContent =
|
||||
details && (details.content || '');
|
||||
};
|
||||
|
||||
var q = window.location.search;
|
||||
var matches = q.match(/^\?url=([^&]+)/);
|
||||
if ( !matches || matches.length !== 2 ) {
|
||||
return;
|
||||
}
|
||||
|
||||
vAPI.messaging.send(
|
||||
'asset-viewer.js',
|
||||
{ what : 'getAssetContent', url: matches[1] },
|
||||
onAssetContentReceived
|
||||
const cmEditor = new CodeMirror(
|
||||
document.getElementById('content'),
|
||||
{
|
||||
autofocus: true,
|
||||
lineNumbers: true,
|
||||
lineWrapping: true,
|
||||
readOnly: true,
|
||||
styleActiveLine: true,
|
||||
}
|
||||
);
|
||||
|
||||
uBlockDashboard.patchCodeMirrorEditor(cmEditor);
|
||||
|
||||
const details = await vAPI.messaging.send('default', {
|
||||
what : 'getAssetContent',
|
||||
url: assetKey,
|
||||
});
|
||||
cmEditor.setValue(details && details.content || '');
|
||||
if ( details.sourceURL ) {
|
||||
const a = document.querySelector('.cm-search-widget .sourceURL');
|
||||
a.setAttribute('href', details.sourceURL);
|
||||
a.setAttribute('title', details.sourceURL);
|
||||
}
|
||||
})();
|
||||
|
|
1143
src/js/assets.js
1143
src/js/assets.js
File diff suppressed because it is too large
Load diff
|
@ -23,7 +23,7 @@
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
const µMatrix = (function() { // jshint ignore:line
|
||||
const µMatrix = (( ) => { // jshint ignore:line
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -54,9 +54,24 @@ const oneDay = 24 * oneHour;
|
|||
*/
|
||||
|
||||
const rawSettingsDefault = {
|
||||
assetFetchBypassBrowserCache: false,
|
||||
assetFetchTimeout: 30,
|
||||
autoUpdateAssetFetchPeriod: 120,
|
||||
cacheStorageAPI: 'unset',
|
||||
cacheStorageCompression: true,
|
||||
cnameIgnoreList: 'unset',
|
||||
cnameIgnore1stParty: true,
|
||||
cnameIgnoreExceptions: true,
|
||||
cnameIgnoreRootDocument: true,
|
||||
cnameMaxTTL: 60,
|
||||
cnameReplayFullURL: false,
|
||||
consoleLogLevel: 'unset',
|
||||
contributorMode: false,
|
||||
disableCSPReportInjection: false,
|
||||
disableWebAssembly: false,
|
||||
enforceEscapedFragment: true,
|
||||
loggerPopupType: 'popup',
|
||||
manualUpdateAssetFetchPeriod: 500,
|
||||
placeholderBackground:
|
||||
[
|
||||
'url("data:image/png;base64,',
|
||||
|
@ -111,7 +126,7 @@ const rawSettingsDefault = {
|
|||
'</body></html>'
|
||||
].join(''),
|
||||
framePlaceholderBackground: 'default',
|
||||
suspendTabsUntilReady: false
|
||||
suspendTabsUntilReady: 'unset'
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -136,7 +151,6 @@ return {
|
|||
externalHostsFiles: [],
|
||||
externalRecipeFiles: [],
|
||||
iconBadgeEnabled: true,
|
||||
maxLoggedRequests: 1000,
|
||||
noTooltips: false,
|
||||
popupCollapseAllDomains: false,
|
||||
popupCollapseBlacklistedDomains: false,
|
||||
|
@ -154,23 +168,26 @@ return {
|
|||
}
|
||||
},
|
||||
|
||||
rawSettingsDefault: rawSettingsDefault,
|
||||
rawSettings: (function() {
|
||||
let out = Object.assign({}, rawSettingsDefault),
|
||||
json = vAPI.localStorage.getItem('immediateRawSettings');
|
||||
if ( typeof json === 'string' ) {
|
||||
try {
|
||||
let o = JSON.parse(json);
|
||||
if ( o instanceof Object ) {
|
||||
for ( const k in o ) {
|
||||
if ( out.hasOwnProperty(k) ) {
|
||||
out[k] = o[k];
|
||||
}
|
||||
}
|
||||
rawSettingsDefault,
|
||||
rawSettings: (( ) => {
|
||||
const out = Object.assign({}, rawSettingsDefault);
|
||||
const json = vAPI.localStorage.getItem('immediateRawSettings');
|
||||
if ( typeof json !== 'string' ) { return out; }
|
||||
try {
|
||||
const o = JSON.parse(json);
|
||||
if ( o instanceof Object ) {
|
||||
for ( const k in o ) {
|
||||
if ( out.hasOwnProperty(k) ) { out[k] = o[k]; }
|
||||
}
|
||||
self.log.verbosity = out.consoleLogLevel;
|
||||
if ( typeof out.suspendTabsUntilReady === 'boolean' ) {
|
||||
out.suspendTabsUntilReady = out.suspendTabsUntilReady
|
||||
? 'yes'
|
||||
: 'unset';
|
||||
}
|
||||
}
|
||||
catch(ex) {
|
||||
}
|
||||
}
|
||||
catch(ex) {
|
||||
}
|
||||
return out;
|
||||
})(),
|
||||
|
@ -201,6 +218,7 @@ return {
|
|||
pMatrix: null,
|
||||
|
||||
ubiquitousBlacklist: null,
|
||||
ubiquitousBlacklistRef: null,
|
||||
|
||||
// various stats
|
||||
cookieRemovedCounter: 0,
|
||||
|
@ -208,7 +226,6 @@ return {
|
|||
cookieHeaderFoiledCounter: 0,
|
||||
hyperlinkAuditingFoiledCounter: 0,
|
||||
browserCacheClearedCounter: 0,
|
||||
storageUsed: 0,
|
||||
|
||||
// record what the browser is doing behind the scene
|
||||
behindTheSceneScope: 'behind-the-scene',
|
||||
|
|
|
@ -23,24 +23,21 @@
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
(function() {
|
||||
{
|
||||
// >>>>> start of local scope
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Browser data jobs
|
||||
|
||||
var clearCache = function() {
|
||||
const clearCache = function() {
|
||||
vAPI.setTimeout(clearCache, 15 * 60 * 1000);
|
||||
|
||||
var µm = µMatrix;
|
||||
if ( !µm.userSettings.clearBrowserCache ) {
|
||||
return;
|
||||
}
|
||||
const µm = µMatrix;
|
||||
if ( µm.userSettings.clearBrowserCache !== true ) { return; }
|
||||
|
||||
µm.clearBrowserCacheCycle -= 15;
|
||||
if ( µm.clearBrowserCacheCycle > 0 ) {
|
||||
return;
|
||||
}
|
||||
if ( µm.clearBrowserCacheCycle > 0 ) { return; }
|
||||
|
||||
vAPI.browserData.clearCache();
|
||||
|
||||
|
@ -48,15 +45,17 @@ var clearCache = function() {
|
|||
µm.browserCacheClearedCounter++;
|
||||
|
||||
// TODO: i18n
|
||||
µm.logger.writeOne({ info: vAPI.i18n('loggerEntryBrowserCacheCleared') });
|
||||
|
||||
//console.debug('clearBrowserCacheCallback()> vAPI.browserData.clearCache() called');
|
||||
µm.logger.writeOne({
|
||||
realm: 'message',
|
||||
text: vAPI.i18n('loggerEntryBrowserCacheCleared'),
|
||||
});
|
||||
};
|
||||
|
||||
vAPI.setTimeout(clearCache, 15 * 60 * 1000);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
})();
|
||||
// <<<<< end of local scope
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
|
465
src/js/cachestorage.js
Normal file
465
src/js/cachestorage.js
Normal file
|
@ -0,0 +1,465 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2016-present The uBlock Origin authors
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
/* global IDBDatabase, indexedDB */
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// The code below has been originally manually imported from:
|
||||
// Commit: https://github.com/nikrolls/uBlock-Edge/commit/d1538ea9bea89d507219d3219592382eee306134
|
||||
// Commit date: 29 October 2016
|
||||
// Commit author: https://github.com/nikrolls
|
||||
// Commit message: "Implement cacheStorage using IndexedDB"
|
||||
|
||||
// The original imported code has been subsequently modified as it was not
|
||||
// compatible with Firefox.
|
||||
// (a Promise thing, see https://github.com/dfahlander/Dexie.js/issues/317)
|
||||
// Furthermore, code to migrate from browser.storage.local to vAPI.storage
|
||||
// has been added, for seamless migration of cache-related entries into
|
||||
// indexedDB.
|
||||
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=1371255
|
||||
// Firefox-specific: we use indexedDB because browser.storage.local() has
|
||||
// poor performance in Firefox.
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/328
|
||||
// Use IndexedDB for Chromium as well, to take advantage of LZ4
|
||||
// compression.
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/399
|
||||
// Revert Chromium support of IndexedDB, use advanced setting to force
|
||||
// IndexedDB.
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/409
|
||||
// Allow forcing the use of webext storage on Firefox.
|
||||
|
||||
µMatrix.cacheStorage = (function() {
|
||||
|
||||
const STORAGE_NAME = 'uMatrixCacheStorage';
|
||||
|
||||
// Default to webext storage.
|
||||
const localStorage = webext.storage.local;
|
||||
const api = {
|
||||
name: 'browser.storage.local',
|
||||
get: localStorage.get,
|
||||
set: localStorage.set,
|
||||
remove: localStorage.remove,
|
||||
clear: localStorage.clear,
|
||||
getBytesInUse: localStorage.getBytesInUse,
|
||||
select: function(selectedBackend) {
|
||||
let actualBackend = selectedBackend;
|
||||
if ( actualBackend === undefined || actualBackend === 'unset' ) {
|
||||
actualBackend = vAPI.webextFlavor.soup.has('firefox')
|
||||
? 'indexedDB'
|
||||
: 'browser.storage.local';
|
||||
}
|
||||
if ( actualBackend === 'indexedDB' ) {
|
||||
return selectIDB().then(success => {
|
||||
if ( success || selectedBackend === 'indexedDB' ) {
|
||||
clearWebext();
|
||||
return 'indexedDB';
|
||||
}
|
||||
clearIDB();
|
||||
return 'browser.storage.local';
|
||||
});
|
||||
}
|
||||
if ( actualBackend === 'browser.storage.local' ) {
|
||||
clearIDB();
|
||||
}
|
||||
return Promise.resolve('browser.storage.local');
|
||||
|
||||
},
|
||||
error: undefined
|
||||
};
|
||||
|
||||
// Reassign API entries to that of indexedDB-based ones
|
||||
const selectIDB = async function() {
|
||||
let db;
|
||||
let dbPromise;
|
||||
let dbTimer;
|
||||
|
||||
const noopfn = function () {
|
||||
};
|
||||
|
||||
const disconnect = function() {
|
||||
if ( dbTimer !== undefined ) {
|
||||
clearTimeout(dbTimer);
|
||||
dbTimer = undefined;
|
||||
}
|
||||
if ( db instanceof IDBDatabase ) {
|
||||
db.close();
|
||||
db = undefined;
|
||||
}
|
||||
};
|
||||
|
||||
const keepAlive = function() {
|
||||
if ( dbTimer !== undefined ) {
|
||||
clearTimeout(dbTimer);
|
||||
}
|
||||
dbTimer = vAPI.setTimeout(
|
||||
( ) => {
|
||||
dbTimer = undefined;
|
||||
disconnect();
|
||||
},
|
||||
Math.max(
|
||||
µMatrix.rawSettings.autoUpdateAssetFetchPeriod * 2 * 1000,
|
||||
180000
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/3156
|
||||
// I have observed that no event was fired in Tor Browser 7.0.7 +
|
||||
// medium security level after the request to open the database was
|
||||
// created. When this occurs, I have also observed that the `error`
|
||||
// property was already set, so this means uBO can detect here whether
|
||||
// the database can be opened successfully. A try-catch block is
|
||||
// necessary when reading the `error` property because we are not
|
||||
// allowed to read this propery outside of event handlers in newer
|
||||
// implementation of IDBRequest (my understanding).
|
||||
|
||||
const getDb = function() {
|
||||
keepAlive();
|
||||
if ( db !== undefined ) {
|
||||
return Promise.resolve(db);
|
||||
}
|
||||
if ( dbPromise !== undefined ) {
|
||||
return dbPromise;
|
||||
}
|
||||
dbPromise = new Promise(resolve => {
|
||||
let req;
|
||||
try {
|
||||
req = indexedDB.open(STORAGE_NAME, 1);
|
||||
if ( req.error ) {
|
||||
console.log(req.error);
|
||||
req = undefined;
|
||||
}
|
||||
} catch(ex) {
|
||||
}
|
||||
if ( req === undefined ) {
|
||||
db = null;
|
||||
dbPromise = undefined;
|
||||
return resolve(null);
|
||||
}
|
||||
req.onupgradeneeded = function(ev) {
|
||||
if ( ev.oldVersion === 1 ) { return; }
|
||||
try {
|
||||
const db = ev.target.result;
|
||||
db.createObjectStore(STORAGE_NAME, { keyPath: 'key' });
|
||||
} catch(ex) {
|
||||
req.onerror();
|
||||
}
|
||||
};
|
||||
req.onsuccess = function(ev) {
|
||||
if ( resolve === undefined ) { return; }
|
||||
req = undefined;
|
||||
db = ev.target.result;
|
||||
dbPromise = undefined;
|
||||
resolve(db);
|
||||
resolve = undefined;
|
||||
};
|
||||
req.onerror = req.onblocked = function() {
|
||||
if ( resolve === undefined ) { return; }
|
||||
req = undefined;
|
||||
console.log(this.error);
|
||||
db = null;
|
||||
dbPromise = undefined;
|
||||
resolve(null);
|
||||
resolve = undefined;
|
||||
};
|
||||
setTimeout(( ) => {
|
||||
if ( resolve === undefined ) { return; }
|
||||
db = null;
|
||||
dbPromise = undefined;
|
||||
resolve(null);
|
||||
resolve = undefined;
|
||||
}, 5000);
|
||||
});
|
||||
return dbPromise;
|
||||
};
|
||||
|
||||
const getFromDb = async function(keys, keyvalStore, callback) {
|
||||
if ( typeof callback !== 'function' ) { return; }
|
||||
if ( keys.length === 0 ) { return callback(keyvalStore); }
|
||||
const promises = [];
|
||||
const gotOne = function() {
|
||||
if ( typeof this.result !== 'object' ) { return; }
|
||||
keyvalStore[this.result.key] = this.result.value;
|
||||
if ( this.result.value instanceof Blob === false ) { return; }
|
||||
promises.push(
|
||||
µMatrix.lz4Codec.decode(
|
||||
this.result.key,
|
||||
this.result.value
|
||||
).then(result => {
|
||||
keyvalStore[result.key] = result.data;
|
||||
})
|
||||
);
|
||||
};
|
||||
try {
|
||||
const db = await getDb();
|
||||
if ( !db ) { return callback(); }
|
||||
const transaction = db.transaction(STORAGE_NAME, 'readonly');
|
||||
transaction.oncomplete =
|
||||
transaction.onerror =
|
||||
transaction.onabort = ( ) => {
|
||||
Promise.all(promises).then(( ) => {
|
||||
callback(keyvalStore);
|
||||
});
|
||||
};
|
||||
const table = transaction.objectStore(STORAGE_NAME);
|
||||
for ( const key of keys ) {
|
||||
const req = table.get(key);
|
||||
req.onsuccess = gotOne;
|
||||
req.onerror = noopfn;
|
||||
}
|
||||
}
|
||||
catch(reason) {
|
||||
console.info(`cacheStorage.getFromDb() failed: ${reason}`);
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
const visitAllFromDb = async function(visitFn) {
|
||||
const db = await getDb();
|
||||
if ( !db ) { return visitFn(); }
|
||||
const transaction = db.transaction(STORAGE_NAME, 'readonly');
|
||||
transaction.oncomplete =
|
||||
transaction.onerror =
|
||||
transaction.onabort = ( ) => visitFn();
|
||||
const table = transaction.objectStore(STORAGE_NAME);
|
||||
const req = table.openCursor();
|
||||
req.onsuccess = function(ev) {
|
||||
let cursor = ev.target && ev.target.result;
|
||||
if ( !cursor ) { return; }
|
||||
let entry = cursor.value;
|
||||
visitFn(entry);
|
||||
cursor.continue();
|
||||
};
|
||||
};
|
||||
|
||||
const getAllFromDb = function(callback) {
|
||||
if ( typeof callback !== 'function' ) { return; }
|
||||
const promises = [];
|
||||
const keyvalStore = {};
|
||||
visitAllFromDb(entry => {
|
||||
if ( entry === undefined ) {
|
||||
Promise.all(promises).then(( ) => {
|
||||
callback(keyvalStore);
|
||||
});
|
||||
return;
|
||||
}
|
||||
keyvalStore[entry.key] = entry.value;
|
||||
if ( entry.value instanceof Blob === false ) { return; }
|
||||
promises.push(
|
||||
µMatrix.lz4Codec.decode(
|
||||
entry.key,
|
||||
entry.value
|
||||
).then(result => {
|
||||
keyvalStore[result.key] = result.value;
|
||||
})
|
||||
);
|
||||
}).catch(reason => {
|
||||
console.info(`cacheStorage.getAllFromDb() failed: ${reason}`);
|
||||
callback();
|
||||
});
|
||||
};
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/141
|
||||
// Mind that IDBDatabase.transaction() and IDBObjectStore.put()
|
||||
// can throw:
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/transaction
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/put
|
||||
|
||||
const putToDb = async function(keyvalStore, callback) {
|
||||
if ( typeof callback !== 'function' ) {
|
||||
callback = noopfn;
|
||||
}
|
||||
const keys = Object.keys(keyvalStore);
|
||||
if ( keys.length === 0 ) { return callback(); }
|
||||
const promises = [ getDb() ];
|
||||
const entries = [];
|
||||
const dontCompress =
|
||||
µMatrix.rawSettings.cacheStorageCompression !== true;
|
||||
const handleEncodingResult = result => {
|
||||
entries.push({ key: result.key, value: result.data });
|
||||
};
|
||||
for ( const key of keys ) {
|
||||
const data = keyvalStore[key];
|
||||
const isString = typeof data === 'string';
|
||||
if ( isString === false || dontCompress ) {
|
||||
entries.push({ key, value: data });
|
||||
continue;
|
||||
}
|
||||
promises.push(
|
||||
µMatrix.lz4Codec.encode(key, data).then(handleEncodingResult)
|
||||
);
|
||||
}
|
||||
const finish = ( ) => {
|
||||
if ( callback === undefined ) { return; }
|
||||
let cb = callback;
|
||||
callback = undefined;
|
||||
cb();
|
||||
};
|
||||
try {
|
||||
const results = await Promise.all(promises);
|
||||
const db = results[0];
|
||||
if ( !db ) { return callback(); }
|
||||
const transaction = db.transaction(
|
||||
STORAGE_NAME,
|
||||
'readwrite'
|
||||
);
|
||||
transaction.oncomplete =
|
||||
transaction.onerror =
|
||||
transaction.onabort = finish;
|
||||
const table = transaction.objectStore(STORAGE_NAME);
|
||||
for ( const entry of entries ) {
|
||||
table.put(entry);
|
||||
}
|
||||
} catch (ex) {
|
||||
finish();
|
||||
}
|
||||
};
|
||||
|
||||
const deleteFromDb = async function(input, callback) {
|
||||
if ( typeof callback !== 'function' ) {
|
||||
callback = noopfn;
|
||||
}
|
||||
const keys = Array.isArray(input) ? input.slice() : [ input ];
|
||||
if ( keys.length === 0 ) { return callback(); }
|
||||
const finish = ( ) => {
|
||||
if ( callback === undefined ) { return; }
|
||||
let cb = callback;
|
||||
callback = undefined;
|
||||
cb();
|
||||
};
|
||||
try {
|
||||
const db = await getDb();
|
||||
if ( !db ) { return callback(); }
|
||||
const transaction = db.transaction(STORAGE_NAME, 'readwrite');
|
||||
transaction.oncomplete =
|
||||
transaction.onerror =
|
||||
transaction.onabort = finish;
|
||||
const table = transaction.objectStore(STORAGE_NAME);
|
||||
for ( const key of keys ) {
|
||||
table.delete(key);
|
||||
}
|
||||
} catch (ex) {
|
||||
finish();
|
||||
}
|
||||
};
|
||||
|
||||
const clearDb = async function(callback) {
|
||||
if ( typeof callback !== 'function' ) {
|
||||
callback = noopfn;
|
||||
}
|
||||
try {
|
||||
const db = await getDb();
|
||||
if ( !db ) { return callback(); }
|
||||
const transaction = db.transaction(STORAGE_NAME, 'readwrite');
|
||||
transaction.oncomplete =
|
||||
transaction.onerror =
|
||||
transaction.onabort = ( ) => {
|
||||
callback();
|
||||
};
|
||||
transaction.objectStore(STORAGE_NAME).clear();
|
||||
}
|
||||
catch(reason) {
|
||||
console.info(`cacheStorage.clearDb() failed: ${reason}`);
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
await getDb();
|
||||
if ( !db ) { return false; }
|
||||
|
||||
api.name = 'indexedDB';
|
||||
api.get = function get(keys) {
|
||||
return new Promise(resolve => {
|
||||
if ( keys === null ) {
|
||||
return getAllFromDb(bin => resolve(bin));
|
||||
}
|
||||
let toRead, output = {};
|
||||
if ( typeof keys === 'string' ) {
|
||||
toRead = [ keys ];
|
||||
} else if ( Array.isArray(keys) ) {
|
||||
toRead = keys;
|
||||
} else /* if ( typeof keys === 'object' ) */ {
|
||||
toRead = Object.keys(keys);
|
||||
output = keys;
|
||||
}
|
||||
getFromDb(toRead, output, bin => resolve(bin));
|
||||
});
|
||||
};
|
||||
api.set = function set(keys) {
|
||||
return new Promise(resolve => {
|
||||
putToDb(keys, details => resolve(details));
|
||||
});
|
||||
};
|
||||
api.remove = function remove(keys) {
|
||||
return new Promise(resolve => {
|
||||
deleteFromDb(keys, ( ) => resolve());
|
||||
});
|
||||
};
|
||||
api.clear = function clear() {
|
||||
return new Promise(resolve => {
|
||||
clearDb(( ) => resolve());
|
||||
});
|
||||
};
|
||||
api.getBytesInUse = function getBytesInUse() {
|
||||
return Promise.resolve(0);
|
||||
};
|
||||
return true;
|
||||
};
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/328
|
||||
// Delete cache-related entries from webext storage.
|
||||
const clearWebext = async function() {
|
||||
const bin = await webext.storage.local.get('assetCacheRegistry');
|
||||
if (
|
||||
bin instanceof Object === false ||
|
||||
bin.assetCacheRegistry instanceof Object === false
|
||||
) {
|
||||
return;
|
||||
}
|
||||
const toRemove = [
|
||||
'assetCacheRegistry',
|
||||
'assetSourceRegistry',
|
||||
'resourcesSelfie',
|
||||
'selfie'
|
||||
];
|
||||
for ( const key in bin.assetCacheRegistry ) {
|
||||
if ( bin.assetCacheRegistry.hasOwnProperty(key) ) {
|
||||
toRemove.push('cache/' + key);
|
||||
}
|
||||
}
|
||||
webext.storage.local.remove(toRemove);
|
||||
};
|
||||
|
||||
const clearIDB = function() {
|
||||
try {
|
||||
indexedDB.deleteDatabase(STORAGE_NAME);
|
||||
} catch(ex) {
|
||||
}
|
||||
};
|
||||
|
||||
return api;
|
||||
}());
|
||||
|
||||
/******************************************************************************/
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
(function() {
|
||||
(( ) => {
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -39,19 +39,15 @@ self.cloud = {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var widget = uDom.nodeFromId('cloudWidget');
|
||||
if ( widget === null ) {
|
||||
return;
|
||||
}
|
||||
const widget = uDom.nodeFromId('cloudWidget');
|
||||
if ( widget === null ) { return; }
|
||||
|
||||
self.cloud.datakey = widget.getAttribute('data-cloud-entry') || '';
|
||||
if ( self.cloud.datakey === '' ) {
|
||||
return;
|
||||
}
|
||||
if ( self.cloud.datakey === '' ) { return; }
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var onCloudDataReceived = function(entry) {
|
||||
const onCloudDataReceived = function(entry) {
|
||||
if ( entry instanceof Object === false ) { return; }
|
||||
|
||||
self.cloud.data = entry.data;
|
||||
|
@ -59,7 +55,7 @@ var onCloudDataReceived = function(entry) {
|
|||
uDom.nodeFromId('cloudPull').removeAttribute('disabled');
|
||||
uDom.nodeFromId('cloudPullAndMerge').removeAttribute('disabled');
|
||||
|
||||
let timeOptions = {
|
||||
const timeOptions = {
|
||||
weekday: 'short',
|
||||
year: 'numeric',
|
||||
month: 'short',
|
||||
|
@ -70,7 +66,7 @@ var onCloudDataReceived = function(entry) {
|
|||
timeZoneName: 'short'
|
||||
};
|
||||
|
||||
let time = new Date(entry.tstamp);
|
||||
const time = new Date(entry.tstamp);
|
||||
widget.querySelector('[data-i18n="cloudNoData"]').textContent =
|
||||
entry.source + '\n' +
|
||||
time.toLocaleString('fullwide', timeOptions);
|
||||
|
@ -78,37 +74,31 @@ var onCloudDataReceived = function(entry) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var fetchCloudData = function() {
|
||||
vAPI.messaging.send(
|
||||
'cloud-ui.js',
|
||||
{
|
||||
what: 'cloudPull',
|
||||
datakey: self.cloud.datakey
|
||||
},
|
||||
onCloudDataReceived
|
||||
);
|
||||
const fetchCloudData = function() {
|
||||
vAPI.messaging.send('cloud-ui.js', {
|
||||
what: 'cloudPull',
|
||||
datakey: self.cloud.datakey
|
||||
}).then(response => {
|
||||
onCloudDataReceived(response);
|
||||
});
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var pushData = function() {
|
||||
if ( typeof self.cloud.onPush !== 'function' ) {
|
||||
return;
|
||||
}
|
||||
vAPI.messaging.send(
|
||||
'cloud-ui.js',
|
||||
{
|
||||
what: 'cloudPush',
|
||||
datakey: self.cloud.datakey,
|
||||
data: self.cloud.onPush()
|
||||
},
|
||||
fetchCloudData
|
||||
);
|
||||
const pushData = function() {
|
||||
if ( typeof self.cloud.onPush !== 'function' ) { return; }
|
||||
vAPI.messaging.send('cloud-ui.js', {
|
||||
what: 'cloudPush',
|
||||
datakey: self.cloud.datakey,
|
||||
data: self.cloud.onPush()
|
||||
}).then(( ) => {
|
||||
fetchCloudData();
|
||||
});
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var pullData = function(ev) {
|
||||
const pullData = function(ev) {
|
||||
if ( typeof self.cloud.onPull === 'function' ) {
|
||||
self.cloud.onPull(self.cloud.data, ev.shiftKey);
|
||||
}
|
||||
|
@ -116,7 +106,7 @@ var pullData = function(ev) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var pullAndMergeData = function() {
|
||||
const pullAndMergeData = function() {
|
||||
if ( typeof self.cloud.onPull === 'function' ) {
|
||||
self.cloud.onPull(self.cloud.data, true);
|
||||
}
|
||||
|
@ -124,8 +114,8 @@ var pullAndMergeData = function() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var openOptions = function() {
|
||||
let input = uDom.nodeFromId('cloudDeviceName');
|
||||
const openOptions = function() {
|
||||
const input = uDom.nodeFromId('cloudDeviceName');
|
||||
input.value = self.cloud.options.deviceName;
|
||||
input.setAttribute('placeholder', self.cloud.options.defaultDeviceName);
|
||||
uDom.nodeFromId('cloudOptions').classList.add('show');
|
||||
|
@ -133,50 +123,46 @@ var openOptions = function() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var closeOptions = function(ev) {
|
||||
let root = uDom.nodeFromId('cloudOptions');
|
||||
if ( ev.target !== root ) {
|
||||
return;
|
||||
}
|
||||
const closeOptions = function(ev) {
|
||||
const root = uDom.nodeFromId('cloudOptions');
|
||||
if ( ev.target !== root ) { return; }
|
||||
root.classList.remove('show');
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var submitOptions = function() {
|
||||
let onOptions = function(options) {
|
||||
if ( typeof options !== 'object' || options === null ) {
|
||||
return;
|
||||
}
|
||||
self.cloud.options = options;
|
||||
};
|
||||
|
||||
const submitOptions = function() {
|
||||
vAPI.messaging.send('cloud-ui.js', {
|
||||
what: 'cloudSetOptions',
|
||||
options: {
|
||||
deviceName: uDom.nodeFromId('cloudDeviceName').value
|
||||
}
|
||||
}, onOptions);
|
||||
}).then(options => {
|
||||
if ( typeof options !== 'object' || options === null ) { return; }
|
||||
self.cloud.options = options;
|
||||
});
|
||||
uDom.nodeFromId('cloudOptions').classList.remove('show');
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var onInitialize = function(options) {
|
||||
vAPI.messaging.send('cloud-ui.js', {
|
||||
what: 'cloudGetOptions'
|
||||
}).then(options => {
|
||||
if ( typeof options !== 'object' || options === null ) { return; }
|
||||
|
||||
if ( !options.enabled ) { return; }
|
||||
self.cloud.options = options;
|
||||
|
||||
let xhr = new XMLHttpRequest();
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', 'cloud-ui.html', true);
|
||||
xhr.overrideMimeType('text/html;charset=utf-8');
|
||||
xhr.responseType = 'text';
|
||||
xhr.onload = function() {
|
||||
this.onload = null;
|
||||
let parser = new DOMParser(),
|
||||
parsed = parser.parseFromString(this.responseText, 'text/html'),
|
||||
fromParent = parsed.body;
|
||||
const parser = new DOMParser();
|
||||
const parsed = parser.parseFromString(this.responseText, 'text/html');
|
||||
const fromParent = parsed.body;
|
||||
while ( fromParent.firstElementChild !== null ) {
|
||||
widget.appendChild(
|
||||
document.adoptNode(fromParent.firstElementChild)
|
||||
|
@ -198,12 +184,8 @@ var onInitialize = function(options) {
|
|||
fetchCloudData();
|
||||
};
|
||||
xhr.send();
|
||||
};
|
||||
|
||||
vAPI.messaging.send('cloud-ui.js', { what: 'cloudGetOptions' }, onInitialize);
|
||||
});
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://www.youtube.com/watch?v=aQFp67VoiDA
|
||||
|
||||
})();
|
||||
|
|
37
src/js/codemirror/mode/raw-settings.js
vendored
Normal file
37
src/js/codemirror/mode/raw-settings.js
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2019-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
/* global CodeMirror */
|
||||
|
||||
'use strict';
|
||||
|
||||
CodeMirror.defineMode('raw-settings', function() {
|
||||
return {
|
||||
token: function(stream) {
|
||||
if ( stream.sol() ) {
|
||||
stream.match(/\s*\S+/);
|
||||
return 'keyword';
|
||||
}
|
||||
stream.skipToEnd();
|
||||
return null;
|
||||
}
|
||||
};
|
||||
});
|
336
src/js/codemirror/search.js
Normal file
336
src/js/codemirror/search.js
Normal file
|
@ -0,0 +1,336 @@
|
|||
// The following code is heavily based on the standard CodeMirror
|
||||
// search addon found at: https://codemirror.net/addon/search/search.js
|
||||
// I added/removed and modified code in order to get a closer match to a
|
||||
// browser's built-in find-in-page feature which are just enough for
|
||||
// uBlock Origin.
|
||||
|
||||
|
||||
// CodeMirror, copyright (c) by Marijn Haverbeke and others
|
||||
// Distributed under an MIT license: http://codemirror.net/LICENSE
|
||||
|
||||
// Define search commands. Depends on dialog.js or another
|
||||
// implementation of the openDialog method.
|
||||
|
||||
// Replace works a little oddly -- it will do the replace on the next
|
||||
// Ctrl-G (or whatever is bound to findNext) press. You prevent a
|
||||
// replace by making sure the match is no longer selected when hitting
|
||||
// Ctrl-G.
|
||||
|
||||
/* globals define, require, CodeMirror */
|
||||
|
||||
'use strict';
|
||||
|
||||
(function(mod) {
|
||||
if (typeof exports === "object" && typeof module === "object") // CommonJS
|
||||
mod(require("../../lib/codemirror"), require("./searchcursor"), require("../dialog/dialog"));
|
||||
else if (typeof define === "function" && define.amd) // AMD
|
||||
define(["../../lib/codemirror", "./searchcursor", "../dialog/dialog"], mod);
|
||||
else // Plain browser env
|
||||
mod(CodeMirror);
|
||||
})(function(CodeMirror) {
|
||||
|
||||
function searchOverlay(query, caseInsensitive) {
|
||||
if (typeof query === "string")
|
||||
query = new RegExp(query.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"), caseInsensitive ? "gi" : "g");
|
||||
else if (!query.global)
|
||||
query = new RegExp(query.source, query.ignoreCase ? "gi" : "g");
|
||||
|
||||
return {
|
||||
token: function(stream) {
|
||||
query.lastIndex = stream.pos;
|
||||
var match = query.exec(stream.string);
|
||||
if (match && match.index === stream.pos) {
|
||||
stream.pos += match[0].length || 1;
|
||||
return "searching";
|
||||
} else if (match) {
|
||||
stream.pos = match.index;
|
||||
} else {
|
||||
stream.skipToEnd();
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function searchWidgetKeydownHandler(cm, ev) {
|
||||
var keyName = CodeMirror.keyName(ev);
|
||||
if ( !keyName ) { return; }
|
||||
CodeMirror.lookupKey(
|
||||
keyName,
|
||||
cm.getOption('keyMap'),
|
||||
function(command) {
|
||||
if ( widgetCommandHandler(cm, command) ) {
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function searchWidgetInputHandler(cm) {
|
||||
let state = getSearchState(cm);
|
||||
if ( queryTextFromSearchWidget(cm) === state.queryText ) { return; }
|
||||
if ( state.queryTimer !== null ) {
|
||||
clearTimeout(state.queryTimer);
|
||||
}
|
||||
state.queryTimer = setTimeout(
|
||||
() => {
|
||||
state.queryTimer = null;
|
||||
findCommit(cm, 0);
|
||||
},
|
||||
350
|
||||
);
|
||||
}
|
||||
|
||||
function searchWidgetClickHandler(cm, ev) {
|
||||
var tcl = ev.target.classList;
|
||||
if ( tcl.contains('cm-search-widget-up') ) {
|
||||
findNext(cm, -1);
|
||||
} else if ( tcl.contains('cm-search-widget-down') ) {
|
||||
findNext(cm, 1);
|
||||
}
|
||||
if ( ev.target.localName !== 'input' ) {
|
||||
ev.preventDefault();
|
||||
} else {
|
||||
ev.stopImmediatePropagation();
|
||||
}
|
||||
}
|
||||
|
||||
function queryTextFromSearchWidget(cm) {
|
||||
return getSearchState(cm).widget.querySelector('input[type="search"]').value;
|
||||
}
|
||||
|
||||
function queryTextToSearchWidget(cm, q) {
|
||||
var input = getSearchState(cm).widget.querySelector('input[type="search"]');
|
||||
if ( typeof q === 'string' && q !== input.value ) {
|
||||
input.value = q;
|
||||
}
|
||||
input.setSelectionRange(0, input.value.length);
|
||||
input.focus();
|
||||
}
|
||||
|
||||
function SearchState(cm) {
|
||||
this.query = null;
|
||||
this.overlay = null;
|
||||
this.panel = null;
|
||||
const widgetParent =
|
||||
document.querySelector('.cm-search-widget-template').cloneNode(true);
|
||||
this.widget = widgetParent.children[0];
|
||||
this.widget.addEventListener('keydown', searchWidgetKeydownHandler.bind(null, cm));
|
||||
this.widget.addEventListener('input', searchWidgetInputHandler.bind(null, cm));
|
||||
this.widget.addEventListener('mousedown', searchWidgetClickHandler.bind(null, cm));
|
||||
if ( typeof cm.addPanel === 'function' ) {
|
||||
this.panel = cm.addPanel(this.widget);
|
||||
}
|
||||
this.queryText = '';
|
||||
this.queryTimer = null;
|
||||
}
|
||||
|
||||
// We want the search widget to behave as if the focus was on the
|
||||
// CodeMirror editor.
|
||||
|
||||
const reSearchCommands = /^(?:find|findNext|findPrev|newlineAndIndent)$/;
|
||||
|
||||
function widgetCommandHandler(cm, command) {
|
||||
if ( reSearchCommands.test(command) === false ) { return false; }
|
||||
var queryText = queryTextFromSearchWidget(cm);
|
||||
if ( command === 'find' ) {
|
||||
queryTextToSearchWidget(cm);
|
||||
return true;
|
||||
}
|
||||
if ( queryText.length !== 0 ) {
|
||||
findNext(cm, command === 'findPrev' ? -1 : 1);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function getSearchState(cm) {
|
||||
return cm.state.search || (cm.state.search = new SearchState(cm));
|
||||
}
|
||||
|
||||
function queryCaseInsensitive(query) {
|
||||
return typeof query === "string" && query === query.toLowerCase();
|
||||
}
|
||||
|
||||
function getSearchCursor(cm, query, pos) {
|
||||
// Heuristic: if the query string is all lowercase, do a case insensitive search.
|
||||
return cm.getSearchCursor(
|
||||
query,
|
||||
pos,
|
||||
{ caseFold: queryCaseInsensitive(query), multiline: false }
|
||||
);
|
||||
}
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/658
|
||||
// Modified to backslash-escape ONLY widely-used control characters.
|
||||
function parseString(string) {
|
||||
return string.replace(/\\[nrt\\]/g, function(match) {
|
||||
if (match === "\\n") return "\n";
|
||||
if (match === "\\r") return "\r";
|
||||
if (match === '\\t') return '\t';
|
||||
if (match === '\\\\') return '\\';
|
||||
return match;
|
||||
});
|
||||
}
|
||||
|
||||
function parseQuery(query) {
|
||||
var isRE = query.match(/^\/(.*)\/([a-z]*)$/);
|
||||
if (isRE) {
|
||||
try { query = new RegExp(isRE[1], isRE[2].indexOf("i") === -1 ? "" : "i"); }
|
||||
catch(e) {} // Not a regular expression after all, do a string search
|
||||
} else {
|
||||
query = parseString(query);
|
||||
}
|
||||
if (typeof query === "string" ? query === "" : query.test(""))
|
||||
query = /x^/;
|
||||
return query;
|
||||
}
|
||||
|
||||
function startSearch(cm, state) {
|
||||
state.query = parseQuery(state.queryText);
|
||||
if ( state.overlay ) {
|
||||
cm.removeOverlay(state.overlay, queryCaseInsensitive(state.query));
|
||||
}
|
||||
state.overlay = searchOverlay(state.query, queryCaseInsensitive(state.query));
|
||||
cm.addOverlay(state.overlay);
|
||||
if ( cm.showMatchesOnScrollbar ) {
|
||||
if ( state.annotate ) {
|
||||
state.annotate.clear();
|
||||
state.annotate = null;
|
||||
}
|
||||
state.annotate = cm.showMatchesOnScrollbar(
|
||||
state.query,
|
||||
queryCaseInsensitive(state.query),
|
||||
{ multiline: false }
|
||||
);
|
||||
let count = state.annotate.matches.length;
|
||||
state.widget
|
||||
.querySelector('.cm-search-widget-count > span:nth-of-type(2)')
|
||||
.textContent = count > 1000 ? '1000+' : count;
|
||||
state.widget.setAttribute('data-query', state.queryText);
|
||||
// Ensure the caret is visible
|
||||
let input = state.widget.querySelector('.cm-search-widget-input > input');
|
||||
input.selectionStart = input.selectionStart;
|
||||
}
|
||||
}
|
||||
|
||||
function findNext(cm, dir, callback) {
|
||||
cm.operation(function() {
|
||||
var state = getSearchState(cm);
|
||||
if ( !state.query ) { return; }
|
||||
var cursor = getSearchCursor(
|
||||
cm,
|
||||
state.query,
|
||||
dir <= 0 ? cm.getCursor('from') : cm.getCursor('to')
|
||||
);
|
||||
let previous = dir < 0;
|
||||
if (!cursor.find(previous)) {
|
||||
cursor = getSearchCursor(
|
||||
cm,
|
||||
state.query,
|
||||
previous ? CodeMirror.Pos(cm.lastLine()) : CodeMirror.Pos(cm.firstLine(), 0)
|
||||
);
|
||||
if (!cursor.find(previous)) return;
|
||||
}
|
||||
cm.setSelection(cursor.from(), cursor.to());
|
||||
cm.scrollIntoView({from: cursor.from(), to: cursor.to()}, 20);
|
||||
if (callback) callback(cursor.from(), cursor.to());
|
||||
});
|
||||
}
|
||||
|
||||
function clearSearch(cm, hard) {
|
||||
cm.operation(function() {
|
||||
var state = getSearchState(cm);
|
||||
if ( state.query ) {
|
||||
state.query = state.queryText = null;
|
||||
}
|
||||
if ( state.overlay ) {
|
||||
cm.removeOverlay(state.overlay);
|
||||
state.overlay = null;
|
||||
}
|
||||
if ( state.annotate ) {
|
||||
state.annotate.clear();
|
||||
state.annotate = null;
|
||||
}
|
||||
state.widget.removeAttribute('data-query');
|
||||
if ( hard ) {
|
||||
state.panel.clear();
|
||||
state.panel = null;
|
||||
state.widget = null;
|
||||
cm.state.search = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function findCommit(cm, dir) {
|
||||
var state = getSearchState(cm);
|
||||
if ( state.queryTimer !== null ) {
|
||||
clearTimeout(state.queryTimer);
|
||||
state.queryTimer = null;
|
||||
}
|
||||
var queryText = queryTextFromSearchWidget(cm);
|
||||
if ( queryText === state.queryText ) { return; }
|
||||
state.queryText = queryText;
|
||||
if ( state.queryText === '' ) {
|
||||
clearSearch(cm);
|
||||
} else {
|
||||
cm.operation(function() {
|
||||
startSearch(cm, state);
|
||||
findNext(cm, dir);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function findCommand(cm) {
|
||||
var queryText = cm.getSelection() || undefined;
|
||||
if ( !queryText ) {
|
||||
var word = cm.findWordAt(cm.getCursor());
|
||||
queryText = cm.getRange(word.anchor, word.head);
|
||||
if ( /^\W|\W$/.test(queryText) ) {
|
||||
queryText = undefined;
|
||||
}
|
||||
cm.setCursor(word.anchor);
|
||||
}
|
||||
queryTextToSearchWidget(cm, queryText);
|
||||
findCommit(cm, 1);
|
||||
}
|
||||
|
||||
function findNextCommand(cm) {
|
||||
var state = getSearchState(cm);
|
||||
if ( state.query ) { return findNext(cm, 1); }
|
||||
}
|
||||
|
||||
function findPrevCommand(cm) {
|
||||
var state = getSearchState(cm);
|
||||
if ( state.query ) { return findNext(cm, -1); }
|
||||
}
|
||||
|
||||
{
|
||||
const searchWidgetTemplate =
|
||||
'<div class="cm-search-widget-template" style="display:none;">' +
|
||||
'<div class="cm-search-widget">' +
|
||||
'<span class="fa-icon fa-icon-ro">search</span> ' +
|
||||
'<span class="cm-search-widget-input">' +
|
||||
'<input type="search">' +
|
||||
'<span class="cm-search-widget-count">' +
|
||||
'<span><!-- future use --></span><span>0</span>' +
|
||||
'</span>' +
|
||||
'</span> ' +
|
||||
'<span class="cm-search-widget-up cm-search-widget-button fa-icon">angle-up</span> ' +
|
||||
'<span class="cm-search-widget-down cm-search-widget-button fa-icon fa-icon-vflipped">angle-up</span> ' +
|
||||
'<a class="fa-icon sourceURL" href>external-link</a>' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
const domParser = new DOMParser();
|
||||
const doc = domParser.parseFromString(searchWidgetTemplate, 'text/html');
|
||||
const widgetTemplate = document.adoptNode(doc.body.firstElementChild);
|
||||
document.body.appendChild(widgetTemplate);
|
||||
}
|
||||
|
||||
CodeMirror.commands.find = findCommand;
|
||||
CodeMirror.commands.findNext = findNextCommand;
|
||||
CodeMirror.commands.findPrev = findPrevCommand;
|
||||
|
||||
CodeMirror.defineInitHook(function(cm) {
|
||||
getSearchState(cm);
|
||||
});
|
||||
});
|
34
src/js/console.js
Normal file
34
src/js/console.js
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uMatrix - a browser extension to block requests.
|
||||
Copyright (C) 2019-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
self.log = (function() {
|
||||
const noopFunc = function() {};
|
||||
const info = function(s) { console.log(`[uMatrix] ${s}`); };
|
||||
return {
|
||||
get verbosity( ) { return; },
|
||||
set verbosity(level) {
|
||||
this.info = console.info = level === 'info' ? info : noopFunc;
|
||||
},
|
||||
info: noopFunc,
|
||||
};
|
||||
})();
|
|
@ -26,7 +26,7 @@
|
|||
// https://github.com/hackademix/noscript/commit/6e80d3f130773fc9a9123c5c4c2e97d63e90fa2a
|
||||
|
||||
(function() {
|
||||
let html = document.documentElement;
|
||||
const html = document.documentElement;
|
||||
if ( html instanceof HTMLElement === false ) { return; }
|
||||
|
||||
let meta;
|
||||
|
@ -45,8 +45,8 @@
|
|||
//
|
||||
// The CSP directive is enforced as soon as the meta tag is inserted:
|
||||
// > Enforce the policy policy.
|
||||
let head = document.head,
|
||||
parent = head;
|
||||
const head = document.head;
|
||||
let parent = head;
|
||||
if ( parent === null ) {
|
||||
parent = document.createElement('head');
|
||||
html.appendChild(parent);
|
||||
|
|
|
@ -25,8 +25,8 @@
|
|||
// borrowed from NoScript:
|
||||
// https://github.com/hackademix/noscript/commit/6e80d3f130773fc9a9123c5c4c2e97d63e90fa2a
|
||||
|
||||
(function() {
|
||||
let html = document.documentElement;
|
||||
(( ) => {
|
||||
const html = document.documentElement;
|
||||
if ( html instanceof HTMLElement === false ) { return; }
|
||||
|
||||
let meta;
|
||||
|
@ -45,8 +45,8 @@
|
|||
//
|
||||
// The CSP directive is enforced as soon as the meta tag is inserted:
|
||||
// > Enforce the policy policy.
|
||||
let head = document.head,
|
||||
parent = head;
|
||||
const head = document.head;
|
||||
let parent = head;
|
||||
if ( parent === null ) {
|
||||
parent = document.createElement('head');
|
||||
html.appendChild(parent);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uMatrix - a browser extension to black/white list requests.
|
||||
Copyright (C) 2017-2018 Raymond Hill
|
||||
Copyright (C) 2017-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -26,15 +26,15 @@
|
|||
|
||||
// Injected into content pages
|
||||
|
||||
(function() {
|
||||
(( ) => {
|
||||
|
||||
if ( typeof vAPI !== 'object' ) { return; }
|
||||
|
||||
vAPI.selfWorkerSrcReported = vAPI.selfWorkerSrcReported || false;
|
||||
|
||||
var reGoodWorkerSrc = /(?:child|worker)-src[^;,]+?'none'/;
|
||||
const reGoodWorkerSrc = /(?:child|worker)-src[^;,]+?'none'/;
|
||||
|
||||
var handler = function(ev) {
|
||||
const handler = function(ev) {
|
||||
if (
|
||||
ev.isTrusted !== true ||
|
||||
ev.originalPolicy.includes('report-uri about:blank') === false
|
||||
|
@ -69,28 +69,21 @@
|
|||
vAPI.selfWorkerSrcReported = true;
|
||||
}
|
||||
|
||||
vAPI.messaging.send(
|
||||
'contentscript.js',
|
||||
{
|
||||
what: 'securityPolicyViolation',
|
||||
directive: 'worker-src',
|
||||
blockedURI: ev.blockedURI,
|
||||
documentURI: ev.documentURI,
|
||||
blocked: ev.disposition === 'enforce'
|
||||
}
|
||||
);
|
||||
vAPI.messaging.send('contentscript.js', {
|
||||
what: 'securityPolicyViolation',
|
||||
directive: 'worker-src',
|
||||
blockedURI: ev.blockedURI,
|
||||
documentURI: ev.documentURI,
|
||||
blocked: ev.disposition === 'enforce',
|
||||
});
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
document.addEventListener(
|
||||
'securitypolicyviolation',
|
||||
function(ev) {
|
||||
if ( !handler(ev) ) { return; }
|
||||
ev.stopPropagation();
|
||||
ev.preventDefault();
|
||||
},
|
||||
true
|
||||
);
|
||||
document.addEventListener('securitypolicyviolation', ev => {
|
||||
if ( !handler(ev) ) { return; }
|
||||
ev.stopPropagation();
|
||||
ev.preventDefault();
|
||||
}, true);
|
||||
|
||||
})();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uMatrix - a browser extension to black/white list requests.
|
||||
Copyright (C) 2014-2018 Raymond Hill
|
||||
Copyright (C) 2014-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -28,7 +28,7 @@
|
|||
|
||||
// Injected into content pages
|
||||
|
||||
(function() {
|
||||
(( ) => {
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -42,9 +42,7 @@ if (
|
|||
}
|
||||
|
||||
// This can also happen (for example if script injected into a `data:` URI doc)
|
||||
if ( !window.location ) {
|
||||
return;
|
||||
}
|
||||
if ( !window.location ) { return; }
|
||||
|
||||
// This can happen
|
||||
if ( typeof vAPI !== 'object' ) {
|
||||
|
@ -65,8 +63,8 @@ vAPI.contentscriptEndInjected = true;
|
|||
|
||||
// Executed only once.
|
||||
|
||||
(function() {
|
||||
var localStorageHandler = function(mustRemove) {
|
||||
{
|
||||
const localStorageHandler = function(mustRemove) {
|
||||
if ( mustRemove ) {
|
||||
window.localStorage.clear();
|
||||
window.sessionStorage.clear();
|
||||
|
@ -78,15 +76,17 @@ vAPI.contentscriptEndInjected = true;
|
|||
// to site data is disabled.
|
||||
// https://github.com/gorhill/httpswitchboard/issues/215
|
||||
try {
|
||||
var hasLocalStorage =
|
||||
const hasLocalStorage =
|
||||
window.localStorage && window.localStorage.length !== 0;
|
||||
var hasSessionStorage =
|
||||
const hasSessionStorage =
|
||||
window.sessionStorage && window.sessionStorage.length !== 0;
|
||||
if ( hasLocalStorage || hasSessionStorage ) {
|
||||
vAPI.messaging.send('contentscript.js', {
|
||||
what: 'contentScriptHasLocalStorage',
|
||||
originURL: window.location.origin
|
||||
}, localStorageHandler);
|
||||
originURL: window.location.origin,
|
||||
}).then(response => {
|
||||
localStorageHandler(response);
|
||||
});
|
||||
}
|
||||
|
||||
// TODO: indexedDB
|
||||
|
@ -105,41 +105,41 @@ vAPI.contentscriptEndInjected = true;
|
|||
}
|
||||
catch (e) {
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/gorhill/uMatrix/issues/45
|
||||
|
||||
var collapser = (function() {
|
||||
var resquestIdGenerator = 1,
|
||||
const collapser = (( ) => {
|
||||
let resquestIdGenerator = 1,
|
||||
processTimer,
|
||||
toProcess = [],
|
||||
toFilter = [],
|
||||
toCollapse = new Map(),
|
||||
cachedBlockedMap,
|
||||
cachedBlockedMapHash,
|
||||
cachedBlockedMapTimer,
|
||||
reURLPlaceholder = /\{\{url\}\}/g;
|
||||
var src1stProps = {
|
||||
cachedBlockedMapTimer;
|
||||
const toCollapse = new Map();
|
||||
const reURLPlaceholder = /\{\{url\}\}/g;
|
||||
const src1stProps = {
|
||||
'embed': 'src',
|
||||
'frame': 'src',
|
||||
'iframe': 'src',
|
||||
'img': 'src',
|
||||
'object': 'data'
|
||||
};
|
||||
var src2ndProps = {
|
||||
const src2ndProps = {
|
||||
'img': 'srcset'
|
||||
};
|
||||
var tagToTypeMap = {
|
||||
const tagToTypeMap = {
|
||||
embed: 'media',
|
||||
frame: 'frame',
|
||||
iframe: 'frame',
|
||||
img: 'image',
|
||||
object: 'media'
|
||||
};
|
||||
var cachedBlockedSetClear = function() {
|
||||
const cachedBlockedSetClear = function() {
|
||||
cachedBlockedMap =
|
||||
cachedBlockedMapHash =
|
||||
cachedBlockedMapTimer = undefined;
|
||||
|
@ -147,13 +147,13 @@ var collapser = (function() {
|
|||
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/174
|
||||
// Do not remove fragment from src URL
|
||||
var onProcessed = function(response) {
|
||||
const onProcessed = function(response) {
|
||||
if ( !response ) { // This happens if uBO is disabled or restarted.
|
||||
toCollapse.clear();
|
||||
return;
|
||||
}
|
||||
|
||||
var targets = toCollapse.get(response.id);
|
||||
const targets = toCollapse.get(response.id);
|
||||
if ( targets === undefined ) { return; }
|
||||
toCollapse.delete(response.id);
|
||||
if ( cachedBlockedMapHash !== response.hash ) {
|
||||
|
@ -168,10 +168,10 @@ var collapser = (function() {
|
|||
return;
|
||||
}
|
||||
|
||||
let placeholders = response.placeholders;
|
||||
const placeholders = response.placeholders;
|
||||
|
||||
for ( let target of targets ) {
|
||||
let tag = target.localName;
|
||||
for ( const target of targets ) {
|
||||
const tag = target.localName;
|
||||
let prop = src1stProps[tag];
|
||||
if ( prop === undefined ) { continue; }
|
||||
let src = target[prop];
|
||||
|
@ -181,7 +181,7 @@ var collapser = (function() {
|
|||
src = target[prop];
|
||||
if ( typeof src !== 'string' || src.length === 0 ) { continue; }
|
||||
}
|
||||
let collapsed = cachedBlockedMap.get(tagToTypeMap[tag] + ' ' + src);
|
||||
const collapsed = cachedBlockedMap.get(tagToTypeMap[tag] + ' ' + src);
|
||||
if ( collapsed === undefined ) { continue; }
|
||||
if ( collapsed ) {
|
||||
target.style.setProperty('display', 'none', 'important');
|
||||
|
@ -192,7 +192,7 @@ var collapser = (function() {
|
|||
case 'frame':
|
||||
case 'iframe':
|
||||
if ( placeholders.frame !== true ) { break; }
|
||||
let docurl =
|
||||
const docurl =
|
||||
'data:text/html,' +
|
||||
encodeURIComponent(
|
||||
placeholders.frameDocument.replace(
|
||||
|
@ -244,22 +244,23 @@ var collapser = (function() {
|
|||
}
|
||||
};
|
||||
|
||||
var send = function() {
|
||||
const send = function() {
|
||||
processTimer = undefined;
|
||||
toCollapse.set(resquestIdGenerator, toProcess);
|
||||
var msg = {
|
||||
vAPI.messaging.send('contentscript.js', {
|
||||
what: 'lookupBlockedCollapsibles',
|
||||
id: resquestIdGenerator,
|
||||
toFilter: toFilter,
|
||||
hash: cachedBlockedMapHash
|
||||
};
|
||||
vAPI.messaging.send('contentscript.js', msg, onProcessed);
|
||||
hash: cachedBlockedMapHash,
|
||||
}).then(response => {
|
||||
onProcessed(response);
|
||||
});
|
||||
toProcess = [];
|
||||
toFilter = [];
|
||||
resquestIdGenerator += 1;
|
||||
};
|
||||
|
||||
var process = function(delay) {
|
||||
const process = function(delay) {
|
||||
if ( toProcess.length === 0 ) { return; }
|
||||
if ( delay === 0 ) {
|
||||
if ( processTimer !== undefined ) {
|
||||
|
@ -271,7 +272,7 @@ var collapser = (function() {
|
|||
}
|
||||
};
|
||||
|
||||
var add = function(target) {
|
||||
const add = function(target) {
|
||||
toProcess.push(target);
|
||||
};
|
||||
|
||||
|
@ -282,20 +283,20 @@ var collapser = (function() {
|
|||
}
|
||||
};
|
||||
|
||||
var iframeSourceModified = function(mutations) {
|
||||
var i = mutations.length;
|
||||
const iframeSourceModified = function(mutations) {
|
||||
let i = mutations.length;
|
||||
while ( i-- ) {
|
||||
addIFrame(mutations[i].target, true);
|
||||
}
|
||||
process();
|
||||
};
|
||||
var iframeSourceObserver;
|
||||
var iframeSourceObserverOptions = {
|
||||
let iframeSourceObserver;
|
||||
const iframeSourceObserverOptions = {
|
||||
attributes: true,
|
||||
attributeFilter: [ 'src' ]
|
||||
attributeFilter: [ 'src' ],
|
||||
};
|
||||
|
||||
var addIFrame = function(iframe, dontObserve) {
|
||||
const addIFrame = function(iframe, dontObserve) {
|
||||
// https://github.com/gorhill/uBlock/issues/162
|
||||
// Be prepared to deal with possible change of src attribute.
|
||||
if ( dontObserve !== true ) {
|
||||
|
@ -304,25 +305,24 @@ var collapser = (function() {
|
|||
}
|
||||
iframeSourceObserver.observe(iframe, iframeSourceObserverOptions);
|
||||
}
|
||||
var src = iframe.src;
|
||||
const src = iframe.src;
|
||||
if ( src === '' || typeof src !== 'string' ) { return; }
|
||||
if ( src.startsWith('http') === false ) { return; }
|
||||
toFilter.push({ type: 'frame', url: iframe.src });
|
||||
add(iframe);
|
||||
};
|
||||
|
||||
var addIFrames = function(iframes) {
|
||||
var i = iframes.length;
|
||||
const addIFrames = function(iframes) {
|
||||
let i = iframes.length;
|
||||
while ( i-- ) {
|
||||
addIFrame(iframes[i]);
|
||||
}
|
||||
};
|
||||
|
||||
var addNodeList = function(nodeList) {
|
||||
var node,
|
||||
i = nodeList.length;
|
||||
const addNodeList = function(nodeList) {
|
||||
let i = nodeList.length;
|
||||
while ( i-- ) {
|
||||
node = nodeList[i];
|
||||
const node = nodeList[i];
|
||||
if ( node.nodeType !== 1 ) { continue; }
|
||||
if ( node.localName === 'iframe' || node.localName === 'frame' ) {
|
||||
addIFrame(node);
|
||||
|
@ -333,7 +333,7 @@ var collapser = (function() {
|
|||
}
|
||||
};
|
||||
|
||||
var onResourceFailed = function(ev) {
|
||||
const onResourceFailed = function(ev) {
|
||||
if ( tagToTypeMap[ev.target.localName] !== undefined ) {
|
||||
add(ev.target);
|
||||
process();
|
||||
|
@ -354,10 +354,10 @@ var collapser = (function() {
|
|||
});
|
||||
|
||||
return {
|
||||
addMany: addMany,
|
||||
addIFrames: addIFrames,
|
||||
addNodeList: addNodeList,
|
||||
process: process
|
||||
addMany,
|
||||
addIFrames,
|
||||
addNodeList,
|
||||
process,
|
||||
};
|
||||
})();
|
||||
|
||||
|
@ -368,16 +368,16 @@ var collapser = (function() {
|
|||
|
||||
// Added node lists will be cumulated here before being processed
|
||||
|
||||
(function() {
|
||||
(( ) => {
|
||||
// This fixes http://acid3.acidtests.org/
|
||||
if ( !document.body ) { return; }
|
||||
|
||||
var addedNodeLists = [];
|
||||
var addedNodeListsTimer;
|
||||
let addedNodeLists = [];
|
||||
let addedNodeListsTimer;
|
||||
|
||||
var treeMutationObservedHandler = function() {
|
||||
const treeMutationObservedHandler = function() {
|
||||
addedNodeListsTimer = undefined;
|
||||
var i = addedNodeLists.length;
|
||||
let i = addedNodeLists.length;
|
||||
while ( i-- ) {
|
||||
collapser.addNodeList(addedNodeLists[i]);
|
||||
}
|
||||
|
@ -387,11 +387,10 @@ var collapser = (function() {
|
|||
|
||||
// https://github.com/gorhill/uBlock/issues/205
|
||||
// Do not handle added node directly from within mutation observer.
|
||||
var treeMutationObservedHandlerAsync = function(mutations) {
|
||||
var iMutation = mutations.length,
|
||||
nodeList;
|
||||
const treeMutationObservedHandlerAsync = function(mutations) {
|
||||
let iMutation = mutations.length;
|
||||
while ( iMutation-- ) {
|
||||
nodeList = mutations[iMutation].addedNodes;
|
||||
const nodeList = mutations[iMutation].addedNodes;
|
||||
if ( nodeList.length !== 0 ) {
|
||||
addedNodeLists.push(nodeList);
|
||||
}
|
||||
|
@ -402,7 +401,7 @@ var collapser = (function() {
|
|||
};
|
||||
|
||||
// https://github.com/gorhill/httpswitchboard/issues/176
|
||||
var treeObserver = new MutationObserver(treeMutationObservedHandlerAsync);
|
||||
let treeObserver = new MutationObserver(treeMutationObservedHandlerAsync);
|
||||
treeObserver.observe(document.body, {
|
||||
childList: true,
|
||||
subtree: true
|
||||
|
@ -437,7 +436,7 @@ var collapser = (function() {
|
|||
// https://github.com/gorhill/uMatrix/issues/924
|
||||
// Report inline styles.
|
||||
|
||||
(function() {
|
||||
{
|
||||
if (
|
||||
document.querySelector('script:not([src])') !== null ||
|
||||
document.querySelector('a[href^="javascript:"]') !== null ||
|
||||
|
@ -446,7 +445,7 @@ var collapser = (function() {
|
|||
vAPI.messaging.send('contentscript.js', {
|
||||
what: 'securityPolicyViolation',
|
||||
directive: 'script-src',
|
||||
documentURI: window.location.href
|
||||
documentURI: window.location.href,
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -454,14 +453,14 @@ var collapser = (function() {
|
|||
vAPI.messaging.send('contentscript.js', {
|
||||
what: 'securityPolicyViolation',
|
||||
directive: 'style-src',
|
||||
documentURI: window.location.href
|
||||
documentURI: window.location.href,
|
||||
});
|
||||
}
|
||||
|
||||
collapser.addMany(document.querySelectorAll('img'));
|
||||
collapser.addIFrames(document.querySelectorAll('iframe, frame'));
|
||||
collapser.process();
|
||||
})();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
@ -471,23 +470,23 @@ var collapser = (function() {
|
|||
// https://github.com/gorhill/uMatrix/issues/232
|
||||
// Force `display` property, Firefox is still affected by the issue.
|
||||
|
||||
(function() {
|
||||
var noscripts = document.querySelectorAll('noscript');
|
||||
(( ) => {
|
||||
const noscripts = document.querySelectorAll('noscript');
|
||||
if ( noscripts.length === 0 ) { return; }
|
||||
|
||||
var redirectTimer,
|
||||
reMetaContent = /^\s*(\d+)\s*;\s*url=(['"]?)([^'"]+)\2/i,
|
||||
reSafeURL = /^https?:\/\//;
|
||||
const reMetaContent = /^\s*(\d+)\s*;\s*url=(['"]?)([^'"]+)\2/i;
|
||||
const reSafeURL = /^https?:\/\//;
|
||||
let redirectTimer;
|
||||
|
||||
var autoRefresh = function(root) {
|
||||
var meta = root.querySelector('meta[http-equiv="refresh"][content]');
|
||||
const autoRefresh = function(root) {
|
||||
const meta = root.querySelector('meta[http-equiv="refresh"][content]');
|
||||
if ( meta === null ) { return; }
|
||||
var match = reMetaContent.exec(meta.getAttribute('content'));
|
||||
const match = reMetaContent.exec(meta.getAttribute('content'));
|
||||
if ( match === null || match[3].trim() === '' ) { return; }
|
||||
var url = new URL(match[3], document.baseURI);
|
||||
const url = new URL(match[3], document.baseURI);
|
||||
if ( reSafeURL.test(url.href) === false ) { return; }
|
||||
redirectTimer = setTimeout(
|
||||
function() {
|
||||
( ) => {
|
||||
location.assign(url.href);
|
||||
},
|
||||
parseInt(match[1], 10) * 1000 + 1
|
||||
|
@ -495,29 +494,28 @@ var collapser = (function() {
|
|||
meta.parentNode.removeChild(meta);
|
||||
};
|
||||
|
||||
var morphNoscript = function(from) {
|
||||
const morphNoscript = function(from) {
|
||||
if ( /^application\/(?:xhtml\+)?xml/.test(document.contentType) ) {
|
||||
var to = document.createElement('span');
|
||||
const to = document.createElement('span');
|
||||
while ( from.firstChild !== null ) {
|
||||
to.appendChild(from.firstChild);
|
||||
}
|
||||
return to;
|
||||
}
|
||||
var parser = new DOMParser();
|
||||
var doc = parser.parseFromString(
|
||||
const parser = new DOMParser();
|
||||
const doc = parser.parseFromString(
|
||||
'<span>' + from.textContent + '</span>',
|
||||
'text/html'
|
||||
);
|
||||
return document.adoptNode(doc.querySelector('span'));
|
||||
};
|
||||
|
||||
var renderNoscriptTags = function(response) {
|
||||
const renderNoscriptTags = function(response) {
|
||||
if ( response !== true ) { return; }
|
||||
var parent, span;
|
||||
for ( var noscript of noscripts ) {
|
||||
parent = noscript.parentNode;
|
||||
const parent = noscript.parentNode;
|
||||
if ( parent === null ) { continue; }
|
||||
span = morphNoscript(noscript);
|
||||
const span = morphNoscript(noscript);
|
||||
span.style.setProperty('display', 'inline', 'important');
|
||||
if ( redirectTimer === undefined ) {
|
||||
autoRefresh(span);
|
||||
|
@ -526,25 +524,23 @@ var collapser = (function() {
|
|||
}
|
||||
};
|
||||
|
||||
vAPI.messaging.send(
|
||||
'contentscript.js',
|
||||
{ what: 'mustRenderNoscriptTags?' },
|
||||
renderNoscriptTags
|
||||
);
|
||||
vAPI.messaging.send('contentscript.js', {
|
||||
what: 'mustRenderNoscriptTags?',
|
||||
}).then(response => {
|
||||
renderNoscriptTags(response);
|
||||
});
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.messaging.send(
|
||||
'contentscript.js',
|
||||
{ what: 'shutdown?' },
|
||||
function(response) {
|
||||
if ( response === true ) {
|
||||
vAPI.shutdown.exec();
|
||||
}
|
||||
vAPI.messaging.send('contentscript.js', {
|
||||
what: 'shutdown?',
|
||||
}).then(response => {
|
||||
if ( response === true ) {
|
||||
vAPI.shutdown.exec();
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
|
|
@ -33,58 +33,59 @@
|
|||
// Use cached-context approach rather than object-based approach, as details
|
||||
// of the implementation do not need to be visible
|
||||
|
||||
µMatrix.cookieHunter = (function() {
|
||||
µMatrix.cookieHunter = (( ) => {
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var µm = µMatrix;
|
||||
const µm = µMatrix;
|
||||
|
||||
var recordPageCookiesQueue = new Map();
|
||||
var removeCookieQueue = new Set();
|
||||
var cookieDict = new Map();
|
||||
var cookieEntryJunkyard = [];
|
||||
var processRemoveQueuePeriod = 2 * 60 * 1000;
|
||||
var processCleanPeriod = 10 * 60 * 1000;
|
||||
var processPageRecordQueueTimer = null;
|
||||
const recordPageCookiesQueue = new Map();
|
||||
const removeCookieQueue = new Set();
|
||||
const cookieDict = new Map();
|
||||
const cookieEntryJunkyard = [];
|
||||
const processRemoveQueuePeriod = 2 * 60 * 1000;
|
||||
const processCleanPeriod = 10 * 60 * 1000;
|
||||
let processPageRecordQueueTimer = null;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var CookieEntry = function(cookie) {
|
||||
this.usedOn = new Set();
|
||||
this.init(cookie);
|
||||
};
|
||||
const CookieEntry = class {
|
||||
constructor(cookie) {
|
||||
this.usedOn = new Set();
|
||||
this.init(cookie);
|
||||
}
|
||||
|
||||
CookieEntry.prototype.init = function(cookie) {
|
||||
this.secure = cookie.secure;
|
||||
this.session = cookie.session;
|
||||
this.anySubdomain = cookie.domain.charAt(0) === '.';
|
||||
this.hostname = this.anySubdomain ? cookie.domain.slice(1) : cookie.domain;
|
||||
this.domain = µm.URI.domainFromHostname(this.hostname) || this.hostname;
|
||||
this.path = cookie.path;
|
||||
this.name = cookie.name;
|
||||
this.value = cookie.value;
|
||||
this.tstamp = Date.now();
|
||||
this.usedOn.clear();
|
||||
return this;
|
||||
};
|
||||
init(cookie) {
|
||||
this.secure = cookie.secure;
|
||||
this.session = cookie.session;
|
||||
this.anySubdomain = cookie.domain.charAt(0) === '.';
|
||||
this.hostname = this.anySubdomain ? cookie.domain.slice(1) : cookie.domain;
|
||||
this.domain = µm.URI.domainFromHostname(this.hostname) || this.hostname;
|
||||
this.path = cookie.path;
|
||||
this.name = cookie.name;
|
||||
this.value = cookie.value;
|
||||
this.tstamp = Date.now();
|
||||
this.usedOn.clear();
|
||||
return this;
|
||||
}
|
||||
|
||||
// Release anything which may consume too much memory
|
||||
|
||||
CookieEntry.prototype.dispose = function() {
|
||||
this.hostname = '';
|
||||
this.domain = '';
|
||||
this.path = '';
|
||||
this.name = '';
|
||||
this.value = '';
|
||||
this.usedOn.clear();
|
||||
return this;
|
||||
// Reset any property which indirectly consumes memory
|
||||
dispose() {
|
||||
this.hostname = '';
|
||||
this.domain = '';
|
||||
this.path = '';
|
||||
this.name = '';
|
||||
this.value = '';
|
||||
this.usedOn.clear();
|
||||
return this;
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var addCookieToDict = function(cookie) {
|
||||
var cookieKey = cookieKeyFromCookie(cookie),
|
||||
cookieEntry = cookieDict.get(cookieKey);
|
||||
const addCookieToDict = function(cookie) {
|
||||
const cookieKey = cookieKeyFromCookie(cookie);
|
||||
let cookieEntry = cookieDict.get(cookieKey);
|
||||
if ( cookieEntry === undefined ) {
|
||||
cookieEntry = cookieEntryJunkyard.pop();
|
||||
if ( cookieEntry ) {
|
||||
|
@ -99,17 +100,8 @@ var addCookieToDict = function(cookie) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var addCookiesToDict = function(cookies) {
|
||||
var i = cookies.length;
|
||||
while ( i-- ) {
|
||||
addCookieToDict(cookies[i]);
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var removeCookieFromDict = function(cookieKey) {
|
||||
var cookieEntry = cookieDict.get(cookieKey);
|
||||
const removeCookieFromDict = function(cookieKey) {
|
||||
const cookieEntry = cookieDict.get(cookieKey);
|
||||
if ( cookieEntry === undefined ) { return false; }
|
||||
cookieDict.delete(cookieKey);
|
||||
if ( cookieEntryJunkyard.length < 25 ) {
|
||||
|
@ -120,7 +112,7 @@ var removeCookieFromDict = function(cookieKey) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var cookieKeyBuilder = [
|
||||
const cookieKeyBuilder = [
|
||||
'', // 0 = scheme
|
||||
'://',
|
||||
'', // 2 = domain
|
||||
|
@ -132,8 +124,8 @@ var cookieKeyBuilder = [
|
|||
'}'
|
||||
];
|
||||
|
||||
var cookieKeyFromCookie = function(cookie) {
|
||||
var cb = cookieKeyBuilder;
|
||||
const cookieKeyFromCookie = function(cookie) {
|
||||
const cb = cookieKeyBuilder;
|
||||
cb[0] = cookie.secure ? 'https' : 'http';
|
||||
cb[2] = cookie.domain.charAt(0) === '.' ? cookie.domain.slice(1) : cookie.domain;
|
||||
cb[3] = cookie.path;
|
||||
|
@ -142,9 +134,9 @@ var cookieKeyFromCookie = function(cookie) {
|
|||
return cb.join('');
|
||||
};
|
||||
|
||||
var cookieKeyFromCookieURL = function(url, type, name) {
|
||||
var µmuri = µm.URI.set(url);
|
||||
var cb = cookieKeyBuilder;
|
||||
const cookieKeyFromCookieURL = function(url, type, name) {
|
||||
const µmuri = µm.URI.set(url);
|
||||
const cb = cookieKeyBuilder;
|
||||
cb[0] = µmuri.scheme;
|
||||
cb[2] = µmuri.hostname;
|
||||
cb[3] = µmuri.path;
|
||||
|
@ -155,7 +147,7 @@ var cookieKeyFromCookieURL = function(url, type, name) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var cookieURLFromCookieEntry = function(entry) {
|
||||
const cookieURLFromCookieEntry = function(entry) {
|
||||
if ( !entry ) {
|
||||
return '';
|
||||
}
|
||||
|
@ -164,13 +156,11 @@ var cookieURLFromCookieEntry = function(entry) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var cookieMatchDomains = function(cookieKey, allHostnamesString) {
|
||||
var cookieEntry = cookieDict.get(cookieKey);
|
||||
const cookieMatchDomains = function(cookieKey, allHostnamesString) {
|
||||
const cookieEntry = cookieDict.get(cookieKey);
|
||||
if ( cookieEntry === undefined ) { return false; }
|
||||
if ( allHostnamesString.indexOf(' ' + cookieEntry.hostname + ' ') < 0 ) {
|
||||
if ( !cookieEntry.anySubdomain ) {
|
||||
return false;
|
||||
}
|
||||
if ( !cookieEntry.anySubdomain ) { return false; }
|
||||
if ( allHostnamesString.indexOf('.' + cookieEntry.hostname + ' ') < 0 ) {
|
||||
return false;
|
||||
}
|
||||
|
@ -182,7 +172,7 @@ var cookieMatchDomains = function(cookieKey, allHostnamesString) {
|
|||
|
||||
// Look for cookies to record for a specific web page
|
||||
|
||||
var recordPageCookiesAsync = function(pageStore) {
|
||||
const recordPageCookiesAsync = function(pageStore) {
|
||||
// Store the page stats objects so that it doesn't go away
|
||||
// before we handle the job.
|
||||
// rhill 2013-10-19: pageStore could be nil, for example, this can
|
||||
|
@ -195,17 +185,17 @@ var recordPageCookiesAsync = function(pageStore) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var recordPageCookie = (function() {
|
||||
let queue = new Map();
|
||||
const recordPageCookie = (( ) => {
|
||||
const queue = new Map();
|
||||
const cookieLogEntryBuilder = [ '', '{', '', '-cookie:', '', '}' ];
|
||||
let queueTimer;
|
||||
let cookieLogEntryBuilder = [ '', '{', '', '-cookie:', '', '}' ];
|
||||
|
||||
let process = function() {
|
||||
const process = function() {
|
||||
queueTimer = undefined;
|
||||
for ( let qentry of queue ) {
|
||||
let pageStore = qentry[0];
|
||||
for ( const qentry of queue ) {
|
||||
const pageStore = qentry[0];
|
||||
if ( pageStore.tabId === '' ) { continue; }
|
||||
for ( let cookieKey of qentry[1] ) {
|
||||
for ( const cookieKey of qentry[1] ) {
|
||||
let cookieEntry = cookieDict.get(cookieKey);
|
||||
if ( cookieEntry === undefined ) { continue; }
|
||||
let blocked = µm.mustBlock(
|
||||
|
@ -221,22 +211,24 @@ var recordPageCookie = (function() {
|
|||
cookieEntry.session ? 'session' : 'persistent';
|
||||
cookieLogEntryBuilder[4] =
|
||||
encodeURIComponent(cookieEntry.name);
|
||||
let cookieURL = cookieLogEntryBuilder.join('');
|
||||
const cookieURL = cookieLogEntryBuilder.join('');
|
||||
pageStore.recordRequest('cookie', cookieURL, blocked);
|
||||
µm.logger.writeOne({
|
||||
tabId: pageStore.tabId,
|
||||
srcHn: pageStore.pageHostname,
|
||||
desHn: cookieEntry.hostname,
|
||||
desURL: cookieURL,
|
||||
type: 'cookie',
|
||||
blocked
|
||||
});
|
||||
if ( µm.logger.enabled ) {
|
||||
µm.filteringContext
|
||||
.duplicate()
|
||||
.fromTabId(pageStore.tabId)
|
||||
.setType('cookie')
|
||||
.setURL(cookieURL)
|
||||
.setFilter(blocked)
|
||||
.setRealm('network')
|
||||
.toLogger();
|
||||
}
|
||||
cookieEntry.usedOn.add(pageStore.pageHostname);
|
||||
if ( !blocked ) { continue; }
|
||||
if ( µm.userSettings.deleteCookies ) {
|
||||
removeCookieAsync(cookieKey);
|
||||
}
|
||||
µm.updateBadgeAsync(pageStore.tabId);
|
||||
µm.updateToolbarIcon(pageStore.tabId);
|
||||
}
|
||||
}
|
||||
queue.clear();
|
||||
|
@ -260,27 +252,29 @@ var recordPageCookie = (function() {
|
|||
|
||||
// Candidate for removal
|
||||
|
||||
var removeCookieAsync = function(cookieKey) {
|
||||
const removeCookieAsync = function(cookieKey) {
|
||||
removeCookieQueue.add(cookieKey);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var chromeCookieRemove = function(cookieEntry, name) {
|
||||
var url = cookieURLFromCookieEntry(cookieEntry);
|
||||
const browserCookieRemove = function(cookieEntry, name) {
|
||||
const url = cookieURLFromCookieEntry(cookieEntry);
|
||||
if ( url === '' ) { return; }
|
||||
|
||||
var sessionCookieKey = cookieKeyFromCookieURL(url, 'session', name);
|
||||
var persistCookieKey = cookieKeyFromCookieURL(url, 'persistent', name);
|
||||
var callback = function(details) {
|
||||
var success = !!details;
|
||||
var template = success ? i18nCookieDeleteSuccess : i18nCookieDeleteFailure;
|
||||
const sessionCookieKey = cookieKeyFromCookieURL(url, 'session', name);
|
||||
const persistCookieKey = cookieKeyFromCookieURL(url, 'persistent', name);
|
||||
|
||||
vAPI.cookies.remove({ url, name }).then(details => {
|
||||
const success = !!details;
|
||||
const template = success ? i18nCookieDeleteSuccess : i18nCookieDeleteFailure;
|
||||
if ( removeCookieFromDict(sessionCookieKey) ) {
|
||||
if ( success ) {
|
||||
µm.cookieRemovedCounter += 1;
|
||||
}
|
||||
µm.logger.writeOne({
|
||||
info: template.replace('{{value}}', sessionCookieKey)
|
||||
realm: 'message',
|
||||
text: template.replace('{{value}}', sessionCookieKey)
|
||||
});
|
||||
}
|
||||
if ( removeCookieFromDict(persistCookieKey) ) {
|
||||
|
@ -288,23 +282,22 @@ var chromeCookieRemove = function(cookieEntry, name) {
|
|||
µm.cookieRemovedCounter += 1;
|
||||
}
|
||||
µm.logger.writeOne({
|
||||
info: template.replace('{{value}}', persistCookieKey)
|
||||
realm: 'message',
|
||||
text: template.replace('{{value}}', persistCookieKey)
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
vAPI.cookies.remove({ url: url, name: name }, callback);
|
||||
});
|
||||
};
|
||||
|
||||
var i18nCookieDeleteSuccess = vAPI.i18n('loggerEntryCookieDeleted');
|
||||
var i18nCookieDeleteFailure = vAPI.i18n('loggerEntryDeleteCookieError');
|
||||
const i18nCookieDeleteSuccess = vAPI.i18n('loggerEntryCookieDeleted');
|
||||
const i18nCookieDeleteFailure = vAPI.i18n('loggerEntryDeleteCookieError');
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var processPageRecordQueue = function() {
|
||||
const processPageRecordQueue = function() {
|
||||
processPageRecordQueueTimer = null;
|
||||
|
||||
for ( var pageStore of recordPageCookiesQueue.values() ) {
|
||||
for ( const pageStore of recordPageCookiesQueue.values() ) {
|
||||
findAndRecordPageCookies(pageStore);
|
||||
}
|
||||
recordPageCookiesQueue.clear();
|
||||
|
@ -314,39 +307,36 @@ var processPageRecordQueue = function() {
|
|||
|
||||
// Effectively remove cookies.
|
||||
|
||||
var processRemoveQueue = function() {
|
||||
var userSettings = µm.userSettings;
|
||||
var deleteCookies = userSettings.deleteCookies;
|
||||
const processRemoveQueue = function() {
|
||||
const userSettings = µm.userSettings;
|
||||
const deleteCookies = userSettings.deleteCookies;
|
||||
|
||||
// Session cookies which timestamp is *after* tstampObsolete will
|
||||
// be left untouched
|
||||
// https://github.com/gorhill/httpswitchboard/issues/257
|
||||
var tstampObsolete = userSettings.deleteUnusedSessionCookies ?
|
||||
const tstampObsolete = userSettings.deleteUnusedSessionCookies ?
|
||||
Date.now() - userSettings.deleteUnusedSessionCookiesAfter * 60 * 1000 :
|
||||
0;
|
||||
|
||||
var srcHostnames;
|
||||
var cookieEntry;
|
||||
let srcHostnames;
|
||||
|
||||
for ( var cookieKey of removeCookieQueue ) {
|
||||
for ( const cookieKey of removeCookieQueue ) {
|
||||
// rhill 2014-05-12: Apparently this can happen. I have to
|
||||
// investigate how (A session cookie has same name as a
|
||||
// persistent cookie?)
|
||||
cookieEntry = cookieDict.get(cookieKey);
|
||||
const cookieEntry = cookieDict.get(cookieKey);
|
||||
if ( cookieEntry === undefined ) { continue; }
|
||||
|
||||
// Delete obsolete session cookies: enabled.
|
||||
if ( tstampObsolete !== 0 && cookieEntry.session ) {
|
||||
if ( cookieEntry.tstamp < tstampObsolete ) {
|
||||
chromeCookieRemove(cookieEntry, cookieEntry.name);
|
||||
browserCookieRemove(cookieEntry, cookieEntry.name);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Delete all blocked cookies: disabled.
|
||||
if ( deleteCookies === false ) {
|
||||
continue;
|
||||
}
|
||||
if ( deleteCookies === false ) { continue; }
|
||||
|
||||
// Query scopes only if we are going to use them
|
||||
if ( srcHostnames === undefined ) {
|
||||
|
@ -357,7 +347,7 @@ var processRemoveQueue = function() {
|
|||
// happen that a cookie is blacklisted on one web page while
|
||||
// being whitelisted on another (because of per-page permissions).
|
||||
if ( canRemoveCookie(cookieKey, srcHostnames) ) {
|
||||
chromeCookieRemove(cookieEntry, cookieEntry.name);
|
||||
browserCookieRemove(cookieEntry, cookieEntry.name);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -374,12 +364,12 @@ var processRemoveQueue = function() {
|
|||
// Remove only some of the cookies which are candidate for removal: who knows,
|
||||
// maybe a user has 1000s of cookies sitting in his browser...
|
||||
|
||||
var processClean = function() {
|
||||
var us = µm.userSettings;
|
||||
const processClean = function() {
|
||||
const us = µm.userSettings;
|
||||
if ( us.deleteCookies || us.deleteUnusedSessionCookies ) {
|
||||
var cookieKeys = Array.from(cookieDict.keys()),
|
||||
len = cookieKeys.length,
|
||||
step, offset, n;
|
||||
const cookieKeys = Array.from(cookieDict.keys());
|
||||
const len = cookieKeys.length;
|
||||
let step, offset, n;
|
||||
if ( len > 25 ) {
|
||||
step = len / 25;
|
||||
offset = Math.floor(Math.random() * len);
|
||||
|
@ -389,7 +379,7 @@ var processClean = function() {
|
|||
offset = 0;
|
||||
n = len;
|
||||
}
|
||||
var i = offset;
|
||||
let i = offset;
|
||||
while ( n-- ) {
|
||||
removeCookieAsync(cookieKeys[Math.floor(i % len)]);
|
||||
i += step;
|
||||
|
@ -401,8 +391,8 @@ var processClean = function() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var findAndRecordPageCookies = function(pageStore) {
|
||||
for ( var cookieKey of cookieDict.keys() ) {
|
||||
const findAndRecordPageCookies = function(pageStore) {
|
||||
for ( const cookieKey of cookieDict.keys() ) {
|
||||
if ( cookieMatchDomains(cookieKey, pageStore.allHostnamesString) ) {
|
||||
recordPageCookie(pageStore, cookieKey);
|
||||
}
|
||||
|
@ -411,14 +401,13 @@ var findAndRecordPageCookies = function(pageStore) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var canRemoveCookie = function(cookieKey, srcHostnames) {
|
||||
var cookieEntry = cookieDict.get(cookieKey);
|
||||
const canRemoveCookie = function(cookieKey, srcHostnames) {
|
||||
const cookieEntry = cookieDict.get(cookieKey);
|
||||
if ( cookieEntry === undefined ) { return false; }
|
||||
|
||||
var cookieHostname = cookieEntry.hostname;
|
||||
var srcHostname;
|
||||
const cookieHostname = cookieEntry.hostname;
|
||||
|
||||
for ( srcHostname of cookieEntry.usedOn ) {
|
||||
for ( const srcHostname of cookieEntry.usedOn ) {
|
||||
if ( µm.mustAllow(srcHostname, cookieHostname, 'cookie') ) {
|
||||
return false;
|
||||
}
|
||||
|
@ -427,21 +416,17 @@ var canRemoveCookie = function(cookieKey, srcHostnames) {
|
|||
// For example, if I am logged in into `github.com`, I do not want to be
|
||||
// logged out just because I did not yet open a `github.com` page after
|
||||
// re-starting the browser.
|
||||
srcHostname = cookieHostname;
|
||||
var pos;
|
||||
let srcHostname = cookieHostname;
|
||||
for (;;) {
|
||||
if ( srcHostnames.has(srcHostname) ) {
|
||||
if ( µm.mustAllow(srcHostname, cookieHostname, 'cookie') ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ( srcHostname === cookieEntry.domain ) {
|
||||
break;
|
||||
}
|
||||
pos = srcHostname.indexOf('.');
|
||||
if ( pos === -1 ) {
|
||||
break;
|
||||
if (
|
||||
srcHostnames.has(srcHostname) &&
|
||||
µm.mustAllow(srcHostname, cookieHostname, 'cookie')
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
if ( srcHostname === cookieEntry.domain ) { break; }
|
||||
const pos = srcHostname.indexOf('.');
|
||||
if ( pos === -1 ) { break; }
|
||||
srcHostname = srcHostname.slice(pos + 1);
|
||||
}
|
||||
return true;
|
||||
|
@ -454,27 +439,27 @@ var canRemoveCookie = function(cookieKey, srcHostnames) {
|
|||
// https://github.com/gorhill/httpswitchboard/issues/79
|
||||
// If cookie value didn't change, no need to record.
|
||||
|
||||
vAPI.cookies.onChanged = (function() {
|
||||
let queue = new Map();
|
||||
vAPI.cookies.onChanged = (( ) => {
|
||||
const queue = new Map();
|
||||
let queueTimer;
|
||||
|
||||
// Go through all pages and update if needed, as one cookie can be used
|
||||
// by many web pages, so they need to be recorded for all these pages.
|
||||
|
||||
let process = function() {
|
||||
const process = function() {
|
||||
queueTimer = undefined;
|
||||
let now = Date.now();
|
||||
let cookieKeys = [];
|
||||
for ( let qentry of queue ) {
|
||||
const now = Date.now();
|
||||
const cookieKeys = [];
|
||||
for ( const qentry of queue ) {
|
||||
if ( qentry[1] > now ) { continue; }
|
||||
if ( cookieDict.has(qentry[0]) === false ) { continue; }
|
||||
cookieKeys.push(qentry[0]);
|
||||
queue.delete(qentry[0]);
|
||||
}
|
||||
if ( cookieKeys.length !== 0 ) {
|
||||
for ( let pageStore of µm.pageStores.values() ) {
|
||||
let allHostnamesString = pageStore.allHostnamesString;
|
||||
for ( let cookieKey of cookieKeys ) {
|
||||
for ( const pageStore of µm.pageStores.values() ) {
|
||||
const allHostnamesString = pageStore.allHostnamesString;
|
||||
for ( const cookieKey of cookieKeys ) {
|
||||
if ( cookieMatchDomains(cookieKey, allHostnamesString) ) {
|
||||
recordPageCookie(pageStore, cookieKey);
|
||||
}
|
||||
|
@ -487,7 +472,7 @@ vAPI.cookies.onChanged = (function() {
|
|||
};
|
||||
|
||||
return function(cookie) {
|
||||
let cookieKey = cookieKeyFromCookie(cookie);
|
||||
const cookieKey = cookieKeyFromCookie(cookie);
|
||||
let cookieEntry = cookieDict.get(cookieKey);
|
||||
if ( cookieEntry === undefined ) {
|
||||
cookieEntry = addCookieToDict(cookie);
|
||||
|
@ -509,10 +494,11 @@ vAPI.cookies.onChanged = (function() {
|
|||
// Listen to any change in cookieland, we will update page stats accordingly.
|
||||
|
||||
vAPI.cookies.onRemoved = function(cookie) {
|
||||
var cookieKey = cookieKeyFromCookie(cookie);
|
||||
const cookieKey = cookieKeyFromCookie(cookie);
|
||||
if ( removeCookieFromDict(cookieKey) ) {
|
||||
µm.logger.writeOne({
|
||||
info: i18nCookieDeleteSuccess.replace('{{value}}', cookieKey),
|
||||
realm: 'message',
|
||||
text: i18nCookieDeleteSuccess.replace('{{value}}', cookieKey),
|
||||
prettify: 'cookie'
|
||||
});
|
||||
}
|
||||
|
@ -523,10 +509,11 @@ vAPI.cookies.onRemoved = function(cookie) {
|
|||
// Listen to any change in cookieland, we will update page stats accordingly.
|
||||
|
||||
vAPI.cookies.onAllRemoved = function() {
|
||||
for ( var cookieKey of cookieDict.keys() ) {
|
||||
for ( const cookieKey of cookieDict.keys() ) {
|
||||
if ( removeCookieFromDict(cookieKey) ) {
|
||||
µm.logger.writeOne({
|
||||
info: i18nCookieDeleteSuccess.replace('{{value}}', cookieKey),
|
||||
realm: 'message',
|
||||
text: i18nCookieDeleteSuccess.replace('{{value}}', cookieKey),
|
||||
prettify: 'cookie'
|
||||
});
|
||||
}
|
||||
|
@ -535,7 +522,11 @@ vAPI.cookies.onAllRemoved = function() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.cookies.getAll(addCookiesToDict);
|
||||
vAPI.cookies.getAll().then(cookies => {
|
||||
for ( const cookie of cookies ) {
|
||||
addCookieToDict(cookie);
|
||||
}
|
||||
});
|
||||
vAPI.cookies.start();
|
||||
|
||||
vAPI.setTimeout(processRemoveQueue, processRemoveQueuePeriod);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
µMatrix - a Chromium browser extension to black/white list requests.
|
||||
Copyright (C) 2014 Raymond Hill
|
||||
Copyright (C) 2014 Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -19,22 +19,133 @@
|
|||
Home: https://github.com/gorhill/uMatrix
|
||||
*/
|
||||
|
||||
/******************************************************************************/
|
||||
/* global CodeMirror, uDom */
|
||||
|
||||
uDom.onLoad(function() {
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Open links in the proper window
|
||||
{
|
||||
// >>>>> start of local scope
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
self.uBlockDashboard = self.uBlockDashboard || {};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
{
|
||||
let grabFocusTimer;
|
||||
let grabFocusTarget;
|
||||
|
||||
const grabFocus = function() {
|
||||
grabFocusTarget.focus();
|
||||
grabFocusTimer = grabFocusTarget = undefined;
|
||||
};
|
||||
const grabFocusAsync = function(cm) {
|
||||
grabFocusTarget = cm;
|
||||
if ( grabFocusTimer === undefined ) {
|
||||
grabFocusTimer = vAPI.setTimeout(grabFocus, 1);
|
||||
}
|
||||
};
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/3646
|
||||
const patchSelectAll = function(cm, details) {
|
||||
var vp = cm.getViewport();
|
||||
if ( details.ranges.length !== 1 ) { return; }
|
||||
var range = details.ranges[0],
|
||||
lineFrom = range.anchor.line,
|
||||
lineTo = range.head.line;
|
||||
if ( lineTo === lineFrom ) { return; }
|
||||
if ( range.head.ch !== 0 ) { lineTo += 1; }
|
||||
if ( lineFrom !== vp.from || lineTo !== vp.to ) { return; }
|
||||
details.update([
|
||||
{
|
||||
anchor: { line: 0, ch: 0 },
|
||||
head: { line: cm.lineCount(), ch: 0 }
|
||||
}
|
||||
]);
|
||||
grabFocusAsync(cm);
|
||||
};
|
||||
|
||||
let lastGutterClick = 0;
|
||||
let lastGutterLine = 0;
|
||||
|
||||
const onGutterClicked = function(cm, line) {
|
||||
const delta = Date.now() - lastGutterClick;
|
||||
if ( delta >= 500 || line !== lastGutterLine ) {
|
||||
cm.setSelection(
|
||||
{ line: line, ch: 0 },
|
||||
{ line: line + 1, ch: 0 }
|
||||
);
|
||||
lastGutterClick = Date.now();
|
||||
lastGutterLine = line;
|
||||
} else {
|
||||
cm.setSelection(
|
||||
{ line: 0, ch: 0 },
|
||||
{ line: cm.lineCount(), ch: 0 },
|
||||
{ scroll: false }
|
||||
);
|
||||
lastGutterClick = 0;
|
||||
}
|
||||
grabFocusAsync(cm);
|
||||
};
|
||||
|
||||
let resizeTimer,
|
||||
resizeObserver;
|
||||
const resize = function(cm) {
|
||||
resizeTimer = undefined;
|
||||
const child = document.querySelector('.codeMirrorFillVertical');
|
||||
if ( child === null ) { return; }
|
||||
const prect = document.documentElement.getBoundingClientRect();
|
||||
const crect = child.getBoundingClientRect();
|
||||
const cssHeight = Math.floor(Math.max(prect.bottom - crect.top, 80)) + 'px';
|
||||
if ( child.style.height === cssHeight ) { return; }
|
||||
child.style.height = cssHeight;
|
||||
// https://github.com/gorhill/uBlock/issues/3694
|
||||
// Need to call cm.refresh() when resizing occurs. However the
|
||||
// cursor position may end up outside the viewport, hence we also
|
||||
// call cm.scrollIntoView() to address this.
|
||||
// Reference: https://codemirror.net/doc/manual.html#api_sizing
|
||||
if ( cm instanceof CodeMirror ) {
|
||||
cm.refresh();
|
||||
cm.scrollIntoView(null);
|
||||
}
|
||||
};
|
||||
const resizeAsync = function(cm, delay) {
|
||||
if ( resizeTimer !== undefined ) { return; }
|
||||
resizeTimer = vAPI.setTimeout(
|
||||
resize.bind(null, cm),
|
||||
typeof delay === 'number' ? delay : 66
|
||||
);
|
||||
};
|
||||
|
||||
self.uBlockDashboard.patchCodeMirrorEditor = function(cm) {
|
||||
if ( document.querySelector('.codeMirrorFillVertical') !== null ) {
|
||||
const boundResizeAsync = resizeAsync.bind(null, cm);
|
||||
window.addEventListener('resize', boundResizeAsync);
|
||||
resizeObserver = new MutationObserver(boundResizeAsync);
|
||||
resizeObserver.observe(document.querySelector('.body'), {
|
||||
childList: true,
|
||||
subtree: true
|
||||
});
|
||||
resizeAsync(cm, 1);
|
||||
}
|
||||
if ( cm.options.inputStyle === 'contenteditable' ) {
|
||||
cm.on('beforeSelectionChange', patchSelectAll);
|
||||
}
|
||||
cm.on('gutterClick', onGutterClicked);
|
||||
};
|
||||
}
|
||||
|
||||
uDom('a').attr('target', '_blank');
|
||||
uDom('a[href*="dashboard.html"]').attr('target', '_parent');
|
||||
uDom('.whatisthis').on('click', function() {
|
||||
uDom(this).parent()
|
||||
.descendants('.whatisthis-expandable')
|
||||
.toggleClass('whatisthis-expanded');
|
||||
uDom('.whatisthis').on('click', ev => {
|
||||
ev.target
|
||||
.parentElement
|
||||
.querySelector('.whatisthis-expandable')
|
||||
.classList.toggle('whatisthis-expanded');
|
||||
});
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
});
|
||||
// <<<<< end of local scope
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue