Compare commits
No commits in common. 'master' and '0.8.0.0' have entirely different histories.
@ -1,29 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Browser (please complete the following information):**
|
||||
- OS: [e.g. MacOS, Linux]
|
||||
- Browser [e.g. Firefox]
|
||||
- Version [e.g. 80.0.1]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
@ -1,17 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@ -1 +1 @@
|
||||
dist/build/
|
||||
dist/
|
||||
|
||||
@ -1,20 +0,0 @@
|
||||
{
|
||||
"browser": true,
|
||||
"devel": true,
|
||||
"eqeqeq": true,
|
||||
"esversion": 8,
|
||||
"globals": {
|
||||
"browser": false,
|
||||
"self": false,
|
||||
"chrome": false,
|
||||
"log": false,
|
||||
"webext": false,
|
||||
"vAPI": false,
|
||||
"µMatrix": false
|
||||
},
|
||||
"laxbreak": true,
|
||||
"strict": "global",
|
||||
"undef": true,
|
||||
"unused": true,
|
||||
"validthis": true
|
||||
}
|
||||
@ -1,17 +0,0 @@
|
||||
sudo: false
|
||||
env:
|
||||
matrix:
|
||||
- BROWSER=chromium EXT=zip
|
||||
- BROWSER=firefox EXT=xpi
|
||||
script: "./tools/make-${BROWSER}.sh ${TRAVIS_TAG}"
|
||||
deploy:
|
||||
provider: releases
|
||||
prerelease: true
|
||||
api_key:
|
||||
secure: eQgPAHH6PKu2dLK+NafxwLl66t0cyW5x5NZFquOwsNMal5nsfof7lyXj2F0Q0vUpGeI21MOipBI8UGv5oXPoiXnr0fhEbEBz65C9vypK61WkDCQVGVeZVNGQwSXUm6gD2EzpPgTCIs52+7dKCDJ3stXzdimOiOTYs4WMNKKarFM=
|
||||
file: dist/build/uMatrix_${TRAVIS_TAG}.${BROWSER}.${EXT}
|
||||
skip_cleanup: true
|
||||
on:
|
||||
repo: gorhill/uMatrix
|
||||
tags: true
|
||||
all_branches: true
|
||||
@ -1,4 +0,0 @@
|
||||
### Submitting issues
|
||||
|
||||
Submit on <https://github.com/geekprojects/nuTensor/issues>.
|
||||
|
||||
@ -0,0 +1,13 @@
|
||||
7cfcd2a79bd510bd9944fb2601fcd701 assets/umatrix/hosts-files.json
|
||||
188ce926323d816ae9d7d5ebbb567862 assets/umatrix/blacklist.txt
|
||||
672d5a95be662327692ff16bde2b8452 assets/thirdparties/mirror1.malwaredomains.com/files/immortal_domains.txt
|
||||
7f0443f3dcc9abfd47cfbc95ce824ddb assets/thirdparties/mirror1.malwaredomains.com/files/README.md
|
||||
d6ceced54f3f997a5b1839ceaaa98cef assets/thirdparties/mirror1.malwaredomains.com/files/justdomains
|
||||
067470524601341099c78a847f3726aa assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat
|
||||
1da7664601ca18f3806ca0af3d9cf123 assets/thirdparties/someonewhocares.org/hosts/hosts
|
||||
70b2d63b4c632d5bc4c8ce910fc05d79 assets/thirdparties/winhelp2002.mvps.org/hosts.txt
|
||||
042419405031f0fcfac3735bf4f05e21 assets/thirdparties/www.malwaredomainlist.com/hostslist/README.md
|
||||
883ed5daa447f23a1132c8a099382054 assets/thirdparties/www.malwaredomainlist.com/hostslist/hosts.txt
|
||||
95687a05b77dea3be8bdb975fbb0f61f assets/thirdparties/hosts-file.net/ad-servers
|
||||
10dca881b4d883df0755cb06896650f2 assets/thirdparties/pgl.yoyo.org/as/serverlist
|
||||
5b8e13b618c68293430913029118781a assets/thirdparties/pgl.yoyo.org/as/README.md
|
||||
@ -0,0 +1,3 @@
|
||||
<http://www.malwaredomains.com/?page_id=1508>:
|
||||
|
||||
"This malware block lists provided here are for free for noncommercial use as part of the fight against malware."
|
||||
@ -0,0 +1,4 @@
|
||||
<http://pgl.yoyo.org/as/index.php>:
|
||||
|
||||
Site does encourage use of the list, and nowhere could I find terms and
|
||||
conditions to use the list. Assuming it can be used freely.
|
||||
@ -0,0 +1,3 @@
|
||||
<http://www.malwaredomainlist.com/>:
|
||||
|
||||
"Our list can be used for free by anyone. Feel free to use it."
|
||||
@ -0,0 +1,61 @@
|
||||
# Blacklist maintained by HTTP Switchboard
|
||||
# For those domain names which are not found in other blacklists
|
||||
|
||||
2mdn.net # "2mdn.net is a domain used by Doubleclick which is an advertising company..."
|
||||
aad73c550c.se # Related to adrotator.se which is itself blacklisted
|
||||
acxiom-online.com # Wikipedia: "Acxiom Corporation is a marketing technology and services company".
|
||||
adextent.com # "We are an advertising technology company - we build technologies that improve ads performance"
|
||||
adgear.com # "AdGear is an online advertising technologies company based in Montreal, Canada"
|
||||
adnxs.com # "Adnxs.com is run by AppNexus, a company that provides technology, data and analytics to help companies buy and sell online display advertising" (Ref.: http://www.theguardian.com/technology/2012/apr/23/adnxs-tracking-trackers-cookies-web-monitoring)
|
||||
adobetag.com # "Adobe Announces Adobe Tag Manager for the Online Marketing Suite"
|
||||
aimatch.com # "Ad Server, SAS® Intelligent Advertising for Publishers"
|
||||
analytics.edgesuite.net
|
||||
atedra.com # "Atedra est un réseau de publicité Internet francophone au Canada"
|
||||
axf8.net # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
betrad.com # "Evidon: Home | Online Marketing Intelligence, Web Analytics, Privacy" (which also publishes "Ghostery" add-on..)
|
||||
bizographics.com # "Business Audience Marketing"
|
||||
bkrtx.com
|
||||
|
||||
# "Imagine Having The Power To Turn Abandoning Visitors Into Customers"
|
||||
# "The BounceX software is tracking all the cursor movements of every visitor in real-time" (yikes!)
|
||||
bounceexchange.com
|
||||
|
||||
clicktale.com # "See absolutely everything your visitors do on your webpage ... See their every mouse move, click and keystroke"
|
||||
clicktale.net # Redirect to `clicktale.com`
|
||||
crosspixel.net # (cookies, localStorage) "leading provider of high performance audience data and information for the real-time advertising industry"
|
||||
crsspxl.com # Related to crosspixel.net
|
||||
datarating.com # see https://github.com/gorhill/httpswitchboard/issues/343
|
||||
displaymarketplace.com
|
||||
erovinmo.com # No info whatsoever from site itself can be found = naughty corner. Ironically spotted at "http://www.technologyreview.com/news/519336/bruce-schneier-nsa-spying-is-making-us-less-safe/" (also: http://www.mywot.com/en/scorecard/erovinmo.com)
|
||||
exelator.com # "domain used by eXelate Media which is an advertising company that is part of a network of sites, cookies, and other technologies used to track you" (Ref.: http://www.donottrackplus.com/trackers/exelator.com.php)
|
||||
everestjs.net # related to `everesttech.net`
|
||||
everesttech.net # "search engine marketing (SEM) solutions", pixel image on the page, looks like tracking to me. Spotted @ `http://www.homedepot.ca/` (search worked fine when blocking this hostname)
|
||||
eyereturn.com # "eyeReturn Marketing is the only end-to-end digital advertising platform in the market"
|
||||
gigya.com # "The tools you need to connect with consumers, harness rich data, and make marketing relevant"
|
||||
inmuiads.info #
|
||||
janrainbackplane.com # "Easily visualize, segment and update customer profiles to enable true personalized marketing"
|
||||
krxd.net # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
lijit.com # "We provide online advertising services, audience analytics"
|
||||
llnwd.net # http://en.wikipedia.org/wiki/Limelight_Networks
|
||||
lduhtrp.net
|
||||
mathtag.com # "domain used by MediaMath to place cookies, on behalf of its customers, on the computers of visitors to our selected customer's websites and who may view our customer's display advertisements"
|
||||
mxpnl.com #
|
||||
moatads.com # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
mookie1.com # "Specializing in online digital advertising, search marketing"
|
||||
msads.net # Sounds like ads, and no home web page...
|
||||
omtrdc.net # Redirect to Omniture
|
||||
outbrain.com # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
panoramtech.net # As seen in a screenshot at http://arstechnica.com/security/2014/01/malware-vendors-buy-chrome-extensions-to-send-adware-filled-updates/
|
||||
parsely.com # http://en.wikipedia.org/wiki/Parse.ly
|
||||
peer39.net # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
pub2srv.com # "This url is used by ad network Propeller Ads Media for ad serving"
|
||||
servebom.com # no home page, seen as 'tracking.servebom.com': good enough for this list
|
||||
|
||||
# These have "tracking" in domain name...
|
||||
tracking.tomsguide.com
|
||||
tracking.tomshardware.com
|
||||
tracking.tomshardware.co.uk
|
||||
|
||||
wunderloop.net # https://www.eff.org/deeplinks/2013/06/third-party-resources-nsa-leaks
|
||||
yceml.net
|
||||
|
||||
@ -1,192 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import jwt
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from distutils.version import StrictVersion
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uMatrix.chromium.zip from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Upload uMatrix.chromium.zip to Chrome store
|
||||
# - Publish uMatrix.chromium.zip to Chrome store
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
version = sys.argv[1]
|
||||
else:
|
||||
version = input('Github release version: ')
|
||||
version.strip()
|
||||
if not re.search('^\d+\.\d+\.\d+(b|rc)\d+$', version):
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
|
||||
cs_extension_id = '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()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uMatrix.chromium.zip
|
||||
raw_zip_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == raw_zip_filename:
|
||||
raw_zip_url = asset['url']
|
||||
if len(raw_zip_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw zip package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_zip_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_zip_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_zip_filepath))
|
||||
|
||||
#
|
||||
# Upload to Chrome store
|
||||
#
|
||||
|
||||
# Auth tokens
|
||||
cs_id = input_secret('Chrome store id', 'cs_id')
|
||||
cs_secret = input_secret('Chrome store secret', 'cs_secret')
|
||||
cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh')
|
||||
|
||||
print('Uploading to Chrome store...')
|
||||
with open(raw_zip_filepath, 'rb') as f:
|
||||
print('Generating access token...')
|
||||
auth_url = 'https://accounts.google.com/o/oauth2/token'
|
||||
auth_payload = {
|
||||
'client_id': cs_id,
|
||||
'client_secret': cs_secret,
|
||||
'grant_type': 'refresh_token',
|
||||
'refresh_token': cs_refresh,
|
||||
}
|
||||
auth_response = requests.post(auth_url, data=auth_payload)
|
||||
if auth_response.status_code != 200:
|
||||
print('Error: Auth failed -- server error {0}'.format(auth_response.status_code))
|
||||
print(auth_response.text)
|
||||
exit(1)
|
||||
response_dict = auth_response.json()
|
||||
if 'access_token' not in response_dict:
|
||||
print('Error: Auth failed -- no access token')
|
||||
exit(1)
|
||||
# Prepare access token
|
||||
cs_auth = 'Bearer ' + response_dict['access_token']
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
}
|
||||
# Upload
|
||||
print('Uploading package...')
|
||||
upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id)
|
||||
upload_response = requests.put(upload_url, headers=headers, data=f)
|
||||
f.close()
|
||||
if upload_response.status_code != 200:
|
||||
print('Upload failed -- server error {0}'.format(upload_response.status_code))
|
||||
print(upload_response.text)
|
||||
exit(1)
|
||||
response_dict = upload_response.json();
|
||||
if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS':
|
||||
print('Upload failed -- server error {0}'.format(response_dict['uploadState']))
|
||||
exit(1)
|
||||
print('Upload succeeded.')
|
||||
# Publish
|
||||
print('Publishing package...')
|
||||
publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id)
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
'Content-Length': '0',
|
||||
}
|
||||
publish_response = requests.post(publish_url, headers=headers)
|
||||
if publish_response.status_code != 200:
|
||||
print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code))
|
||||
exit(1)
|
||||
response_dict = publish_response.json();
|
||||
if 'status' not in response_dict or response_dict['status'][0] != 'OK':
|
||||
print('Publishing failed -- server error {0}'.format(response_dict['status']))
|
||||
exit(1)
|
||||
print('Publishing succeeded.')
|
||||
|
||||
print('All done.')
|
||||
@ -1,321 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import jwt
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from distutils.version import LooseVersion
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) nuTensor.firefox.xpi from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Modify raw package to make it self-hosted
|
||||
# - This is referred to as "unsigned" package
|
||||
# - Ask AMO to sign nuTensor.firefox.xpi
|
||||
# - Generate JWT to be used for communication with server
|
||||
# - Upload unsigned package to AMO
|
||||
# - Wait for a valid download URL for signed package
|
||||
# - Download signed package as nuTensor.firefox.signed.xpi
|
||||
# - This is referred to as "signed" package
|
||||
# - Upload nuTensor.firefox.signed.xpi to GitHub
|
||||
# - Remove nuTensor.firefox.xpi from GitHub
|
||||
# - Modify updates.json to point to new version
|
||||
# - Commit changes to repo
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
# Check that found project root is valid
|
||||
version_filepath = os.path.join(projdir, 'dist', 'version')
|
||||
if not os.path.isfile(version_filepath):
|
||||
print('Version file not found.')
|
||||
exit(1)
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
tag_version = sys.argv[1]
|
||||
else:
|
||||
tag_version = input('Github release version: ')
|
||||
tag_version.strip()
|
||||
match = re.search('^(\d+\.\d+\.\d+)(?:(b|rc)(\d+))?$', tag_version)
|
||||
if not match:
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
ext_version = match.group(1);
|
||||
if match.group(2):
|
||||
revision = int(match.group(3))
|
||||
if match.group(2) == 'rc':
|
||||
revision += 100;
|
||||
ext_version += '.' + str(revision)
|
||||
|
||||
extension_id = 'nuTensor@geekprojects.com'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_xpi_filename = 'nuTensor_' + tag_version + '.firefox.xpi'
|
||||
raw_xpi_filepath = os.path.join(tmpdir.name, raw_xpi_filename)
|
||||
unsigned_xpi_filepath = os.path.join(tmpdir.name, 'nuTensor.firefox.unsigned.xpi')
|
||||
signed_xpi_filename = 'nuTensor_' + tag_version + '.firefox.signed.xpi'
|
||||
signed_xpi_filepath = os.path.join(tmpdir.name, signed_xpi_filename)
|
||||
github_owner = 'geekprojects'
|
||||
github_repo = 'nuTensor'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The build directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, tag_version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for nuTensor.firefox.xpi
|
||||
raw_xpi_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == signed_xpi_filename:
|
||||
print('Error: Found existing signed self-hosted package.')
|
||||
exit(1)
|
||||
if asset['name'] == raw_xpi_filename:
|
||||
raw_xpi_url = asset['url']
|
||||
if len(raw_xpi_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw xpi package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_xpi_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_xpi_filepath))
|
||||
|
||||
#
|
||||
# Convert the package to a self-hosted one: add `update_url` to the manifest
|
||||
#
|
||||
|
||||
print('Converting raw xpi package into self-hosted xpi package...')
|
||||
with zipfile.ZipFile(raw_xpi_filepath, 'r') as zipin:
|
||||
with zipfile.ZipFile(unsigned_xpi_filepath, 'w') as zipout:
|
||||
for item in zipin.infolist():
|
||||
data = zipin.read(item.filename)
|
||||
if item.filename == 'manifest.json':
|
||||
manifest = json.loads(bytes.decode(data))
|
||||
manifest['browser_specific_settings']['gecko']['update_url'] = 'https://raw.githubusercontent.com/{0}/{1}/master/dist/firefox/updates.json'.format(github_owner, github_repo)
|
||||
data = json.dumps(manifest, indent=2, separators=(',', ': '), sort_keys=True).encode()
|
||||
zipout.writestr(item, data)
|
||||
|
||||
#
|
||||
# Ask AMO to sign the self-hosted package
|
||||
# - https://developer.mozilla.org/en-US/Add-ons/Distribution#Distributing_your_add-on
|
||||
# - https://pyjwt.readthedocs.io/en/latest/usage.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/auth.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/signing.html
|
||||
#
|
||||
|
||||
amo_api_key = ''
|
||||
amo_secret = ''
|
||||
|
||||
def get_jwt_auth():
|
||||
global amo_api_key
|
||||
if amo_api_key == '':
|
||||
amo_api_key = input_secret('AMO API key', 'amo_api_key')
|
||||
global amo_secret
|
||||
if amo_secret == '':
|
||||
amo_secret = input_secret('AMO API secret', 'amo_secret')
|
||||
amo_nonce = os.urandom(8).hex()
|
||||
jwt_payload = {
|
||||
'iss': amo_api_key,
|
||||
'jti': amo_nonce,
|
||||
'iat': datetime.datetime.utcnow(),
|
||||
'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=15),
|
||||
}
|
||||
return 'JWT ' + jwt.encode(jwt_payload, amo_secret).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, ext_version)
|
||||
print('Submitting package to be signed...')
|
||||
response = requests.put(signing_url, headers=headers, data=data, files=files)
|
||||
if response.status_code != 202:
|
||||
print('Error: Creating new version failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('Request for signing self-hosted xpi package succeeded.')
|
||||
signing_request_response = response.json();
|
||||
f.close()
|
||||
print('Waiting for AMO to process the request to sign the self-hosted xpi package...')
|
||||
# Wait for signed package to be ready
|
||||
signing_check_url = signing_request_response['url']
|
||||
while True:
|
||||
sys.stdout.write('.')
|
||||
sys.stdout.flush()
|
||||
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.')
|
||||
download_url = signing_check_response['files'][0]['download_url']
|
||||
print('Downloading signed self-hosted xpi package from {0}...'.format(download_url))
|
||||
response = requests.get(download_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Download signed package failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
with open(signed_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
f.close()
|
||||
print('Signed self-hosted xpi package downloaded.')
|
||||
break
|
||||
|
||||
#
|
||||
# Upload signed package to GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#upload-a-release-asset
|
||||
print('Uploading signed self-hosted xpi package to GitHub...')
|
||||
with open(signed_xpi_filepath, 'rb') as f:
|
||||
url = release_info['upload_url'].replace('{?name,label}', '?name=' + signed_xpi_filename)
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Content-Type': 'application/zip',
|
||||
}
|
||||
response = requests.post(url, headers=headers, data=f.read())
|
||||
if response.status_code != 201:
|
||||
print('Error: Upload signed package failed -- server error: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Remove raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#delete-a-release-asset
|
||||
print('Remove raw xpi package from GitHub...')
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.delete(raw_xpi_url, headers=headers)
|
||||
if response.status_code != 204:
|
||||
print('Error: Deletion of raw package failed -- server error: {0}'.format(response.status_code))
|
||||
|
||||
#
|
||||
# Update updates.json to point to new package -- but only if just-signed
|
||||
# package is higher version than current one.
|
||||
#
|
||||
|
||||
print('Update GitHub to point to newly signed self-hosted xpi package...')
|
||||
updates_json_filepath = os.path.join(projdir, 'dist', 'firefox', 'updates.json')
|
||||
with open(updates_json_filepath) as f:
|
||||
updates_json = json.load(f)
|
||||
f.close()
|
||||
previous_version = updates_json['addons'][extension_id]['updates'][0]['version']
|
||||
if 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(ext_version=ext_version, tag_version=tag_version)
|
||||
with open(updates_json_filepath, 'w') as f:
|
||||
f.write(updates_json)
|
||||
f.close()
|
||||
# Automatically git add/commit if needed.
|
||||
# - Stage the changed file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[1] == 'M':
|
||||
subprocess.run(['git', 'add', updates_json_filepath])
|
||||
# - Commit the staged file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[0] == 'M':
|
||||
subprocess.run(['git', 'commit', '-m', 'Make Firefox dev build auto-update', updates_json_filepath])
|
||||
subprocess.run(['git', 'push', 'origin', 'HEAD'])
|
||||
|
||||
print('All done.')
|
||||
@ -1,14 +0,0 @@
|
||||
{
|
||||
"addons": {
|
||||
"nuTensor@geekprojects.com": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.4.1.6",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "56" } },
|
||||
"update_info_url": "https://github.com/geekprojects/nuTensor/releases/tag/1.4.1b6",
|
||||
"update_link": "https://github.com/geekprojects/nuTensor/releases/download/1.4.1b6/nuTensor_1.4.1b6.firefox.signed.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,14 +0,0 @@
|
||||
{
|
||||
"addons": {
|
||||
"nuTensor@geekprojects.com": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "$ext_version",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "56" } },
|
||||
"update_info_url": "https://github.com/geekprojects/nuTensor/releases/tag/$tag_version",
|
||||
"update_link": "https://github.com/geekprojects/nuTensor/releases/download/$tag_version/nuTensor_$tag_version.firefox.signed.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1 +0,0 @@
|
||||
1.5.0.0
|
||||
@ -1,39 +0,0 @@
|
||||
## Building nuTensor
|
||||
|
||||
### Requirements
|
||||
|
||||
Tools:
|
||||
* bash
|
||||
* python 3
|
||||
|
||||
You will need both this nuTensor and the nuAssets repositories. These should both be placed in the same directory:
|
||||
```
|
||||
git clone https://github.com/geekprojects/nuAssets.git
|
||||
git clone https://github.com/geekprojects/nuTensor.git
|
||||
cd nuTensor
|
||||
```
|
||||
|
||||
### Packaging
|
||||
You can now run the scripts that package everything up.
|
||||
These are bash scripts. They have only been tested on Linux and MacOS.
|
||||
|
||||
#### For Firefox
|
||||
```
|
||||
tools/make-firefox.sh all
|
||||
```
|
||||
|
||||
#### For Chrome/Chromium (Not yet tested)
|
||||
```
|
||||
tools/make-chromium.sh all
|
||||
```
|
||||
|
||||
#### For Opera (Not yet tested)
|
||||
```
|
||||
tools/make-opera.sh
|
||||
```
|
||||
|
||||
The installation package should now be found in dist/build/
|
||||
|
||||
### Installing
|
||||
|
||||
Follow the instructions in [README.md](README.md) to install it.
|
||||
@ -0,0 +1,26 @@
|
||||
## INSTALL
|
||||
|
||||
### Manual installation
|
||||
|
||||
- Download and unzip `uMatrix.chromium-{version}.zip` ([latest release desirable](https://github.com/gorhill/uMatrix/releases)).
|
||||
- Rename the unzipped directory to `uMatrix` (if it is different)
|
||||
- When you later update manually, replace the **content** of the `uMatrix` folder with the **content** of the latest zipped version.
|
||||
- This will ensure that all the extension settings will be preserved
|
||||
- As long as the extension loads **from same folder path from which it was originally installed**, all your settings will be preserved.
|
||||
- Go to chromium/chrome *Extensions*.
|
||||
- Click to check *Developer mode*.
|
||||
- Click *Load unpacked extension...*.
|
||||
- In the file selector dialog:
|
||||
- Select the directory `uMatrix` which was created above.
|
||||
- Click *Open*.
|
||||
|
||||
The extension will now be available in your chromium/chromium-based browser.
|
||||
|
||||
Remember that you have to update manually also. For some users, updating manually is actually an advantage because:
|
||||
- You can update when **you** want
|
||||
- If ever a new version sucks, you can easily just re-installed the previous one
|
||||
|
||||
### Vendor stores
|
||||
|
||||
- Opera store (coming)
|
||||
- Chrome store (coming)
|
||||
@ -1,8 +1,8 @@
|
||||
### This is uMatrix's manifesto
|
||||
### This is µMatrix's manifesto
|
||||
|
||||
1. The **user decides** what web content is acceptable or not in their browser.
|
||||
|
||||
That is all.
|
||||
|
||||
The purpose of _uMatrix_ is to give the user the means for informed
|
||||
The purpose of _µMatrix_ is to give the user the means for informed
|
||||
consent and informed dissent.
|
||||
|
||||
@ -1,37 +0,0 @@
|
||||
## INSTALL
|
||||
|
||||
#### Chromium
|
||||
|
||||
- Download and unzip `nuTensor.chromium.zip` ([latest release desirable](https://github.com/geekprojects/nuTensor/releases)).
|
||||
- Rename the unzipped directory to `nuTensor`
|
||||
- When you later update manually, replace the **content** of the `nuTensor` folder with the **content** of the latest zipped version.
|
||||
- This will ensure that all the extension settings will be preserved
|
||||
- As long as the extension loads **from same folder path from which it was originally installed**, all your settings will be preserved.
|
||||
- Go to chromium/chrome *Extensions*.
|
||||
- Click to check *Developer mode*.
|
||||
- Click *Load unpacked extension...*.
|
||||
- In the file selector dialog:
|
||||
- Select the directory `nuTensor` which was created above.
|
||||
- Click *Open*.
|
||||
|
||||
The extension will now be available in your chromium/chromium-based browser.
|
||||
|
||||
Remember that you have to update manually also. For some users, updating manually is actually an advantage because:
|
||||
- You can update when **you** want
|
||||
- If ever a new version sucks, you can easily just re-install the previous one
|
||||
|
||||
#### Firefox
|
||||
|
||||
Although nuTensor is a restartless addon, I found that **installing** a newer version over an older one often will glitch the installation. These steps always worked fine:
|
||||
|
||||
- Download `nuTensor.firefox.xpi` ([latest release desirable](https://github.com/geekprojects/nuTensor/releases)).
|
||||
- Uninstall current nuTensor if already installed
|
||||
- Quit Firefox completely
|
||||
- Launch Firefox
|
||||
- Drag and drop the previously downloaded `nuTensor.firefox.xpi` into Firefox
|
||||
|
||||
nuTensor settings are kept intact even after you uninstall the addon.
|
||||
|
||||
On Linux, the settings are saved in a SQlite file located at `~/.mozilla/firefox/[profile name]/extension-data/nuTensor.sqlite`.
|
||||
|
||||
On Windows, the settings are saved in a SQlite file located at `%APPDATA%\Mozilla\Firefox\Profiles\[profile name]\extension-data\nuTensor.sqlite`.
|
||||
@ -0,0 +1,93 @@
|
||||
µMatrix: A point-and-click matrix-based firewall, with many privacy-enhancing tools. For advanced users.
|
||||
|
||||
µMatrix put you in full control of where your browser is allowed to connect, what type of data it is allowed to download, and what it is allowed to execute. Nobody else decides for you: You choose. You are in full control of your privacy.
|
||||
|
||||
Out of the box, µMatrix works in relax block-all/allow-exceptionally mode, meaning web sites which require 3rd-party scripts are likely to be "broken". With two clicks, µMatrix can be set to work in allow-all/block-exceptionally mode, which generally will not break web sites. See https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views for more details on this topic.
|
||||
|
||||
Regarding the myth that "Chromium-based browsers can't reliably block javascript", see: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Summary: Yes, javascript can be blocked reliably in Chromium.
|
||||
|
||||
* See ALL the remote connections, failed or attempted, depending on whether they were blocked or allowed (you decide).
|
||||
|
||||
* A single-click to whitelist/blacklist one or multiple classes of requests according to the destination and type of data (a blocked request will NEVER leave your browser).
|
||||
|
||||
* Efficient blacklisting: cookies won't leave your browser, javascript won't execute, plugins won't play, tracking pixels won't download, etc.
|
||||
|
||||
* You do not have to solely rely on just one particular curated blacklist (arguably with many missing entries) outside which nothing else can be blocked: You are in full control.
|
||||
|
||||
* Ease of use: µMatrix lets you easily whitelist/blacklist net requests which originate from within a web page according to a point-and-click matrix:
|
||||
|
||||
- domain names (left column)
|
||||
* from very specific
|
||||
* to very generic
|
||||
|
||||
- type of requests (top row)
|
||||
* cookies
|
||||
* CSS-related resources (stylesheets and web fonts)
|
||||
* images
|
||||
* plugins
|
||||
* scripts
|
||||
* XHR (requests made by scripts)
|
||||
* frames
|
||||
* others
|
||||
|
||||
You can blacklist/whitelist a single cell, an entire row, a group of rows, an entire column, or the whole matrix with just one click.
|
||||
|
||||
µMatrix's filtering engine uses precedence logic to evaluate what is blocked/allowed according to which cells are blacklisted/whitelisted. For example, this allows you to whitelist a whole page with one click, without having to repeatedly whitelist whatever new data appear on the page.
|
||||
|
||||
All rules are scoped. For example, you can block `facebook.com` and `facebook.net` everywhere except when visiting a page on `www.facebook.com`. This way Facebook won't be able to build a profile of your browsing habits.
|
||||
|
||||
The goal of this extension is to make the allowing or blocking of web sites, wholly or partly, as straightforward as possible, so as to encourage users to care about their privacy.
|
||||
|
||||
The extension comes with 3rd-party hosts files totaling over 58,000 distinct hostnames (lists can be selectively disabled/enabled according to your choice).
|
||||
|
||||
Ultimately, you can choose however you browse the net:
|
||||
|
||||
* Blacklist all by default, and whitelist as needed (default mode).
|
||||
|
||||
* Whitelist all by default, and blacklist as needed.
|
||||
|
||||
Either way, you still benefit from the preset blacklists so that at least you get basic protection from trackers, malware sites, etc. Or you can disable all of these preset blacklists.
|
||||
|
||||
Your choice.
|
||||
|
||||
Randomly assembled documentation: https://github.com/gorhill/uMatrix/wiki
|
||||
|
||||
=====
|
||||
|
||||
FEEDBACK:
|
||||
|
||||
For any question/issue you might have, use the "Send Feedback" button on the right, in order for me to be able to answer readily. I can't answer directly to reviews, but I will be more than happy to answer you directly in the feedback section.
|
||||
|
||||
=====
|
||||
|
||||
BUGS, ISSUES, SUGEGSTIONS:
|
||||
|
||||
https://github.com/gorhill/uMatrix/issues
|
||||
|
||||
You are very welcomed to contribute your views on open issues and suggestions, various arguments for/against help me in deciding what is needed to improve the extension.
|
||||
|
||||
Ease of use is the primary goal. I've seen users give up on Firefox's NoScript because it gets too much in the way according to them, so rather than blame these users for poor security habits, I prefer to blame developers and this project is a tentative to address the issues which cause some users to give up on basic security.
|
||||
|
||||
This extension is also useful to understand what the web page in your browser is doing, often without your knowledge. You have full ability to see and decide with whom a web page communicates, and to restrict these communications to specific classes of objects within the web page.
|
||||
|
||||
The number which appear in the extension icon correspond to the total number of distinct requests attempted (successfully or not depending on whether these were allowed or blocked) by the web page.
|
||||
|
||||
Simply click on the appropriate entry in the matrix in order to white-, black- or graylist a component. Graylisting means the blocked or allowed status will be inherited from another cell with higher precedence in the matrix.
|
||||
|
||||
Red square = effectively blacklisted, i.e. requests are prevented from reaching their intended destination:
|
||||
* Dark red square: the domain name and/or type of request is specifically blacklisted.
|
||||
* Faded red square: the blacklist status is inherited because the entry is graylisted.
|
||||
|
||||
Green square = effectively whitelisted, i.e. requests are allowed to reach their intended destination:
|
||||
* Dark green square: the domain name and/or type of request is specifically whitelisted.
|
||||
* Faded green square: the whitelist status is inherited because the entry is graylisted.
|
||||
|
||||
The top-left cell in the matrix, the "all" cell, represents the default global setting, which allows you to choose whether allowing or blocking everything is the default behavior. Some prefer to allow everything while blocking exceptionally. My personal preference is of course the reverse, blocking everything and allowing exceptionally.
|
||||
|
||||
This extension is also useful if you wish to speed up your browsing, by globally blocking all requests for images as an example.
|
||||
|
||||
=====
|
||||
|
||||
SOURCE CODE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
|
||||
CHANGE LOG: https://github.com/gorhill/uMatrix/releases
|
||||
@ -0,0 +1,93 @@
|
||||
µMatrix: A point-and-click matrix-based firewall, with many privacy-enhancing tools. For advanced users.
|
||||
|
||||
µMatrix put you in full control of where your browser is allowed to connect, what type of data it is allowed to download, and what it is allowed to execute. Nobody else decides for you: You choose. You are in full control of your privacy.
|
||||
|
||||
Out of the box, µMatrix works in relax block-all/allow-exceptionally mode, meaning web sites which require 3rd-party scripts are likely to be "broken". With two clicks, µMatrix can be set to work in allow-all/block-exceptionally mode, which generally will not break web sites. See https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views for more details on this topic.
|
||||
|
||||
Regarding the myth that "Chromium-based browsers can't reliably block javascript", see: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Summary: Yes, javascript can be blocked reliably in Chromium.
|
||||
|
||||
* See ALL the remote connections, failed or attempted, depending on whether they were blocked or allowed (you decide).
|
||||
|
||||
* A single-click to whitelist/blacklist one or multiple classes of requests according to the destination and type of data (a blocked request will NEVER leave your browser).
|
||||
|
||||
* Efficient blacklisting: cookies won't leave your browser, javascript won't execute, plugins won't play, tracking pixels won't download, etc.
|
||||
|
||||
* You do not have to solely rely on just one particular curated blacklist (arguably with many missing entries) outside which nothing else can be blocked: You are in full control.
|
||||
|
||||
* Ease of use: µMatrix lets you easily whitelist/blacklist net requests which originate from within a web page according to a point-and-click matrix:
|
||||
|
||||
- domain names (left column)
|
||||
* from very specific
|
||||
* to very generic
|
||||
|
||||
- type of requests (top row)
|
||||
* cookies
|
||||
* CSS-related resources (stylesheets and web fonts)
|
||||
* images
|
||||
* plugins
|
||||
* scripts
|
||||
* XHR (requests made by scripts)
|
||||
* frames
|
||||
* others
|
||||
|
||||
You can blacklist/whitelist a single cell, an entire row, a group of rows, an entire column, or the whole matrix with just one click.
|
||||
|
||||
µMatrix's filtering engine uses precedence logic to evaluate what is blocked/allowed according to which cells are blacklisted/whitelisted. For example, this allows you to whitelist a whole page with one click, without having to repeatedly whitelist whatever new data appear on the page.
|
||||
|
||||
All rules are scoped. For example, you can block `facebook.com` and `facebook.net` everywhere except when visiting a page on `www.facebook.com`. This way Facebook won't be able to build a profile of your browsing habits.
|
||||
|
||||
The goal of this extension is to make the allowing or blocking of web sites, wholly or partly, as straightforward as possible, so as to encourage users to care about their privacy.
|
||||
|
||||
The extension comes with 3rd-party hosts files totaling over 58,000 distinct hostnames (lists can be selectively disabled/enabled according to your choice).
|
||||
|
||||
Ultimately, you can choose however you browse the net:
|
||||
|
||||
* Blacklist all by default, and whitelist as needed (default mode).
|
||||
|
||||
* Whitelist all by default, and blacklist as needed.
|
||||
|
||||
Either way, you still benefit from the preset blacklists so that at least you get basic protection from trackers, malware sites, etc. Or you can disable all of these preset blacklists.
|
||||
|
||||
Your choice.
|
||||
|
||||
Randomly assembled documentation: https://github.com/gorhill/uMatrix/wiki
|
||||
|
||||
=====
|
||||
|
||||
FEEDBACK:
|
||||
|
||||
For any question/issue you might have, use the "Send Feedback" button on the right, in order for me to be able to answer readily. I can't answer directly to reviews, but I will be more than happy to answer you directly in the feedback section.
|
||||
|
||||
=====
|
||||
|
||||
BUGS, ISSUES, SUGEGSTIONS:
|
||||
|
||||
https://github.com/gorhill/uMatrix/issues
|
||||
|
||||
You are very welcomed to contribute your views on open issues and suggestions, various arguments for/against help me in deciding what is needed to improve the extension.
|
||||
|
||||
Ease of use is the primary goal. I've seen users give up on Firefox's NoScript because it gets too much in the way according to them, so rather than blame these users for poor security habits, I prefer to blame developers and this project is a tentative to address the issues which cause some users to give up on basic security.
|
||||
|
||||
This extension is also useful to understand what the web page in your browser is doing, often without your knowledge. You have full ability to see and decide with whom a web page communicates, and to restrict these communications to specific classes of objects within the web page.
|
||||
|
||||
The number which appear in the extension icon correspond to the total number of distinct requests attempted (successfully or not depending on whether these were allowed or blocked) by the web page.
|
||||
|
||||
Simply click on the appropriate entry in the matrix in order to white-, black- or graylist a component. Graylisting means the blocked or allowed status will be inherited from another cell with higher precedence in the matrix.
|
||||
|
||||
Red square = effectively blacklisted, i.e. requests are prevented from reaching their intended destination:
|
||||
* Dark red square: the domain name and/or type of request is specifically blacklisted.
|
||||
* Faded red square: the blacklist status is inherited because the entry is graylisted.
|
||||
|
||||
Green square = effectively whitelisted, i.e. requests are allowed to reach their intended destination:
|
||||
* Dark green square: the domain name and/or type of request is specifically whitelisted.
|
||||
* Faded green square: the whitelist status is inherited because the entry is graylisted.
|
||||
|
||||
The top-left cell in the matrix, the "all" cell, represents the default global setting, which allows you to choose whether allowing or blocking everything is the default behavior. Some prefer to allow everything while blocking exceptionally. My personal preference is of course the reverse, blocking everything and allowing exceptionally.
|
||||
|
||||
This extension is also useful if you wish to speed up your browsing, by globally blocking all requests for images as an example.
|
||||
|
||||
=====
|
||||
|
||||
SOURCE CODE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
|
||||
CHANGE LOG: https://github.com/gorhill/uMatrix/releases
|
||||
@ -1,93 +1,93 @@
|
||||
µMatrix: Firewall tunjuk-dan-klik berbasis matriks, dengan banyak perkakas privasi yang ditingkatkan. Untuk pengguna tingkat lanjut.
|
||||
µMatrix: A point-and-click matrix-based firewall, with many privacy-enhancing tools. For advanced users.
|
||||
|
||||
µMatrix memberi anda kontrol penuh ke mana peramban anda diizinkan terhubung, tipe data apa yang diizinkan untuk diunduh, dan apa yang diizinkan untuk dieksekusi. Tidak seorangpun memutuskan untuk anda: Anda yang memilih. Anda mengontrol penuh privasi anda sendiri.
|
||||
µMatrix put you in full control of where your browser is allowed to connect, what type of data it is allowed to download, and what it is allowed to execute. Nobody else decides for you: You choose. You are in full control of your privacy.
|
||||
|
||||
Secara bawaan, µMatrix bekerja dalam mode blokir-semua/izinkan-sebagian yang agak ketat, artinya situs web yang membutuhkan skrip pihak ketiga besar kemungkinan menjadi "rusak". Dengan dua klik, µMatrix dapat diatur untuk bekerja dalam mode izinkan-semua/blokir-sebagian, yang pada umumnya tidak akan membuat rusak situs web. Lihat https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views untuk penjelasan lebih rinci perihal topik ini.
|
||||
Out of the box, µMatrix works in relax block-all/allow-exceptionally mode, meaning web sites which require 3rd-party scripts are likely to be "broken". With two clicks, µMatrix can be set to work in allow-all/block-exceptionally mode, which generally will not break web sites. See https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views for more details on this topic.
|
||||
|
||||
Mengenai mitos "Peramban barbasis Chromium tidak dapat dengan handal memblokir JavaScript", lihat: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Ringkasnya: Ya, JavaScript dapat diblokir dengan handal di Chromium.
|
||||
Regarding the myth that "Chromium-based browsers can't reliably block javascript", see: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Summary: Yes, javascript can be blocked reliably in Chromium.
|
||||
|
||||
* Lihat SEMUA koneksi asing, yang gagal atau mencoba, tergantung dari apakah mereka diblokir atau diizinkan (anda putuskan).
|
||||
* See ALL the remote connections, failed or attempted, depending on whether they were blocked or allowed (you decide).
|
||||
|
||||
* Sekali klik untuk mendaftar-putih/hitamkan satu atau banyak kelas permintaan menurut destinasi dan jenis data (permintaan yang diblokir TIDAK AKAN PERNAH meninggalkan peramban anda).
|
||||
* A single-click to whitelist/blacklist one or multiple classes of requests according to the destination and type of data (a blocked request will NEVER leave your browser).
|
||||
|
||||
* Pendaftar-hitaman yang efisien: kuki tidak akan meninggalkan peramban anda, JavaScript tidak akan dieksekusi, plugin tidak akan berjalan, piksel pelacakan tidak akan diunduh, dll.
|
||||
* Efficient blacklisting: cookies won't leave your browser, javascript won't execute, plugins won't play, tracking pixels won't download, etc.
|
||||
|
||||
* Anda tidak harus bergantung hanya pada daftar-hitam tertentu saja (dengan alasan banyak entri yang hilang) selain tidak ada lagi yang dapat diblokir: Anda dalam kontrol penuh.
|
||||
* You do not have to solely rely on just one particular curated blacklist (arguably with many missing entries) outside which nothing else can be blocked: You are in full control.
|
||||
|
||||
* Mudah dalam penggunaan: µMatrix memungkinkan anda dengan mudah mendaftar-putih/hitamkan permintaan jaringan yang berasal dari halaman web menurut matriks tunjuk-dan-klik:
|
||||
* Ease of use: µMatrix lets you easily whitelist/blacklist net requests which originate from within a web page according to a point-and-click matrix:
|
||||
|
||||
- nama ranah (kolom kiri)
|
||||
* dari sangat spesifik
|
||||
* ke sangat umum
|
||||
- domain names (left column)
|
||||
* from very specific
|
||||
* to very generic
|
||||
|
||||
- jenis permintaan (baris atas)
|
||||
* kuki
|
||||
* sumber daya terkait CSS (stylesheet dan fon web)
|
||||
* gambar
|
||||
* plugin
|
||||
* skrip
|
||||
* XHR (permintaan yang dibuat oleh skrip)
|
||||
* frame
|
||||
* lainnya
|
||||
- type of requests (top row)
|
||||
* cookies
|
||||
* CSS-related resources (stylesheets and web fonts)
|
||||
* images
|
||||
* plugins
|
||||
* scripts
|
||||
* XHR (requests made by scripts)
|
||||
* frames
|
||||
* others
|
||||
|
||||
Anda dapat mendaftar-hitam/putihkan satu sel, seluruh baris, satu grup dari baris, seluruh kolom, atau seluruh matriks hanya dengan satu klik.
|
||||
You can blacklist/whitelist a single cell, an entire row, a group of rows, an entire column, or the whole matrix with just one click.
|
||||
|
||||
Mesin penyaringan µMatrix menggunakan logika tinggi untuk mengevaluasi apa yang diblokir/diizinkan sesuai dengan sel mana yang di daftar-hitam/putih. Sebagai contoh, hal ini memungkinkan anda mendaftar-putihkan seluruh halaman dengan satu klik, tanpa perlu berulang-ulang mendaftar-putihkan setiap data baru yang muncul di halaman.
|
||||
µMatrix's filtering engine uses precedence logic to evaluate what is blocked/allowed according to which cells are blacklisted/whitelisted. For example, this allows you to whitelist a whole page with one click, without having to repeatedly whitelist whatever new data appear on the page.
|
||||
|
||||
Mencakup semua aturan. Sebagai contoh, anda dapat memblokir `facebook.com` dan `facebook.net` di manapun kecuali ketika mengunjungi sebuah halaman di `www.facebook.com`. Dengan cara ini Facebook tidak akan bisa membangun profil mengenai kebiasaan penjelajahan anda.
|
||||
All rules are scoped. For example, you can block `facebook.com` and `facebook.net` everywhere except when visiting a page on `www.facebook.com`. This way Facebook won't be able to build a profile of your browsing habits.
|
||||
|
||||
Tujuan dari ekstensi ini adalah untuk mengizinkan atau memblokir situs web, sepenuhnya atau sebagian, sesederhana mungkin, sehingga mendorong para pengguna untuk lebih peduli tentang privasi mereka.
|
||||
The goal of this extension is to make the allowing or blocking of web sites, wholly or partly, as straightforward as possible, so as to encourage users to care about their privacy.
|
||||
|
||||
Ekstensi ini hadir bersama berkas hos pihak ketiga dengan total lebih dari 58,000 nama hos yang berbeda (daftar dapat secara selektif dinonaktif/aktifkan sesuai dengan pilihan anda).
|
||||
The extension comes with 3rd-party hosts files totaling over 58,000 distinct hostnames (lists can be selectively disabled/enabled according to your choice).
|
||||
|
||||
Pada akhirnya, Anda dapat memilih bagaimana anda ingin menjelajah internet:
|
||||
Ultimately, you can choose however you browse the net:
|
||||
|
||||
* Daftar-hitamkan semua secara baku, dan daftar-putihkan sesuai kebutuhan (mode bawaan).
|
||||
* Blacklist all by default, and whitelist as needed (default mode).
|
||||
|
||||
* Daftar-putihkan semua secara baku, dan daftar-hitamkan sesuai kebutuhan.
|
||||
* Whitelist all by default, and blacklist as needed.
|
||||
|
||||
Dengan cara manapun, anda masih diuntungkan dari aturan bawaan daftar-hitam sehingga paling tidak anda tetap mendapatkan perlindungan mendasar dari pelacak, situs malware, dll. Atau anda dapat menonaktifkan semua aturan bawaan daftar-hitam ini.
|
||||
Either way, you still benefit from the preset blacklists so that at least you get basic protection from trackers, malware sites, etc. Or you can disable all of these preset blacklists.
|
||||
|
||||
Terserah anda.
|
||||
Your choice.
|
||||
|
||||
Himpunan acak dokumentasi: https://github.com/gorhill/uMatrix/wiki
|
||||
Randomly assembled documentation: https://github.com/gorhill/uMatrix/wiki
|
||||
|
||||
=====
|
||||
|
||||
UMPAN BALIK:
|
||||
FEEDBACK:
|
||||
|
||||
Jika ada pertanyaan/masalah yang mungkin ingin anda sampaikan, gunakan tombol "Kirim Umpan Balik" di sebelah kanan, agar saya dapat menjawab dengan mudah. Saya tidak dapat menjawab secara langsung untuk ulasan, tapi saya akan lebih dari senang untuk menjawab anda secara langsung di bagian umpan balik.
|
||||
For any question/issue you might have, use the "Send Feedback" button on the right, in order for me to be able to answer readily. I can't answer directly to reviews, but I will be more than happy to answer you directly in the feedback section.
|
||||
|
||||
=====
|
||||
|
||||
KUTU, MASALAH, SARAN:
|
||||
BUGS, ISSUES, SUGEGSTIONS:
|
||||
|
||||
https://github.com/gorhill/uMatrix/issues
|
||||
|
||||
Anda sangat diharapkan untuk berkontribusi mengenai pandangan anda mengenai masalah yang ada dan saran/masukan, argumen apapun baik membangun/kontra membantu saya memutuskan apa yang diperlukan untuk memperbaiki ekstensi ini.
|
||||
You are very welcomed to contribute your views on open issues and suggestions, various arguments for/against help me in deciding what is needed to improve the extension.
|
||||
|
||||
Mudah dalam penggunaan adalah tujuan utama. Saya melihat banyak pengguna menyerah menggunakan NoScript pada Firefox karena menurut mereka semakin banyak gangguan yang terjadi, jadi dari pada menyalahkan para pengguna atas kebiasaan keamanan yang buruk, saya memilih menyalahkan pengembang dan proyek ini adalah eksperimen untuk mengatasi masalah yang menyebabkan beberapa pengguna menyerah pada keamanan dasar.
|
||||
Ease of use is the primary goal. I've seen users give up on Firefox's NoScript because it gets too much in the way according to them, so rather than blame these users for poor security habits, I prefer to blame developers and this project is a tentative to address the issues which cause some users to give up on basic security.
|
||||
|
||||
Ekstensi ini juga bermanfaat untuk memahami apa yang halaman web lakukan di dalam peramban anda, yang seringkali tanpa sepengetahuan anda. Anda memiliki kewenangan penuh untuk melihat dan memutuskan dengan siapa sebuah halaman web berkomunikasi, dan membatasi komunikasi tersebut hanya untuk kelas obyek spesifik di dalam halaman web.
|
||||
This extension is also useful to understand what the web page in your browser is doing, often without your knowledge. You have full ability to see and decide with whom a web page communicates, and to restrict these communications to specific classes of objects within the web page.
|
||||
|
||||
Angka yang muncul pada ikon ekstensi berhubungan dengan jumlah total percobaan permintaan yang berbeda (sukses atau tidak tergantung pada apakah permintaan tersebut diizinkan atau diblokir) oleh halaman web.
|
||||
The number which appear in the extension icon correspond to the total number of distinct requests attempted (successfully or not depending on whether these were allowed or blocked) by the web page.
|
||||
|
||||
Cukup klik pada entri yang sesuai dalam matriks untuk memutihkan, menghitamkan, mengabu-abukan sebuah komponen. Mendaftar-abukan berarti status diblokir atau diizinkan akan diturunkan dari sel lainnya dengan urutan prioritas yang lebih tinggi dalam matriks.
|
||||
Simply click on the appropriate entry in the matrix in order to white-, black- or graylist a component. Graylisting means the blocked or allowed status will be inherited from another cell with higher precedence in the matrix.
|
||||
|
||||
Persegi merah = didaftar-hitamkan secara efektif, contoh. permintaan dicegah untuk mencapai destinasi yang dinginkan:
|
||||
* Persegi merah gelap: nama ranah dan/atau jenis permintaan secara spesifik didaftar-hitamkan.
|
||||
* Persegi merah pudar: status daftar-hitam adalah turunan karena entri berada di daftar abu-abu.
|
||||
Red square = effectively blacklisted, i.e. requests are prevented from reaching their intended destination:
|
||||
* Dark red square: the domain name and/or type of request is specifically blacklisted.
|
||||
* Faded red square: the blacklist status is inherited because the entry is graylisted.
|
||||
|
||||
Persegi hijau = didaftar-putihkan secara efektif, contoh. permintaan diizinkan untuk mencapai destinasi yang diinginkan:
|
||||
* Persegi hijau gelap: nama ranah dan/atau jenis permintaan secara spesifik didaftar-putihkan.
|
||||
* Persegi hijau pudar: status daftar-putih adalah turunan karena entri berada di daftar abu-abu.
|
||||
Green square = effectively whitelisted, i.e. requests are allowed to reach their intended destination:
|
||||
* Dark green square: the domain name and/or type of request is specifically whitelisted.
|
||||
* Faded green square: the whitelist status is inherited because the entry is graylisted.
|
||||
|
||||
Sel kiri atas dalam matriks, sel "semua", mewakili pengaturan baku secara global, yang memungkinkan anda memilih apakah mengizinkan atau memblokir semuanya sebagai perilaku/tindakan baku. Beberapa memilih mengizinkan semuanya sambil memblokir sebagian. Preferensi personal saya adalah tentu saja kebalikannya, memblokir semuanya dan mengizinkan sebagian.
|
||||
The top-left cell in the matrix, the "all" cell, represents the default global setting, which allows you to choose whether allowing or blocking everything is the default behavior. Some prefer to allow everything while blocking exceptionally. My personal preference is of course the reverse, blocking everything and allowing exceptionally.
|
||||
|
||||
Ekstensi ini juga berguna jika anda ingin mempercepat penjelajahan anda, sebagai contoh dengan secara global memblokir semua permintaan untuk gambar.
|
||||
This extension is also useful if you wish to speed up your browsing, by globally blocking all requests for images as an example.
|
||||
|
||||
=====
|
||||
|
||||
KODE SUMBER: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
SOURCE CODE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
|
||||
CATATAN PERUBAHAN: https://github.com/gorhill/uMatrix/releases
|
||||
CHANGE LOG: https://github.com/gorhill/uMatrix/releases
|
||||
|
||||
@ -1,93 +1,93 @@
|
||||
uMatrix: un firewall a matrice del tipo punta e clicca, con molte funzionalità a salvaguardia della privacy. Per utenti avanzati.
|
||||
µMatrix: A point-and-click matrix-based firewall, with many privacy-enhancing tools. For advanced users.
|
||||
|
||||
uMatrix permette il pieno controllo delle connessioni del browser, del tipo di dati che può scaricare e di cosa può eseguire. Nessun'altro decide per te: Tu scegli. Solo tu hai il controllo completo della tua privacy.
|
||||
µMatrix put you in full control of where your browser is allowed to connect, what type of data it is allowed to download, and what it is allowed to execute. Nobody else decides for you: You choose. You are in full control of your privacy.
|
||||
|
||||
In configurazione standard, uMatrix funziona in modalità blocca-tutto/permetti-eccezionalmente, vale a dire che i siti che richiedono script di terze parti, facilmente risulteranno incompleti o con errori. Con solo un paio di click, uMatrix può essere configurato in modalità permetti-tutto/blocca-eccezionalmente, che generalmente non causa problemi nel caricamento dei siti. Vedere https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views per ulteriori dettagli.
|
||||
Out of the box, µMatrix works in relax block-all/allow-exceptionally mode, meaning web sites which require 3rd-party scripts are likely to be "broken". With two clicks, µMatrix can be set to work in allow-all/block-exceptionally mode, which generally will not break web sites. See https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views for more details on this topic.
|
||||
|
||||
Riguardo il mito che i browser basati su Chromium non possano bloccare efficacemente javascript, vedere: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. In sostanza: Si, javascript può essere efficacemente bloccato in Chromium.
|
||||
Regarding the myth that "Chromium-based browsers can't reliably block javascript", see: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Summary: Yes, javascript can be blocked reliably in Chromium.
|
||||
|
||||
*Vedi TUTTE le connessioni remote, se fallite o tentate, dipendendo se siano bloccate o permesse (tu decidi).
|
||||
* See ALL the remote connections, failed or attempted, depending on whether they were blocked or allowed (you decide).
|
||||
|
||||
* Un singolo click per permettere/bloccare una o più categorie di richieste, in funzione della destinazione e del tipo di dati (una richiesta bloccata non lascerà MAI il tuo browser).
|
||||
* A single-click to whitelist/blacklist one or multiple classes of requests according to the destination and type of data (a blocked request will NEVER leave your browser).
|
||||
|
||||
* Controllo efficiente: i cookies non lasceranno il tuo browser, javascript non verrà eseguito, i plug-in non verranno attivati, pixel di tracking non saranno scaricati, ecc.
|
||||
* Efficient blacklisting: cookies won't leave your browser, javascript won't execute, plugins won't play, tracking pixels won't download, etc.
|
||||
|
||||
* Tu non devi unicamente affidarti ad una singola lista nera (presumibilmente con molte voci mancanti) al di fuori della quale niente altro può essere bloccato: Tu hai il pieno controllo.
|
||||
* You do not have to solely rely on just one particular curated blacklist (arguably with many missing entries) outside which nothing else can be blocked: You are in full control.
|
||||
|
||||
* Semplicità d'uso: uMatrix consente di permettere/bloccare le richieste originate da una pagina web secondo uno schema a matrice, punta e clicca:
|
||||
* Ease of use: µMatrix lets you easily whitelist/blacklist net requests which originate from within a web page according to a point-and-click matrix:
|
||||
|
||||
- nome del dominio (colonna di sinistra)
|
||||
* dal molto specifico
|
||||
* al molto generico
|
||||
- domain names (left column)
|
||||
* from very specific
|
||||
* to very generic
|
||||
|
||||
- tipo di richiesta (riga in alto)
|
||||
- type of requests (top row)
|
||||
* cookies
|
||||
* risorse tipo CSS (stili e caratteri)
|
||||
* immagini
|
||||
* CSS-related resources (stylesheets and web fonts)
|
||||
* images
|
||||
* plugins
|
||||
* scripts
|
||||
* XHR (richieste fatte dagli script)
|
||||
* riquadri
|
||||
* altro
|
||||
* XHR (requests made by scripts)
|
||||
* frames
|
||||
* others
|
||||
|
||||
Tu puoi permettere/bloccare una singola cella, una intera riga, un gruppo di righe, una intera colonna o l'intera matrice, con solo un click.
|
||||
You can blacklist/whitelist a single cell, an entire row, a group of rows, an entire column, or the whole matrix with just one click.
|
||||
|
||||
Il sistema di filtri di uMatrix utilizza una logica di priorità per valutare cosa viene bloccato/permesso, secondo le celle che sono in black o white list. Per esempio, questo permette di mettere in white list una pagina intera con un click, senza alcun bisogno di consentire qualunque nuovo elemento che appare sulla pagina.
|
||||
µMatrix's filtering engine uses precedence logic to evaluate what is blocked/allowed according to which cells are blacklisted/whitelisted. For example, this allows you to whitelist a whole page with one click, without having to repeatedly whitelist whatever new data appear on the page.
|
||||
|
||||
Tutte le regole hanno un loro specifico campo di applicazione. Per esempio, si può bloccare 'facebook.com' e 'facebook.net' ovunque eccetto quando si visita una pagina su 'www.facebook.com'. in questo modo Facebook non è in grado di costruire un profilo delle abitudini di navigazione.
|
||||
All rules are scoped. For example, you can block `facebook.com` and `facebook.net` everywhere except when visiting a page on `www.facebook.com`. This way Facebook won't be able to build a profile of your browsing habits.
|
||||
|
||||
Lo scopo di questa estensione è rendere il più immediato possibile il blocco o meno, parziale o totale di siti web, incoraggiando gli utenti a tutelare la propria privacy.
|
||||
The goal of this extension is to make the allowing or blocking of web sites, wholly or partly, as straightforward as possible, so as to encourage users to care about their privacy.
|
||||
|
||||
L'estensione contiene host file di terze parti, per un totale di oltre 58.000 distinti hostname (le liste possono essere disabilitate/abilitate secondo le proprie preferenze).
|
||||
The extension comes with 3rd-party hosts files totaling over 58,000 distinct hostnames (lists can be selectively disabled/enabled according to your choice).
|
||||
|
||||
In conclusione, ognuno può decidere come navigare su Internet:
|
||||
Ultimately, you can choose however you browse the net:
|
||||
|
||||
*Mettere tutto in blacklist e consentire elementi secondo necessità (modalità di default).
|
||||
* Blacklist all by default, and whitelist as needed (default mode).
|
||||
|
||||
*Consentire tutto di default e bloccare elementi secondo necessità.
|
||||
* Whitelist all by default, and blacklist as needed.
|
||||
|
||||
In entrambe le modalità, rimane il beneficio della protezione delle blacklist standard, che forniscono una difesa di base nei confronti di tracker, siti di malware, ecc. Oppure si possono disabilitare tutte queste blacklist standard.
|
||||
Either way, you still benefit from the preset blacklists so that at least you get basic protection from trackers, malware sites, etc. Or you can disable all of these preset blacklists.
|
||||
|
||||
La scelta è tua.
|
||||
Your choice.
|
||||
|
||||
Documentazione disponibile: https://github.com/gorhill/uMatrix/wiki
|
||||
Randomly assembled documentation: https://github.com/gorhill/uMatrix/wiki
|
||||
|
||||
=====
|
||||
|
||||
Feedback:
|
||||
FEEDBACK:
|
||||
|
||||
Per qualunque dubbio o domanda, usare il pulsante sulla destra "Invia Feedback". Risponderò prontamente. Non posso rispondere direttamente ai pareri, ma sarò lieto di rispondere direttamente nella sezione dei feedback.
|
||||
For any question/issue you might have, use the "Send Feedback" button on the right, in order for me to be able to answer readily. I can't answer directly to reviews, but I will be more than happy to answer you directly in the feedback section.
|
||||
|
||||
=====
|
||||
|
||||
Bachi, problemi, consigli:
|
||||
BUGS, ISSUES, SUGEGSTIONS:
|
||||
|
||||
https://github.com/gorhill/uMatrix/issues
|
||||
|
||||
Chiunque può contribuire al lavoro, con suggerimenti, segnalazione di problemi, argomentazioni pro/contro, per aiutarmi a decidere quali migliorie fare nell'estensione.
|
||||
You are very welcomed to contribute your views on open issues and suggestions, various arguments for/against help me in deciding what is needed to improve the extension.
|
||||
|
||||
La facilità di utilizzo è il primo obiettivo. Ho visto utilizzatori rinunciare ad usare NoScript per Firefox perché complesso, quindi invece di accusare questi utilizzatori di avere abitudini non sicure, preferisco accusare gli sviluppatori e questo progetto vuole essere un tentativo di risolvere quei problemi che hanno determinato la rinuncia ad impiegare una sicurezza di base.
|
||||
Ease of use is the primary goal. I've seen users give up on Firefox's NoScript because it gets too much in the way according to them, so rather than blame these users for poor security habits, I prefer to blame developers and this project is a tentative to address the issues which cause some users to give up on basic security.
|
||||
|
||||
Questa estensione è anche utile per capire cosa una pagina web fa effettivamente nel browser, spesso senza la vostra conoscenza. Voi avete la piena abilità di vedere e decidere con chi la pagina web comunica e restringere queste comunicazioni a specifiche classi di oggetti all'interno della pagina.
|
||||
This extension is also useful to understand what the web page in your browser is doing, often without your knowledge. You have full ability to see and decide with whom a web page communicates, and to restrict these communications to specific classes of objects within the web page.
|
||||
|
||||
Il numero che appare nella nell'icona dell'estensione corrisponde al numero complessivo di distinte richieste tentate (con successo o meno, dipendendo se queste siano permesse o bloccate) dalla pagina web.
|
||||
The number which appear in the extension icon correspond to the total number of distinct requests attempted (successfully or not depending on whether these were allowed or blocked) by the web page.
|
||||
|
||||
Semplicente fare click nella appropriata cella della matrice per permettere mettere un elemento in white-, black- o grey list. La lista grigia (Graylisting) significa che lo stato di bloccato o permesso viene ereditato da un'altra cella con più alta priorità nella matrice.
|
||||
Simply click on the appropriate entry in the matrix in order to white-, black- or graylist a component. Graylisting means the blocked or allowed status will be inherited from another cell with higher precedence in the matrix.
|
||||
|
||||
Cella rossa = effettivamente bloccata, cioè alle richieste viene impedito di raggiungere la loro destinazione.
|
||||
* Cella rosso scuro: il dominio o il tipo di richiesta è specificamente bloccata.
|
||||
* Cella rossa opaca: lo stato di blocco (blacklist) è ereditato perchè l'elemento è in grey list.
|
||||
Red square = effectively blacklisted, i.e. requests are prevented from reaching their intended destination:
|
||||
* Dark red square: the domain name and/or type of request is specifically blacklisted.
|
||||
* Faded red square: the blacklist status is inherited because the entry is graylisted.
|
||||
|
||||
Cella verde = effettivamente permesso, cioè alle richieste è permesso raggiungere la loro destinazione:
|
||||
* Cella verde scuro: il dominio e/o il tipo di richiesta è specificamente permessa (whitelist).
|
||||
* Cella vedre opaca: lo stato di permesso è ereditato perchè l'elemento è in grey list.
|
||||
Green square = effectively whitelisted, i.e. requests are allowed to reach their intended destination:
|
||||
* Dark green square: the domain name and/or type of request is specifically whitelisted.
|
||||
* Faded green square: the whitelist status is inherited because the entry is graylisted.
|
||||
|
||||
La cella in alto a sinistra nella matrice, la cella "tutto", rappresenta il setting globale di default, che permette di scegliere se permettere o bloccare tutto. Alcuni preferiscono permettere tutto e bloccare in casi specifici. La mia preferenza personale è naturalmente il contrario, bloccare tutto e permettere in casi specifici.
|
||||
The top-left cell in the matrix, the "all" cell, represents the default global setting, which allows you to choose whether allowing or blocking everything is the default behavior. Some prefer to allow everything while blocking exceptionally. My personal preference is of course the reverse, blocking everything and allowing exceptionally.
|
||||
|
||||
Questa estensione è inoltre utile se volete accelerare la vostra navigazione, bloccando tutte le richieste delle immagini, per esempio.
|
||||
This extension is also useful if you wish to speed up your browsing, by globally blocking all requests for images as an example.
|
||||
|
||||
=====
|
||||
|
||||
CODICE SORGENTE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
SOURCE CODE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
|
||||
CHANGE LOG: https://github.com/gorhill/uMatrix/releases
|
||||
|
||||
@ -1,93 +1,93 @@
|
||||
Uma firewall point & click baseada numa matriz, com funcionalidade para reforçar a privacidade de cada um. Para utilizadores avançados.
|
||||
µMatrix: A point-and-click matrix-based firewall, with many privacy-enhancing tools. For advanced users.
|
||||
|
||||
uMatrix coloca-o no controlo de onde o seu browser se pode conectar, que tipo de dados podem ser transferidos, e o que pode ser executado. Ninguém decide por si: Você escolhe. Você tem controlo total sob a sua privacidade.
|
||||
µMatrix put you in full control of where your browser is allowed to connect, what type of data it is allowed to download, and what it is allowed to execute. Nobody else decides for you: You choose. You are in full control of your privacy.
|
||||
|
||||
Fora da caixa, uMatrix funciona numa configuração relaxada "bloqueia-tudo/permite-excepcionalmente", o que quer dizer que web sites que necessitem scripts de terceiros poderão não estar funcionais. Com dois clicks, o uMatrix pode ser configurado para funcionar em modo "permite-tudo/bloqueia-excepcionalmente", o que geralmente não cria problemas em nenhuma página web. Ver https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views para mais detalhes sobre este tópico.
|
||||
Out of the box, µMatrix works in relax block-all/allow-exceptionally mode, meaning web sites which require 3rd-party scripts are likely to be "broken". With two clicks, µMatrix can be set to work in allow-all/block-exceptionally mode, which generally will not break web sites. See https://github.com/gorhill/httpswitchboard/wiki/How-to-use-HTTP-Switchboard:-Two-opposing-views for more details on this topic.
|
||||
|
||||
Sobre do mito que "browser baseados em Chromium não conseguem bloquear JavaScript fielmente", ver: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Sumário: Sim, JavaScript pode ser bloqueado com seguração no Chromium.
|
||||
Regarding the myth that "Chromium-based browsers can't reliably block javascript", see: https://github.com/gorhill/httpswitchboard/wiki/Blocking-javascript-execution-reliably-in-Chromium-based-browsers. Summary: Yes, javascript can be blocked reliably in Chromium.
|
||||
|
||||
* Ver TODAS as conexões remotas, falhadas ou tentadas, dependendo se foram bloqueadas ou permitidas (você decide).
|
||||
* See ALL the remote connections, failed or attempted, depending on whether they were blocked or allowed (you decide).
|
||||
|
||||
* Um único-clique para meter múltiplas classes de pedidos na lista branca/negra, de acordo com o destino e tipo dos dados (um pedido bloqueado NUNCA vai sair do seu browser).
|
||||
* A single-click to whitelist/blacklist one or multiple classes of requests according to the destination and type of data (a blocked request will NEVER leave your browser).
|
||||
|
||||
* Lista negra eficiente: cookies não iram sair do seu browser, JavaScript não será executado, plugins não irão correr, pixels de monitorização não serão transferidos, etc.
|
||||
* Efficient blacklisting: cookies won't leave your browser, javascript won't execute, plugins won't play, tracking pixels won't download, etc.
|
||||
|
||||
* Você não tem de depender unicamente numa lista negra em particular (possivelmente a faltar entradas) fora do qual mais nada pode ser bloqueado: Você está em controlo total.
|
||||
* You do not have to solely rely on just one particular curated blacklist (arguably with many missing entries) outside which nothing else can be blocked: You are in full control.
|
||||
|
||||
* Facilidade de utilização: uMatrix deixa-o adicionar pedidos net que originam de uma página web a uma lista negra/branca, recorrendo a uma matriz point & click:
|
||||
* Ease of use: µMatrix lets you easily whitelist/blacklist net requests which originate from within a web page according to a point-and-click matrix:
|
||||
|
||||
- nomes de domínio (coluna esquerda)
|
||||
* de muito específico
|
||||
* a muito genérico
|
||||
- domain names (left column)
|
||||
* from very specific
|
||||
* to very generic
|
||||
|
||||
- tipo de pedidos (linha de topo)
|
||||
- type of requests (top row)
|
||||
* cookies
|
||||
* Recursos relacionados com CSS (stylesheets e web fonts)
|
||||
* imagens
|
||||
* plug-ins
|
||||
* CSS-related resources (stylesheets and web fonts)
|
||||
* images
|
||||
* plugins
|
||||
* scripts
|
||||
* XHR (pedidos efectuados pelos scripts)
|
||||
* XHR (requests made by scripts)
|
||||
* frames
|
||||
* outros
|
||||
* others
|
||||
|
||||
Pode adicionar uma única célula à lista negra/branca, um grupo de linhas, uma coluna inteira, ou toda a matriz, com apenas um clique.
|
||||
You can blacklist/whitelist a single cell, an entire row, a group of rows, an entire column, or the whole matrix with just one click.
|
||||
|
||||
O mecanismo de filtragem do uMatrix usa lógica de precedência para avaliar o que é permitido/está bloqueado, de acordo com as células que estão na lista negra/branca. Por exemplo, isto permite que adicione uma página inteira à lista branca com um só clique, sem ter que adicionar elementos à mesma, à medida que vão aparecendo.
|
||||
µMatrix's filtering engine uses precedence logic to evaluate what is blocked/allowed according to which cells are blacklisted/whitelisted. For example, this allows you to whitelist a whole page with one click, without having to repeatedly whitelist whatever new data appear on the page.
|
||||
|
||||
Todas as regras têm escopos. Por exemplo, pode bloquear 'facebook.com' e 'facebook.net' em todo o lado, excepto quando visita a página em 'www.facebook.com'. Desta maneira, o Facebook não será capaz de criar um perfil com os seus hábitos de navegação pessoais.
|
||||
All rules are scoped. For example, you can block `facebook.com` and `facebook.net` everywhere except when visiting a page on `www.facebook.com`. This way Facebook won't be able to build a profile of your browsing habits.
|
||||
|
||||
O objectivo desta extensão é tornar o acto de permitir ou proibir web sites, total ou parcialmente, o mais directo possível, para encorajar os utilizadores a se preocuparem com a sua privacidade.
|
||||
The goal of this extension is to make the allowing or blocking of web sites, wholly or partly, as straightforward as possible, so as to encourage users to care about their privacy.
|
||||
|
||||
Esta extensão vem com ficheiros hosts de terceiros, totalizando mais de 58,000 hostnames (as listas podem ser activadas e desactivadas selectivamente, de acordo com a sua escolha).
|
||||
The extension comes with 3rd-party hosts files totaling over 58,000 distinct hostnames (lists can be selectively disabled/enabled according to your choice).
|
||||
|
||||
Fundamentalmente, pode escolher como navegar na internet:
|
||||
Ultimately, you can choose however you browse the net:
|
||||
|
||||
* Adicionar tudo à lista negra, e ir adicionando o que precisa à branca (modo normal).
|
||||
* Blacklist all by default, and whitelist as needed (default mode).
|
||||
|
||||
* Adicionar tudo à lista branca, e ir adicionando o que não precisa à negra.
|
||||
* Whitelist all by default, and blacklist as needed.
|
||||
|
||||
De qualquer modo, vai sempre beneficiar das listas negras presentes, para que tenha sempre protecção básica contra trackers, sites de malware, etc. Ou pode desactivar todas as listas negras.
|
||||
Either way, you still benefit from the preset blacklists so that at least you get basic protection from trackers, malware sites, etc. Or you can disable all of these preset blacklists.
|
||||
|
||||
A escolha é sua.
|
||||
Your choice.
|
||||
|
||||
Documentação aleatória: https://github.com/gorhill/uMatrix/wiki
|
||||
Randomly assembled documentation: https://github.com/gorhill/uMatrix/wiki
|
||||
|
||||
=====
|
||||
|
||||
FEEDBACK:
|
||||
|
||||
Qualquer questão ou problema que possa ter, use o botão "Send Feedback" à direita, para que possa responder rapidamente. Não posso responder directamente a comentários, mas não poderia estar mais contente por lhe responder directamente na secção de feedback.
|
||||
For any question/issue you might have, use the "Send Feedback" button on the right, in order for me to be able to answer readily. I can't answer directly to reviews, but I will be more than happy to answer you directly in the feedback section.
|
||||
|
||||
=====
|
||||
|
||||
ERROS, PROBLEMAS, SUGESTÕES:
|
||||
BUGS, ISSUES, SUGEGSTIONS:
|
||||
|
||||
https://github.com/gorhill/uMatrix/issues
|
||||
|
||||
É muito bem vindo a contribuir com a sua opinião em questões em aberto, e a dar sugestões, argumentos para me ajudar a decidir o que é preciso para melhorar a extensão.
|
||||
You are very welcomed to contribute your views on open issues and suggestions, various arguments for/against help me in deciding what is needed to improve the extension.
|
||||
|
||||
Facilidade de uso é o objectivo principal. Já vi utilizadores desistir de usar o NoScript do Firefox porque requer configuração excessiva, portanto, em vez de os culpar por hábitos de segurança pobres, prefiro culpar os developers, e este projecto é uma tentativa a adereçar problemas que causam alguns a desistir de segurança básica.
|
||||
Ease of use is the primary goal. I've seen users give up on Firefox's NoScript because it gets too much in the way according to them, so rather than blame these users for poor security habits, I prefer to blame developers and this project is a tentative to address the issues which cause some users to give up on basic security.
|
||||
|
||||
Esta extensão é também útil para entender o que a página web no seu browser está a fazer, por vezes sem o seu conhecimento. Tem o poder de ver e decidir com quem é que a página web comunica, e restringir essas comunicações a uma classe específica de objectos na mesma página.
|
||||
This extension is also useful to understand what the web page in your browser is doing, often without your knowledge. You have full ability to see and decide with whom a web page communicates, and to restrict these communications to specific classes of objects within the web page.
|
||||
|
||||
O número que aparece no ícone da extensão corresponde ao número total de pedidos distintos tentados (com sucesso ou não, dependendo das lista branca/negra) pela página web.
|
||||
The number which appear in the extension icon correspond to the total number of distinct requests attempted (successfully or not depending on whether these were allowed or blocked) by the web page.
|
||||
|
||||
Simplesmente clique na célula apropriada na matriz para adicionar um componente à lista branca, negra, ou cinzenta. A lista cinzenta representa os objectos cujo estatuto (permitido ou bloqueado) é herdado de uma célula que precede a presente, na matriz.
|
||||
Simply click on the appropriate entry in the matrix in order to white-, black- or graylist a component. Graylisting means the blocked or allowed status will be inherited from another cell with higher precedence in the matrix.
|
||||
|
||||
Quadrado vermelho = completamente na lista negra, i.e. pedidos são impedidos de chegar ao seu destino:
|
||||
* Quadrado vermelho escuro: o nome do domínio e/ou tipo de pedido está especificamente na lista negra.
|
||||
* Quadrado vermelho esbranquiçado: o estatuto de lista negra foi herdado, porque a entrada está na lista cinzenta.
|
||||
Red square = effectively blacklisted, i.e. requests are prevented from reaching their intended destination:
|
||||
* Dark red square: the domain name and/or type of request is specifically blacklisted.
|
||||
* Faded red square: the blacklist status is inherited because the entry is graylisted.
|
||||
|
||||
Quadrado verde = completamente na lista branca, i.e. pedidos são permitidos e chegam ao seu destino:
|
||||
* Quadrado verde escuro: o nome do domínio e/ou tipo de pedido está especificamente na lista branca.
|
||||
* Quadrado verde esbranquiçado: o estatuto de lista branca foi herdado, porque a entrada está na lista cinzenta.
|
||||
Green square = effectively whitelisted, i.e. requests are allowed to reach their intended destination:
|
||||
* Dark green square: the domain name and/or type of request is specifically whitelisted.
|
||||
* Faded green square: the whitelist status is inherited because the entry is graylisted.
|
||||
|
||||
A célula de topo à esquerda na matriz, a célula "all", representa a definição global, que permite escolher se quer permitir ou bloquear tudo, como o comportamento normal. Alguns preferem permitir tudo e bloquear excepcionalmente. A minha preferência pessoal é o oposto -- bloquear tudo e permitir excepcionalmente.
|
||||
The top-left cell in the matrix, the "all" cell, represents the default global setting, which allows you to choose whether allowing or blocking everything is the default behavior. Some prefer to allow everything while blocking exceptionally. My personal preference is of course the reverse, blocking everything and allowing exceptionally.
|
||||
|
||||
Esta extensão é também útil caso queira acelerar a velocidade do carregamento das páginas, bloqueando todos os pedidos para imagens, por exemplo.
|
||||
This extension is also useful if you wish to speed up your browsing, by globally blocking all requests for images as an example.
|
||||
|
||||
=====
|
||||
|
||||
CÓDIGO FONTE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
SOURCE CODE: https://github.com/gorhill/uMatrix (GPLv3)
|
||||
|
||||
REGISTO DE ALTERAÇÕES: https://github.com/gorhill/uMatrix/releases
|
||||
CHANGE LOG: https://github.com/gorhill/uMatrix/releases
|
||||
|
||||
|
Before Width: | Height: | Size: 92 KiB |
|
Before Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 145 KiB |
|
Before Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 193 KiB |
|
Before Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 100 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 97 KiB |
|
Before Width: | Height: | Size: 162 KiB |
|
Before Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
|
Before Width: | Height: | Size: 656 B After Width: | Height: | Size: 656 B |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
@ -0,0 +1,88 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "__MSG_extName__",
|
||||
"short_name": "µMatrix",
|
||||
"version": "0.8.0.0",
|
||||
"description": "__MSG_extShortDesc__",
|
||||
"icons": {
|
||||
"16": "icon_16.png",
|
||||
"128": "icon_128.png"
|
||||
},
|
||||
"browser_action": {
|
||||
"default_icon": {
|
||||
"19": "img/browsericons/icon19.png"
|
||||
},
|
||||
"default_title": "__MSG_extName__",
|
||||
"default_popup": "popup.html"
|
||||
},
|
||||
"author": "Raymond Hill",
|
||||
"background": {
|
||||
"page": "background.html"
|
||||
},
|
||||
"commands": {
|
||||
"revert-all": {
|
||||
"description": "__MSG_commandRevertAll__",
|
||||
"suggested_key": {
|
||||
"default": "Alt+Q",
|
||||
"mac": "Command+Shift+Q"
|
||||
}
|
||||
},
|
||||
"whitelist-all": {
|
||||
"description": "__MSG_commandWhitelistAll__",
|
||||
"suggested_key": {
|
||||
"default": "Alt+A",
|
||||
"mac": "Command+Shift+A"
|
||||
}
|
||||
},
|
||||
"whitelist-page-domain": {
|
||||
"description": "__MSG_commandWhitelistPageDomain__",
|
||||
"suggested_key": {
|
||||
"default": "Alt+W",
|
||||
"mac": "Command+Shift+W"
|
||||
}
|
||||
},
|
||||
"open-dashboard": {
|
||||
"description": "__MSG_commandOpenDashboard__",
|
||||
"suggested_key": {
|
||||
"default": "Alt+S",
|
||||
"mac": "Command+Shift+S"
|
||||
}
|
||||
}
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["js/contentscript-start.js"],
|
||||
"run_at": "document_start",
|
||||
"all_frames": true
|
||||
},
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["js/contentscript-end.js"],
|
||||
"run_at": "document_end",
|
||||
"all_frames": true
|
||||
}
|
||||
],
|
||||
"default_locale": "en",
|
||||
"homepage_url": "https://github.com/gorhill/uMatrix/wiki",
|
||||
"minimum_chrome_version": "22.0",
|
||||
"options_page": "dashboard.html",
|
||||
"permissions": [
|
||||
"browsingData",
|
||||
"contentSettings",
|
||||
"cookies",
|
||||
"downloads",
|
||||
"storage",
|
||||
"tabs",
|
||||
"unlimitedStorage",
|
||||
"webNavigation",
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"http://*/*",
|
||||
"https://*/*"
|
||||
],
|
||||
"web_accessible_resources": [
|
||||
"css/fonts/Roboto_Condensed/RobotoCondensed-Regular.ttf",
|
||||
"css/noop.css"
|
||||
]
|
||||
}
|
||||
@ -1,55 +0,0 @@
|
||||
{
|
||||
"manifest_version": 2,
|
||||
"name": "nuTensor",
|
||||
"short_name": "nuTensor",
|
||||
"version": "1.3.3.8",
|
||||
"description": "__MSG_extShortDesc__",
|
||||
"icons": {
|
||||
"16": "img/icon_16.png",
|
||||
"128": "img/icon_128.png"
|
||||
},
|
||||
"browser_action": {
|
||||
"default_icon": {
|
||||
"19": "img/browsericons/icon19-19.png"
|
||||
},
|
||||
"default_title": "nuTensor",
|
||||
"default_popup": "popup.html"
|
||||
},
|
||||
"author": "Raymond Hill",
|
||||
"background": {
|
||||
"page": "background.html"
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["/js/vapi.js", "/js/vapi-client.js", "/js/contentscript-start.js"],
|
||||
"run_at": "document_start",
|
||||
"all_frames": true
|
||||
},
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["/js/contentscript.js"],
|
||||
"run_at": "document_end",
|
||||
"all_frames": true
|
||||
}
|
||||
],
|
||||
"default_locale": "en",
|
||||
"homepage_url": "https://github.com/geekprojects/nuTensor",
|
||||
"minimum_chrome_version": "45.0",
|
||||
"options_ui": {
|
||||
"page": "dashboard.html",
|
||||
"open_in_tab": true
|
||||
},
|
||||
"permissions": [
|
||||
"browsingData",
|
||||
"cookies",
|
||||
"privacy",
|
||||
"storage",
|
||||
"tabs",
|
||||
"unlimitedStorage",
|
||||
"webNavigation",
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"<all_urls>"
|
||||
]
|
||||
}
|
||||
@ -1,308 +0,0 @@
|
||||
/*******************************************************************************
|
||||
|
||||
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,268 +0,0 @@
|
||||
/*******************************************************************************
|
||||
|
||||
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
|
||||
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';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/456
|
||||
// Skip if already injected.
|
||||
|
||||
// >>>>>>>> start of HUGE-IF-BLOCK
|
||||
if (
|
||||
typeof vAPI === 'object' &&
|
||||
vAPI.randomToken instanceof Function === false
|
||||
) {
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.randomToken = function() {
|
||||
const 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 = {
|
||||
jobs: [],
|
||||
add: function(job) {
|
||||
this.jobs.push(job);
|
||||
},
|
||||
exec: function() {
|
||||
// Shutdown asynchronously, to ensure shutdown jobs are called from
|
||||
// the top context.
|
||||
self.requestIdleCallback(( ) => {
|
||||
const jobs = this.jobs.slice();
|
||||
this.jobs.length = 0;
|
||||
while ( jobs.length !== 0 ) {
|
||||
(jobs.pop())();
|
||||
}
|
||||
});
|
||||
},
|
||||
remove: function(job) {
|
||||
let pos;
|
||||
while ( (pos = this.jobs.indexOf(job)) !== -1 ) {
|
||||
this.jobs.splice(pos, 1);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.messaging = {
|
||||
port: null,
|
||||
portTimer: null,
|
||||
portTimerDelay: 10000,
|
||||
extended: undefined,
|
||||
extensions: [],
|
||||
msgIdGenerator: 1,
|
||||
pending: new Map(),
|
||||
shuttingDown: false,
|
||||
|
||||
shutdown: function() {
|
||||
this.shuttingDown = true;
|
||||
this.destroyPort();
|
||||
},
|
||||
|
||||
// https://github.com/uBlockOrigin/uBlock-issues/issues/403
|
||||
// Spurious disconnection can happen, so do not consider such events
|
||||
// as world-ending, i.e. stay around. Except for embedded frames.
|
||||
|
||||
disconnectListener: function() {
|
||||
this.port = null;
|
||||
if ( window !== window.top ) {
|
||||
vAPI.shutdown.exec();
|
||||
}
|
||||
},
|
||||
disconnectListenerBound: null,
|
||||
|
||||
messageListener: function(details) {
|
||||
if ( details instanceof Object === false ) { return; }
|
||||
|
||||
// Response to specific message previously sent
|
||||
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;
|
||||
},
|
||||
|
||||
portPoller: function() {
|
||||
this.portTimer = null;
|
||||
if ( this.port !== null && this.canDestroyPort() ) {
|
||||
return this.destroyPort();
|
||||
}
|
||||
this.portTimer = vAPI.setTimeout(this.portPollerBound, this.portTimerDelay);
|
||||
this.portTimerDelay = Math.min(this.portTimerDelay * 2, 60 * 60 * 1000);
|
||||
},
|
||||
portPollerBound: null,
|
||||
|
||||
destroyPort: function() {
|
||||
if ( this.portTimer !== null ) {
|
||||
clearTimeout(this.portTimer);
|
||||
this.portTimer = null;
|
||||
}
|
||||
const port = this.port;
|
||||
if ( port !== null ) {
|
||||
port.disconnect();
|
||||
port.onMessage.removeListener(this.messageListenerBound);
|
||||
port.onDisconnect.removeListener(this.disconnectListenerBound);
|
||||
this.port = null;
|
||||
}
|
||||
this.mustDestroyPort();
|
||||
// service pending callbacks
|
||||
if ( this.pending.size !== 0 ) {
|
||||
const pending = this.pending;
|
||||
this.pending = new Map();
|
||||
for ( const resolver of pending.values() ) {
|
||||
resolver();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
createPort: function() {
|
||||
if ( this.shuttingDown ) { return null; }
|
||||
if ( this.messageListenerBound === null ) {
|
||||
this.messageListenerBound = this.messageListener.bind(this);
|
||||
this.disconnectListenerBound = this.disconnectListener.bind(this);
|
||||
this.portPollerBound = this.portPoller.bind(this);
|
||||
}
|
||||
try {
|
||||
this.port = browser.runtime.connect({name: vAPI.sessionId}) || null;
|
||||
} catch (ex) {
|
||||
this.port = null;
|
||||
}
|
||||
// Not having a valid port at this point means the main process is
|
||||
// not available: no point keeping the content scripts alive.
|
||||
if ( this.port === null ) {
|
||||
vAPI.shutdown.exec();
|
||||
return null;
|
||||
}
|
||||
this.port.onMessage.addListener(this.messageListenerBound);
|
||||
this.port.onDisconnect.addListener(this.disconnectListenerBound);
|
||||
this.portTimerDelay = 10000;
|
||||
if ( this.portTimer === null ) {
|
||||
this.portTimer = vAPI.setTimeout(
|
||||
this.portPollerBound,
|
||||
this.portTimerDelay
|
||||
);
|
||||
}
|
||||
return this.port;
|
||||
},
|
||||
|
||||
getPort: function() {
|
||||
return this.port !== null ? this.port : this.createPort();
|
||||
},
|
||||
|
||||
send: function(channel, msg) {
|
||||
// Too large a gap between the last request and the last response means
|
||||
// the main process is no longer reachable: memory leaks and bad
|
||||
// performance become a risk -- especially for long-lived, dynamic
|
||||
// pages. Guard against this.
|
||||
if ( this.pending.size > 50 ) {
|
||||
vAPI.shutdown.exec();
|
||||
}
|
||||
const port = this.getPort();
|
||||
if ( port === null ) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
const msgId = this.msgIdGenerator++;
|
||||
const promise = new Promise(resolve => {
|
||||
this.pending.set(msgId, resolve);
|
||||
});
|
||||
port.postMessage({ channel, msgId, msg });
|
||||
return promise;
|
||||
},
|
||||
|
||||
// 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;
|
||||
});
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
}
|
||||
// <<<<<<<< end of HUGE-IF-BLOCK
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
DO NOT:
|
||||
- Remove the following code
|
||||
- Add code beyond the following code
|
||||
Reason:
|
||||
- https://github.com/gorhill/uBlock/pull/3721
|
||||
- uBO never uses the return value from injected content scripts
|
||||
|
||||
**/
|
||||
|
||||
void 0;
|
||||
@ -1,279 +0,0 @@
|
||||
/*******************************************************************************
|
||||
|
||||
uMatrix - a browser extension to black/white list requests.
|
||||
Copyright (C) 2014-present The uMatrix/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/uMatrix
|
||||
*/
|
||||
|
||||
// For background page or non-background pages
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.T0 = Date.now();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.setTimeout = vAPI.setTimeout || self.setTimeout.bind(self);
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.webextFlavor = {
|
||||
major: 0,
|
||||
soup: new Set()
|
||||
};
|
||||
|
||||
(( ) => {
|
||||
const ua = navigator.userAgent;
|
||||
const flavor = vAPI.webextFlavor;
|
||||
const soup = flavor.soup;
|
||||
const dispatch = function() {
|
||||
window.dispatchEvent(new CustomEvent('webextFlavor'));
|
||||
};
|
||||
|
||||
// This is always true.
|
||||
soup.add('ublock').add('webext');
|
||||
|
||||
// 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
|
||||
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 ( 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 -- order of tests is important
|
||||
let match;
|
||||
if ( (match = /\bEdge\/(\d+)/.exec(ua)) !== null ) {
|
||||
flavor.major = parseInt(match[1], 10) || 0;
|
||||
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
|
||||
vAPI.setTimeout(dispatch, 97);
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
{
|
||||
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._-]/;
|
||||
|
||||
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; }
|
||||
const a = document.createElement('a');
|
||||
a.href = details.url;
|
||||
a.setAttribute('download', details.filename || '');
|
||||
a.setAttribute('type', 'text/plain');
|
||||
a.dispatchEvent(new MouseEvent('click'));
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.getURL = browser.runtime.getURL;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
vAPI.i18n = browser.i18n.getMessage;
|
||||
|
||||
// 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() {
|
||||
if ( vAPI.webextFlavor.soup.has('firefox') ) {
|
||||
window.close();
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO: try to figure why this was used instead of a plain window.close().
|
||||
// https://github.com/gorhill/uBlock/commit/b301ac031e0c2e9a99cb6f8953319d44e22f33d2#diff-bc664f26b9c453e0d43a9379e8135c6a
|
||||
window.open('', '_self').close();
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// A localStorage-like object which should be accessible from the
|
||||
// background page or auxiliary pages.
|
||||
// This storage is optional, but it is nice to have, for a more polished user
|
||||
// experience.
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/2824
|
||||
// Use a dummy localStorage if for some reasons it's not available.
|
||||
|
||||
// https://github.com/gorhill/uMatrix/issues/840
|
||||
// Always use a wrapper to seamlessly handle exceptions
|
||||
|
||||
vAPI.localStorage = {
|
||||
clear: function() {
|
||||
try {
|
||||
window.localStorage.clear();
|
||||
} catch(ex) {
|
||||
}
|
||||
},
|
||||
getItem: function(key) {
|
||||
try {
|
||||
return window.localStorage.getItem(key);
|
||||
} catch(ex) {
|
||||
}
|
||||
return null;
|
||||
},
|
||||
removeItem: function(key) {
|
||||
try {
|
||||
window.localStorage.removeItem(key);
|
||||
} catch(ex) {
|
||||
}
|
||||
},
|
||||
setItem: function(key, value) {
|
||||
try {
|
||||
window.localStorage.setItem(key, value);
|
||||
} catch(ex) {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
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,178 +0,0 @@
|
||||
/*******************************************************************************
|
||||
|
||||
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/uMatrix
|
||||
*/
|
||||
|
||||
// For background page
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
(( ) => {
|
||||
// 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']
|
||||
]);
|
||||
|
||||
const headerValue = (headers, name) => {
|
||||
let i = headers.length;
|
||||
while ( i-- ) {
|
||||
if ( headers[i].name.toLowerCase() === name ) {
|
||||
return headers[i].value.trim();
|
||||
}
|
||||
}
|
||||
return '';
|
||||
};
|
||||
|
||||
const parsedURL = new URL('https://www.example.org/');
|
||||
|
||||
// Extend base class to normalize as per platform.
|
||||
|
||||
vAPI.Net = class extends vAPI.Net {
|
||||
constructor() {
|
||||
super();
|
||||
this.suspendedTabIds = new Set();
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
let type = details.type;
|
||||
|
||||
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;
|
||||
}
|
||||
if ( type.startsWith('image/') ) {
|
||||
details.type = 'image';
|
||||
return;
|
||||
}
|
||||
if ( type.startsWith('audio/') || type.startsWith('video/') ) {
|
||||
details.type = 'media';
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
// 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);
|
||||
}
|
||||
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;
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
@ -1,86 +0,0 @@
|
||||
/*******************************************************************************
|
||||
|
||||
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.nuTensor !== true
|
||||
)
|
||||
) {
|
||||
vAPI = self.vAPI = { nuTensor: 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;
|
||||
@ -1,176 +0,0 @@
|
||||
/*******************************************************************************
|
||||
|
||||
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,69 +0,0 @@
|
||||
{
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"id": "nuTensor@geekprojects.com",
|
||||
"strict_min_version": "60.0"
|
||||
}
|
||||
},
|
||||
"author": "Raymond Hill",
|
||||
"background": {
|
||||
"page": "background.html"
|
||||
},
|
||||
"browser_action": {
|
||||
"browser_style": false,
|
||||
"default_icon": {
|
||||
"19": "img/browsericons/icon19-off.png"
|
||||
},
|
||||
"default_title": "nuTensor",
|
||||
"default_popup": "popup.html"
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["/js/vapi.js", "/js/vapi-client.js", "/js/contentscript-start.js"],
|
||||
"run_at": "document_start",
|
||||
"all_frames": true
|
||||
},
|
||||
{
|
||||
"matches": ["http://*/*", "https://*/*"],
|
||||
"js": ["/js/contentscript.js"],
|
||||
"run_at": "document_end",
|
||||
"all_frames": true
|
||||
}
|
||||
],
|
||||
"default_locale": "en",
|
||||
"description": "__MSG_extShortDesc__",
|
||||
"icons": {
|
||||
"16": "img/icon_16.png",
|
||||
"128": "img/icon_128.png"
|
||||
},
|
||||
"manifest_version": 2,
|
||||
"name": "nuTensor",
|
||||
"options_ui": {
|
||||
"page":"dashboard.html",
|
||||
"open_in_tab": true
|
||||
},
|
||||
"permissions": [
|
||||
"browsingData",
|
||||
"cookies",
|
||||
"dns",
|
||||
"privacy",
|
||||
"storage",
|
||||
"tabs",
|
||||
"webNavigation",
|
||||
"webRequest",
|
||||
"webRequestBlocking",
|
||||
"<all_urls>"
|
||||
],
|
||||
"short_name": "nuTensor",
|
||||
"sidebar_action": {
|
||||
"default_title": "__MSG_loggerPageName__",
|
||||
"default_panel": "logger-ui.html",
|
||||
"default_icon": {
|
||||
"16": "img/icon_16.png",
|
||||
"128": "img/icon_128.png"
|
||||
},
|
||||
"open_at_install": false
|
||||
},
|
||||
"version": "0.9.9"
|
||||
}
|
||||
@ -1,263 +0,0 @@
|
||||
/*******************************************************************************
|
||||
|
||||
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/uMatrix
|
||||
*/
|
||||
|
||||
// For background page
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
(( ) => {
|
||||
// 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 = ( ) => {
|
||||
return vAPI.webextFlavor.soup.has('firefox') &&
|
||||
vAPI.webextFlavor.major < 57;
|
||||
};
|
||||
|
||||
let mustPunycode = evalMustPunycode();
|
||||
|
||||
// The real actual webextFlavor value may not be set in stone, so listen
|
||||
// for possible future changes.
|
||||
window.addEventListener('webextFlavor', ( ) => {
|
||||
mustPunycode = evalMustPunycode();
|
||||
}, { once: true });
|
||||
|
||||
const punycode = self.punycode;
|
||||
const reAsciiHostname = /^https?:\/\/[0-9a-z_.:@-]+[/?#]/;
|
||||
const parsedURL = new URL('about:blank');
|
||||
|
||||
// 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;
|
||||
}
|
||||
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)
|
||||
);
|
||||
}
|
||||
|
||||
const type = details.type;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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 ( type === 'image' && this.validTypes.has('imageset') ) {
|
||||
out.add('imageset');
|
||||
}
|
||||
if ( type === 'sub_frame' ) {
|
||||
out.add('object');
|
||||
}
|
||||
}
|
||||
return Array.from(out);
|
||||
}
|
||||
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('|') +
|
||||
')$'
|
||||
);
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
/******************************************************************************/
|
||||
@ -1,24 +0,0 @@
|
||||
/*******************************************************************************
|
||||
|
||||
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
|
||||
@ -1,10 +0,0 @@
|
||||
{
|
||||
"sidebar_action": {
|
||||
"default_title": "__MSG_loggerPageName__",
|
||||
"default_panel": "logger-ui.html",
|
||||
"default_icon": {
|
||||
"16": "img/icon_16.png",
|
||||
"128": "img/icon_128.png"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,866 +0,0 @@
|
||||
{
|
||||
"extName": {
|
||||
"message": "nuTensor",
|
||||
"description": ""
|
||||
},
|
||||
"extShortDesc": {
|
||||
"message": "Point & click to forbid/allow any class of requests made by your browser. Use it to block scripts, iframes, ads, facebook, etc.",
|
||||
"description": "this will be used as short description in web stores: MUST BE 132 characters OR LESS"
|
||||
},
|
||||
"dashboardPageName": {
|
||||
"message": "nuTensor — Dashboard",
|
||||
"description": ""
|
||||
},
|
||||
"loggerPageName": {
|
||||
"message": "nuTensor — Logger",
|
||||
"description": "Title for the logger window"
|
||||
},
|
||||
"settingsPageName": {
|
||||
"message": "Settings",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"privacyPageName": {
|
||||
"message": "Privacy",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"statsPageName": {
|
||||
"message": "Statistics",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"userRulesPageName": {
|
||||
"message": "My rules",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
"message": "Assets",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "More",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
"message": "About",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"allPrettyName": {
|
||||
"message": "all",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cookiePrettyName": {
|
||||
"message": "cookie",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cssPrettyName": {
|
||||
"message": "css",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"imagePrettyName": {
|
||||
"message": "image",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "media",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
"message": "plugin",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"scriptPrettyName": {
|
||||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
"message": "frame",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"otherPrettyName": {
|
||||
"message": "other",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"matrixNoNetTrafficPrompt": {
|
||||
"message": "No net traffic seen for this tab so far.",
|
||||
"description": ""
|
||||
},
|
||||
"matrixLocalScopeTip": {
|
||||
"message": "Select a local scope to see/create rules which apply only in that scope",
|
||||
"description": "Tool tip for the local scope button"
|
||||
},
|
||||
"matrixGlobalScopeTip": {
|
||||
"message": "Select the global scope to see/create rules which apply everywhere",
|
||||
"description": "Tool tip for the global scope button"
|
||||
},
|
||||
"matrixMtxButtonTip": {
|
||||
"message": "Disable/enable matrix filtering for this scope",
|
||||
"description": "Tool tip for matrix button"
|
||||
},
|
||||
"matrixPersistButtonTip": {
|
||||
"message": "Save all temporary changes for this scope",
|
||||
"description": "Tool tip for the persist button"
|
||||
},
|
||||
"matrixRevertButtonTip": {
|
||||
"message": "Revert temporary changes for this scope",
|
||||
"description": "Tool tip for the revert local permission button"
|
||||
},
|
||||
"matrixReloadButton": {
|
||||
"message": "Reload the page. \nPress Shift to bypass the browser cache.",
|
||||
"description": "Tool tip for the reload button"
|
||||
},
|
||||
"matrix1stPartyLabel": {
|
||||
"message": "1st-party",
|
||||
"description": "1st-party"
|
||||
},
|
||||
"matrixBlacklistedHostnames": {
|
||||
"message": "{{count}} blacklisted hostname(s)",
|
||||
"description": "Appears in the metadata row of bottom-most group: **mind the limited width**"
|
||||
},
|
||||
"matrixSwitchNoMixedContent": {
|
||||
"message": "Forbid mixed content",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoWorker": {
|
||||
"message": "Forbid web workers",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchReferrerSpoof": {
|
||||
"message": "Spoof <code>Referer</code> header",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoscriptSpoof": {
|
||||
"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"
|
||||
},
|
||||
"matrixLoggerMenuEntry": {
|
||||
"message": "Go to logger",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixDashboardMenuEntry": {
|
||||
"message": "Go to dashboard",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound": {
|
||||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "nuTensor – Statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageGenericStats": {
|
||||
"message": "Generic statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookieHeadersFoiled": {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_cookie'>HTTP cookie</a> headers foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRefererHeadersFoiled": {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referer</a> headers foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageHyperlinkAuditingFoiled": {
|
||||
"message": "<a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>Hyperlink auditing</a> attempts foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookiesRemoved": {
|
||||
"message": "Local cookies removed: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLocalStoragesCleared": {
|
||||
"message": "<a href='http://diveintohtml5.info/storage.html'>Local storages</a> emptied: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageBrowserCacheCleared": {
|
||||
"message": "Browser caches cleared: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedStats": {
|
||||
"message": "Detailed statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedAllPages": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedBehindTheScenePage": {
|
||||
"message": "Behind the scene",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOverview": {
|
||||
"message": "Overview",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRequests": {
|
||||
"message": "Requests",
|
||||
"description": "header for the stat type column"
|
||||
},
|
||||
"statsPageAllowed": {
|
||||
"message": "Allowed",
|
||||
"description": "header for the allowed requests column"
|
||||
},
|
||||
"statsPageBlocked": {
|
||||
"message": "Blocked",
|
||||
"description": "header for the blocked requests column"
|
||||
},
|
||||
"statsPageAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePages": {
|
||||
"message": "Pages",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookies": {
|
||||
"message": "Cookies",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCSS": {
|
||||
"message": "CSS",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageImages": {
|
||||
"message": "Images",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePlugins": {
|
||||
"message": "Plugins",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageScripts": {
|
||||
"message": "Scripts",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageXHRs": {
|
||||
"message": "XHRs",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageFrames": {
|
||||
"message": "Frames",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOthers": {
|
||||
"message": "Others",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailed": {
|
||||
"message": "Logger",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLogSizePrompt1": {
|
||||
"message": "Remember the last",
|
||||
"description": "First part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizePrompt2": {
|
||||
"message": "HTTP requests <b>per page</b>",
|
||||
"description": "Second part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizeHelp": {
|
||||
"message": "<p>You can inspect details of the most recent raw HTTP requests which have been made by a web page (see below).</p><p>This is mostly useful to advanced users who want to investigate exactly what a web page has been doing. But logging these HTTP requests requires memory, and if you don't care about this technical information, then memory is being wasted.</p><p>Hence this field which lets you adjust the maximum number of the most recent HTTP requests which are to be logged for further inspection.</p><p>Enter “<code>0</code>” to turn off detailed logging (and consequently reduce the memory footprint of <i>nuTensor</i>).</p>",
|
||||
"description": "To help user understand the purpose of the log size value"
|
||||
},
|
||||
"statsPageRefresh": {
|
||||
"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": "nuTensor – Settings",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayHeader": {
|
||||
"message": "Matrix",
|
||||
"description": "header for matrix settings used in Settings page"
|
||||
},
|
||||
"settingsMatrixDisplayTextSizePrompt": {
|
||||
"message": "Text size:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsIconBadgeEnabled": {
|
||||
"message": "Show the number of blocked resources on the icon",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayColorBlind": {
|
||||
"message": "Color-blind friendly",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixConvenienceHeader": {
|
||||
"message": "Convenience",
|
||||
"description": "English: Convenience"
|
||||
},
|
||||
"settingsDefaultScopeLevel": {
|
||||
"message": "Default scope level:",
|
||||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0": {
|
||||
"message": "Global",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "Domain",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"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": {
|
||||
"message": "Spoof <code><noscript></code> tags when 1st-party scripts are blocked",
|
||||
"description": "This appears in the Settings pane in the dashboard"
|
||||
},
|
||||
"settingsCloudStorageEnabled": {
|
||||
"message": "Enable cloud storage support",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips": {
|
||||
"message": "Disable tooltips",
|
||||
"description": ""
|
||||
},
|
||||
"privacyPageTitle": {
|
||||
"message": "nuTensor – Privacy",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesPrompt": {
|
||||
"message": "Delete blocked cookies",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesHelp": {
|
||||
"message": "<p>Blacklisted cookies are not prevented by <i>nuTensor</i> from entering your browser. However they are prevented from leaving your browser, which is what really matters. Not blocking cookies before they enter your browser gives you the opportunity to be informed that a site tried to use cookies, and furthermore to inspect their contents if you wish.</p><p>Once these blacklisted cookies have been accounted for by <i>nuTensor</i>, they can be removed from your browser if you wish so.</p><p><b>Important note:</b> Extensions can make web requests during the course of their normal operation. These requests can result in cookies being created in the browser. If the hostname from where a cookie originate is not whitelisted, the cookie will be removed from the browser by <i>nuTensor</i> if this option is checked. So be sure that the hostname(s) with which an extension communicate is whitelisted.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt1": {
|
||||
"message": "Delete non-blocked session cookies ",
|
||||
"description": "First part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt2": {
|
||||
"message": " minutes after the last time they have been used",
|
||||
"description": "Second part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesHelp": {
|
||||
"message": "<p><a href='http://www.w3.org/2001/tag/2010/09/ClientSideStorage.html'>W3C</a>: “A session cookie ... is erased when you end the browser session. The session cookie is stored in temporary memory and is not retained after the browser is closed.”</p><p>Except that this <a href='https://code.google.com/p/chromium/issues/detail?id=128513'>might not be happening</a> in some browsers. Also, to some, having to close the browser in order for the session cookies to clear might not be early enough.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStoragePrompt": {
|
||||
"message": "Delete <a href='https://en.wikipedia.org/wiki/Web_storage'>local storage</a> content set by blocked hostnames",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStorageHelp": {
|
||||
"message": "TODO",
|
||||
"description": ""
|
||||
},
|
||||
"privacyClearCachePrompt1": {
|
||||
"message": "Clear browser cache every",
|
||||
"description": "First part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCachePrompt2": {
|
||||
"message": "minutes",
|
||||
"description": "Second part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCacheHelp": {
|
||||
"message": "<p>Some web sites are really bent on tracking you, so much that they will use not-so-nice tricks to work around whatever measures you take in order to not be tracked.</p><p>A few of these tricks rely<sup>[1, 2]</sup> on the <a href='https://en.wikipedia.org/wiki/Web_cache'>browser cache</a>, which content is often long lasting since rarely will users take the time to regularly clear their browser cache.</p><p>There is little inconvenience to clear the browser cache regularly (likelihood is that you won't notice when it happens), and the benefit is to prevent these obnoxious trackers from invading your privacy.</p><p>Check this option to have <i>nuTensor</i> do it for you, at the interval you wish.</p><p>[1] <a href='https://grepular.com/Preventing_Web_Tracking_via_the_Browser_Cache'>“Preventing Web Tracking via the Browser Cache”</a>\n[2] <a href='http://lucb1e.com/rp/cookielesscookies/'>“Cookieless cookies”</a></p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererPrompt": {
|
||||
"message": "Spoof <a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referrer</a> string of third-party requests",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererHelp": {
|
||||
"message": "From Wikipedia:<blockquote>HTTP referer is an HTTP header field that identifies the address of the webpage that linked to the resource being requested. ... <b>Because referer information can violate privacy, some web browsers allow the user to disable the sending of referer information.</b></blockquote>If this setting is checked, <i>nuTensor</i> will spoof the HTTP referrer information if the domain name of the HTTP referrer is third-party to the domain name of net request.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentPrompt": {
|
||||
"message": "Strict HTTPS: forbid mixed content",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentHelp": {
|
||||
"message": "<p>From <a href='https://developer.mozilla.org/en-US/docs/Security/MixedContent'>Mozilla Developer Network</a>:</p><blockquote>If [a] HTTPS page includes content retrieved through regular, cleartext HTTP, then the connection is only partially encrypted: the unencrypted content is accessible to sniffers and can be modified by man-in-the-middle attackers, and therefore the connection is not safeguarded anymore. When a webpage exhibits this behavior, it is called a mixed content page.</blockquote>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingPrompt": {
|
||||
"message": "Block all <a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>hyperlink auditing</a> attempts",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingHelp": {
|
||||
"message": "<p>Hyperlink auditing is a mechanism which allow a party, <b>any party</b>, to be informed about which link a user clicked on a particular web page. It is essentially a tracking feature: it allows a web site, or any third-party to that web site, to be informed about which link you clicked on which one of its web pages. The sole purpose is to track your browsing activity.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesPermanentHeader": {
|
||||
"message": "Permanent rules",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesTemporaryHeader": {
|
||||
"message": "Temporary rules",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesRevert": {
|
||||
"message": "Revert",
|
||||
"description": "Will remove all temporary rules"
|
||||
},
|
||||
"userRulesCommit": {
|
||||
"message": "Commit",
|
||||
"description": "Will save all temporary rules"
|
||||
},
|
||||
"userRulesEdit": {
|
||||
"message": "Edit",
|
||||
"description": "Will enable manual-edit mode (textarea)"
|
||||
},
|
||||
"userRulesEditSave": {
|
||||
"message": "Save",
|
||||
"description": "Will save manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesEditDicard": {
|
||||
"message": "Discard",
|
||||
"description": "Will discard manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesImport": {
|
||||
"message": "Import from file...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesExport": {
|
||||
"message": "Export to file...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesFormatHint": {
|
||||
"message": "See this page for rule syntax.",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesDefaultFileName": {
|
||||
"message": "my-umatrix-rules.txt",
|
||||
"description": "default file name to use"
|
||||
},
|
||||
"assetsHostsSection": {
|
||||
"message": "Hosts files",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt": {
|
||||
"message": "All hostnames in a hosts file are loaded as blacklisted hostnames in the global scope.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesStats": {
|
||||
"message": "{{blockedHostnameCount}} distinct blocked hostnames from:",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPerFileStats": {
|
||||
"message": "{{used}} used out of {{total}}",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesLastUpdate": {
|
||||
"message": "Last update: {{ago}}",
|
||||
"description": "English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
|
||||
},
|
||||
"hostsFilesApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Auto-update assets",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
"message": "Update now",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPurgeAll": {
|
||||
"message": "Purge all caches",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsHint": {
|
||||
"message": "Import external assets here: \nOne URL per line; invalid URLs will be silently ignored.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsParse": {
|
||||
"message": "Parse",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListPurge": {
|
||||
"message": "purge cache",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListNew": {
|
||||
"message": "new version available",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListObsolete": {
|
||||
"message": "outdated",
|
||||
"description": ""
|
||||
},
|
||||
"assetsRecipesSection": {
|
||||
"message": "Ruleset recipes",
|
||||
"description": "header to identify the ruleset files section"
|
||||
},
|
||||
"assetsRecipesSummary": {
|
||||
"message": "Ruleset recipes are imported from the popup panel <em>on demand</em>, i.e. <b>only</b> through user interaction.",
|
||||
"description": ""
|
||||
},
|
||||
"assetsImportLabel": {
|
||||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/releases'>Change log</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutStorageUsed": {
|
||||
"message": "Storage used: {{storageUsed}} bytes",
|
||||
"description": ""
|
||||
},
|
||||
"aboutDoc": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki'>Documentation</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutPermissions": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki/Permissions'>Permissions</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode": {
|
||||
"message": "Source code (GPLv3)",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssues": {
|
||||
"message": "Issue tracker",
|
||||
"description": "Text for a link to official issue tracker"
|
||||
},
|
||||
"aboutContributors": {
|
||||
"message": "Contributors",
|
||||
"description": "English: Contributors"
|
||||
},
|
||||
"aboutCodeContributors": {
|
||||
"message": "Code:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssueContributors": {
|
||||
"message": "Issues:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutTranslationContributors": {
|
||||
"message": "Translations:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutUserDataHeader": {
|
||||
"message": "Your data",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupButton": {
|
||||
"message": "Back up to file...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupFilename": {
|
||||
"message": "my-umatrix-backup.txt",
|
||||
"description": "default filename to use"
|
||||
},
|
||||
"aboutRestoreButton": {
|
||||
"message": "Restore from file...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutRestoreConfirm": {
|
||||
"message": "All your settings will be overwritten using data backed up on {{time}}, and nuTensor will restart.\n\nOverwrite all existing settings using backed up data?",
|
||||
"description": "Message asking user to confirm restore"
|
||||
},
|
||||
"aboutRestoreError": {
|
||||
"message": "The data could not be read or is invalid",
|
||||
"description": ""
|
||||
},
|
||||
"aboutOr": {
|
||||
"message": "... or ...",
|
||||
"description": "English: ... or ..."
|
||||
},
|
||||
"aboutResetButton": {
|
||||
"message": "Reset to default settings",
|
||||
"description": "English: Reset to default settings"
|
||||
},
|
||||
"aboutResetConfirm": {
|
||||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "nuTensor has prevented the following page from loading:",
|
||||
"description": "English: nuTensor has prevented the following page from loading:"
|
||||
},
|
||||
"mainBlockedPrompt2": {
|
||||
"message": "Because of the following rule",
|
||||
"description": "English: Because of the following rule"
|
||||
},
|
||||
"mainBlockedNoParamsPrompt": {
|
||||
"message": "without parameters",
|
||||
"description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
|
||||
},
|
||||
"mainBlockedBack": {
|
||||
"message": "Go back",
|
||||
"description": "English: Go back"
|
||||
},
|
||||
"mainBlockedClose": {
|
||||
"message": "Close",
|
||||
"description": "English: Close"
|
||||
},
|
||||
"commandRevertAll": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistPageDomain": {
|
||||
"message": "Temporarily whitelist page domain",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistAll": {
|
||||
"message": "Temporarily whitelist all",
|
||||
"description": ""
|
||||
},
|
||||
"commandOpenDashboard": {
|
||||
"message": "Open dashboard",
|
||||
"description": ""
|
||||
},
|
||||
"elapsedOneMinuteAgo": {
|
||||
"message": "a minute ago",
|
||||
"description": "English: a minute ago"
|
||||
},
|
||||
"elapsedManyMinutesAgo": {
|
||||
"message": "{{value}} minutes ago",
|
||||
"description": "English: {{value}} minutes ago"
|
||||
},
|
||||
"elapsedOneHourAgo": {
|
||||
"message": "an hour ago",
|
||||
"description": "English: an hour ago"
|
||||
},
|
||||
"elapsedManyHoursAgo": {
|
||||
"message": "{{value}} hours ago",
|
||||
"description": "English: {{value}} hours ago"
|
||||
},
|
||||
"elapsedOneDayAgo": {
|
||||
"message": "a day ago",
|
||||
"description": "English: a day ago"
|
||||
},
|
||||
"elapsedManyDaysAgo": {
|
||||
"message": "{{value}} days ago",
|
||||
"description": "English: {{value}} days ago"
|
||||
},
|
||||
"showDashboardButton": {
|
||||
"message": "Dashboard",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"showLoggerButton": {
|
||||
"message": "Logger",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"cloudPush": {
|
||||
"message": "Export to cloud storage",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudPull": {
|
||||
"message": "Import from cloud storage",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudNoData": {
|
||||
"message": "...\n...",
|
||||
"description": ""
|
||||
},
|
||||
"cloudDeviceNamePrompt": {
|
||||
"message": "This device name:",
|
||||
"description": "used as a prompt for the user to provide a custom device name"
|
||||
},
|
||||
"genericSubmit": {
|
||||
"message": "Submit",
|
||||
"description": "for generic 'submit' buttons"
|
||||
},
|
||||
"genericRevert": {
|
||||
"message": "Revert",
|
||||
"description": "for generic 'revert' buttons"
|
||||
},
|
||||
"errorCantConnectTo": {
|
||||
"message": "Network error: Unable to connect to {{url}}",
|
||||
"description": ""
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@ -1,866 +0,0 @@
|
||||
{
|
||||
"extName": {
|
||||
"message": "nuTensor",
|
||||
"description": ""
|
||||
},
|
||||
"extShortDesc": {
|
||||
"message": "قم بالاشارة ثم انقر لكي تقوم بسماح او منع اي اتصال يجري عن طريق المتصفح. يمكنك منع السكربتات، أطر، اعلانات، موقع مثل الفيسبوك، الخ.",
|
||||
"description": "this will be used as short description in web stores: MUST BE 132 characters OR LESS"
|
||||
},
|
||||
"dashboardPageName": {
|
||||
"message": "nuTensor — لوحة التحكم",
|
||||
"description": ""
|
||||
},
|
||||
"loggerPageName": {
|
||||
"message": "nuTensor — المسجل",
|
||||
"description": "Title for the logger window"
|
||||
},
|
||||
"settingsPageName": {
|
||||
"message": "الإعدادات",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"privacyPageName": {
|
||||
"message": "خصوصية",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"statsPageName": {
|
||||
"message": "الإحصائيات",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"userRulesPageName": {
|
||||
"message": "قواعدي",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
"message": "مصادر",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "المزيد",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
"message": "حول البرنامج",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"allPrettyName": {
|
||||
"message": "الكل",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cookiePrettyName": {
|
||||
"message": "كوكي",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cssPrettyName": {
|
||||
"message": "ستايل",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"imagePrettyName": {
|
||||
"message": "صورة",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "ميديا",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
"message": "إضافة",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"scriptPrettyName": {
|
||||
"message": "سكربت",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
"message": "إطار",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"otherPrettyName": {
|
||||
"message": "أخرى",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"matrixNoNetTrafficPrompt": {
|
||||
"message": "لم يحدث اي اتصال بهذا التبويب حتى الآن.",
|
||||
"description": ""
|
||||
},
|
||||
"matrixLocalScopeTip": {
|
||||
"message": "Select a local scope to see/create rules which apply only in that scope",
|
||||
"description": "Tool tip for the local scope button"
|
||||
},
|
||||
"matrixGlobalScopeTip": {
|
||||
"message": "Select the global scope to see/create rules which apply everywhere",
|
||||
"description": "Tool tip for the global scope button"
|
||||
},
|
||||
"matrixMtxButtonTip": {
|
||||
"message": "تعطيل / تمكين ميزة التصفيه لهذا النطاق.",
|
||||
"description": "Tool tip for matrix button"
|
||||
},
|
||||
"matrixPersistButtonTip": {
|
||||
"message": "حفظ جميع التغييرات المؤقتة لهذا النطاق.",
|
||||
"description": "Tool tip for the persist button"
|
||||
},
|
||||
"matrixRevertButtonTip": {
|
||||
"message": "الرجوع عن التغييرات المؤقتة لهذا النطاق.",
|
||||
"description": "Tool tip for the revert local permission button"
|
||||
},
|
||||
"matrixReloadButton": {
|
||||
"message": "إعادة تحميل الصفحة.",
|
||||
"description": "Tool tip for the reload button"
|
||||
},
|
||||
"matrix1stPartyLabel": {
|
||||
"message": "الجزء الاول",
|
||||
"description": "1st-party"
|
||||
},
|
||||
"matrixBlacklistedHostnames": {
|
||||
"message": "القائمة السوداء {{count}}",
|
||||
"description": "Appears in the metadata row of bottom-most group: **mind the limited width**"
|
||||
},
|
||||
"matrixSwitchNoMixedContent": {
|
||||
"message": "الاتصال الآمن الصارم",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoWorker": {
|
||||
"message": "منع web workers",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchReferrerSpoof": {
|
||||
"message": "الإحالات بالتحايل",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoscriptSpoof": {
|
||||
"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"
|
||||
},
|
||||
"matrixLoggerMenuEntry": {
|
||||
"message": "الذهاب إلى السجل",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixDashboardMenuEntry": {
|
||||
"message": "انتقل إلى لوحة التحكم",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound": {
|
||||
"message": "لم يتم العثور على أي صفحة ويب",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "nuTensor – إحصائيات",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageGenericStats": {
|
||||
"message": "إحصاءات عامة",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookieHeadersFoiled": {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_cookie'>HTTP ملف تعريف الارتباط</a> أحبطت foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRefererHeadersFoiled": {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP تشير</a> headers أحبطت: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageHyperlinkAuditingFoiled": {
|
||||
"message": "<a href='http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing'> مراجعة الارتباط التشعبي</a> أحبطت محاولات: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookiesRemoved": {
|
||||
"message": "ملفات تعريف الارتباط المحلية إزالة: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLocalStoragesCleared": {
|
||||
"message": "<a href='http://diveintohtml5.info/storage.html'> المخازن المحلية</a> إفراغ: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageBrowserCacheCleared": {
|
||||
"message": "مسح تخزين المستعرض: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedStats": {
|
||||
"message": "إحصائيات مفصلة",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedAllPages": {
|
||||
"message": "الكل",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedBehindTheScenePage": {
|
||||
"message": "خلف الكواليس",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOverview": {
|
||||
"message": "نظرة عامة",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRequests": {
|
||||
"message": "الطلبات",
|
||||
"description": "header for the stat type column"
|
||||
},
|
||||
"statsPageAllowed": {
|
||||
"message": "السماح",
|
||||
"description": "header for the allowed requests column"
|
||||
},
|
||||
"statsPageBlocked": {
|
||||
"message": "حظر",
|
||||
"description": "header for the blocked requests column"
|
||||
},
|
||||
"statsPageAll": {
|
||||
"message": "الكل",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePages": {
|
||||
"message": "الصفحات",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookies": {
|
||||
"message": "ملفات تعريف الارتباط",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCSS": {
|
||||
"message": "ستايل",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageImages": {
|
||||
"message": "الصُوَرْ",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePlugins": {
|
||||
"message": "الإضافات",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageScripts": {
|
||||
"message": "البرامج النصية",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageXHRs": {
|
||||
"message": "XHRs",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageFrames": {
|
||||
"message": "إطارات",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOthers": {
|
||||
"message": "الآخرين",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailed": {
|
||||
"message": "مسجل",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLogSizePrompt1": {
|
||||
"message": "تذكر الماضي",
|
||||
"description": "First part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizePrompt2": {
|
||||
"message": "HTTP طلبات <b>لكل صفحة</b>.",
|
||||
"description": "Second part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizeHelp": {
|
||||
"message": "<p>You can inspect details of the most recent raw HTTP requests which have been made by a web page (see below).</p><p>This is mostly useful to advanced users who want to investigate exactly what a web page has been doing. But logging these HTTP requests requires memory, and if you don't care about this technical information, then memory is being wasted.</p><p>Hence this field which lets you adjust the maximum number of the most recent HTTP requests which are to be logged for further inspection.</p><p>Enter “<code>0</code>” to turn off detailed logging (and consequently reduce the memory footprint of <i>nuTensor</i>).</p>",
|
||||
"description": "To help user understand the purpose of the log size value"
|
||||
},
|
||||
"statsPageRefresh": {
|
||||
"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": "nuTensor – إعدادات",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayHeader": {
|
||||
"message": "مظهر",
|
||||
"description": "header for matrix settings used in Settings page"
|
||||
},
|
||||
"settingsMatrixDisplayTextSizePrompt": {
|
||||
"message": "حجم الخط:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsIconBadgeEnabled": {
|
||||
"message": "عرض عدد من طلبات متميزة على أيقونة",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayColorBlind": {
|
||||
"message": "عمي الألوان",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixConvenienceHeader": {
|
||||
"message": "ملاءمة",
|
||||
"description": "English: Convenience"
|
||||
},
|
||||
"settingsDefaultScopeLevel": {
|
||||
"message": "المستوى الافتراضي للمنظار:",
|
||||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0": {
|
||||
"message": "عام",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "النطاق",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
"message": "موقع",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "انهيار نائبا من عناصر المحظورة",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"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": {
|
||||
"message": "محاكات وسمات <code><noscript></code> عند حظر سكريبتات الطرف الأول",
|
||||
"description": "This appears in the Settings pane in the dashboard"
|
||||
},
|
||||
"settingsCloudStorageEnabled": {
|
||||
"message": "تمكين دعم سحابة التخزين",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips": {
|
||||
"message": "الغي التمليحات",
|
||||
"description": ""
|
||||
},
|
||||
"privacyPageTitle": {
|
||||
"message": "nuTensor – الخصوصية",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesPrompt": {
|
||||
"message": "حذف ملفات تعريف الارتباط المحظورة.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesHelp": {
|
||||
"message": "<p>Blacklisted cookies are not prevented by <i>nuTensor</i> from entering your browser. However they are prevented from leaving your browser, which is what really matters. Not blocking cookies before they enter your browser gives you the opportunity to be informed that a site tried to use cookies, and furthermore to inspect their contents if you wish.</p><p>Once these blacklisted cookies have been accounted for by <i>nuTensor</i>, they can be removed from your browser if you wish so.</p><p><b>Important note:</b> Extensions can make web requests during the course of their normal operation. These requests can result in cookies being created in the browser. If the hostname from where a cookie originate is not whitelisted, the cookie will be removed from the browser by <i>nuTensor</i> if this option is checked. So be sure that the hostname(s) with which an extension communicate is whitelisted.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt1": {
|
||||
"message": "حذف ملفات تعريف الارتباط جلسة ",
|
||||
"description": "First part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt2": {
|
||||
"message": " دقيقة بعد آخر مرة استخدمت فيها.",
|
||||
"description": "Second part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesHelp": {
|
||||
"message": "<p><a href='http://www.w3.org/2001/tag/2010/09/ClientSideStorage.html'>W3C</a>: “A session cookie ... is erased when you end the browser session. The session cookie is stored in temporary memory and is not retained after the browser is closed.”</p><p>Except that this <a href='https://code.google.com/p/chromium/issues/detail?id=128513'>might not be happening</a> in some browsers. Also, to some, having to close the browser in order for the session cookies to clear might not be early enough.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStoragePrompt": {
|
||||
"message": "Delete <a href='https://en.wikipedia.org/wiki/Web_storage'>local storage</a> content set by blocked hostnames",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStorageHelp": {
|
||||
"message": "TODO",
|
||||
"description": ""
|
||||
},
|
||||
"privacyClearCachePrompt1": {
|
||||
"message": "مخبأ المتصفح واضح كل",
|
||||
"description": "First part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCachePrompt2": {
|
||||
"message": "دقائق.",
|
||||
"description": "Second part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCacheHelp": {
|
||||
"message": "<p>Some web sites are really bent on tracking you, so much that they will use not-so-nice tricks to work around whatever measures you take in order to not be tracked.</p><p>A few of these tricks rely<sup style='font-size:smaller'>[1, 2]</sup> on the <a href='https://en.wikipedia.org/wiki/Web_cache'>browser cache</a>, which content is often long lasting since rarely will users take the time to regularly clear their browser cache.</p><p>There is little inconvenience to clear the browser cache regularly (likelihood is that you won't notice when it happens), and the benefit is to prevent these obnoxious trackers from invading your privacy.</p><p>Check this option to have <i>nuTensor</i> do it for you, at the interval you wish.</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": {
|
||||
"message": "Spoof <a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referrer</a> string of third-party requests.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererHelp": {
|
||||
"message": "<p>From Wikipedia:</p><blockquote>HTTP referer is an HTTP header field that identifies the address of the webpage that linked to the resource being requested. ... <b>Because referer information can violate privacy, some web browsers allow the user to disable the sending of referer information.</b></blockquote><p>If this setting is checked, <i>nuTensor</i> will spoof the HTTP referrer information if the domain name of the HTTP referrer is third-party to the domain name of net request.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentPrompt": {
|
||||
"message": "Strict HTTPS: لا سمح المحتوى المختلط.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentHelp": {
|
||||
"message": "<p>From <a href='https://developer.mozilla.org/en-US/docs/Security/MixedContent'>Mozilla Developer Network</a>:</p><blockquote>If [a] HTTPS page includes content retrieved through regular, cleartext HTTP, then the connection is only partially encrypted: the unencrypted content is accessible to sniffers and can be modified by man-in-the-middle attackers, and therefore the connection is not safeguarded anymore. When a webpage exhibits this behavior, it is called a mixed content page.</blockquote>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingPrompt": {
|
||||
"message": "Block all <a href='http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing'>hyperlink auditing</a> attempts.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingHelp": {
|
||||
"message": "<p>Hyperlink auditing is a mechanism which allow a party, <b>any party</b>, to be informed about which link a user clicked on a particular web page. It is essentially a tracking feature: it allows a web site, or any third-party to that web site, to be informed about which link you clicked on which one of its web pages. The sole purpose is to track your browsing activity.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesPermanentHeader": {
|
||||
"message": "قواعد دائمة",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesTemporaryHeader": {
|
||||
"message": "القواعد المؤقتة",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesRevert": {
|
||||
"message": "إرجاع",
|
||||
"description": "Will remove all temporary rules"
|
||||
},
|
||||
"userRulesCommit": {
|
||||
"message": "يلتزم",
|
||||
"description": "Will save all temporary rules"
|
||||
},
|
||||
"userRulesEdit": {
|
||||
"message": "تحرير",
|
||||
"description": "Will enable manual-edit mode (textarea)"
|
||||
},
|
||||
"userRulesEditSave": {
|
||||
"message": "حفظ",
|
||||
"description": "Will save manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesEditDicard": {
|
||||
"message": "تخلص",
|
||||
"description": "Will discard manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesImport": {
|
||||
"message": "إستيراد من ملف...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesExport": {
|
||||
"message": "تصدير إلى ملف...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesFormatHint": {
|
||||
"message": "رؤية هذه الصفحة لتركيب القاعدة.",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesDefaultFileName": {
|
||||
"message": "my-umatrix-rules.txt",
|
||||
"description": "default file name to use"
|
||||
},
|
||||
"assetsHostsSection": {
|
||||
"message": "ملفات الـ hosts",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt": {
|
||||
"message": "يتم تحميل جميع أسماء المضيفين في ملف المضيفين كما المضيفين القائمة السوداء في نطاق عالمي.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesStats": {
|
||||
"message": "{{blockedHostnameCount}} أسماء المضيفين منعت متميزة عن:",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPerFileStats": {
|
||||
"message": "{{used}} تستخدم من {{total}}",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesLastUpdate": {
|
||||
"message": "اخر تحديث: {{ago}}",
|
||||
"description": "English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
|
||||
},
|
||||
"hostsFilesApplyChanges": {
|
||||
"message": "تطبيق التغييرات",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Auto-update assets",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
"message": "تحديث الآن",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPurgeAll": {
|
||||
"message": "تطهير جميع مخابئ",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsHint": {
|
||||
"message": "One URL per line. Lines prefixed with ‘#’ will be ignored. Invalid URLs will be silently ignored.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsParse": {
|
||||
"message": "تحليل",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListPurge": {
|
||||
"message": "مخبأ تطهير",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListNew": {
|
||||
"message": "يوجد إصدار جديد",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListObsolete": {
|
||||
"message": "عفا عليها الزمن",
|
||||
"description": ""
|
||||
},
|
||||
"assetsRecipesSection": {
|
||||
"message": "Ruleset recipes",
|
||||
"description": "header to identify the ruleset files section"
|
||||
},
|
||||
"assetsRecipesSummary": {
|
||||
"message": "Ruleset recipes are imported from the popup panel <em>on demand</em>, i.e. <b>only</b> through user interaction.",
|
||||
"description": ""
|
||||
},
|
||||
"assetsImportLabel": {
|
||||
"message": "استيراد...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "تحذير! غير إعدادات الضبط الخام على مسؤوليتك الخاصة.",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/releases'>تغيير log</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutStorageUsed": {
|
||||
"message": "التخزين المستخدمة: {{storageUsed}} بايت",
|
||||
"description": ""
|
||||
},
|
||||
"aboutDoc": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki'>توثيق</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutPermissions": {
|
||||
"message": "<a href='https://github.com/gorhill/httpswitchboard/wiki/Permissions'>ضوابط</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode": {
|
||||
"message": "شفرة المصدر (GPLv3)",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssues": {
|
||||
"message": "الخطا وقضايا",
|
||||
"description": "Text for a link to official issue tracker"
|
||||
},
|
||||
"aboutContributors": {
|
||||
"message": "المساهمون",
|
||||
"description": "English: Contributors"
|
||||
},
|
||||
"aboutCodeContributors": {
|
||||
"message": "رمز:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssueContributors": {
|
||||
"message": "قضايا:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutTranslationContributors": {
|
||||
"message": "الترجمات:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutUserDataHeader": {
|
||||
"message": "البيانات الخاصة بك",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupButton": {
|
||||
"message": "النسخ الاحتياطي لملف...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupFilename": {
|
||||
"message": "my-umatrix-backup.txt",
|
||||
"description": "default filename to use"
|
||||
},
|
||||
"aboutRestoreButton": {
|
||||
"message": "استعادة من ملف...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutRestoreConfirm": {
|
||||
"message": "سيتم الكتابة فوق كل ما تبذلونه من إعدادات استخدام البيانات احتياطيا على {{time}}، \n\nوسوف nuTensor إعادة تشغيل. الكتابة عن الإعدادات الموجودة باستخدام البيانات احتياطيا؟?",
|
||||
"description": "Message asking user to confirm restore"
|
||||
},
|
||||
"aboutRestoreError": {
|
||||
"message": "البيانات لا يمكن قراءة أو غير صالح",
|
||||
"description": ""
|
||||
},
|
||||
"aboutOr": {
|
||||
"message": "... او ...",
|
||||
"description": "English: ... or ..."
|
||||
},
|
||||
"aboutResetButton": {
|
||||
"message": "إعادة تعيين إلى الإعدادات الافتراضية",
|
||||
"description": "English: Reset to default settings"
|
||||
},
|
||||
"aboutResetConfirm": {
|
||||
"message": "الحذر! سيؤدي هذا إلى إزالة كافة الإعدادات المخصصة الخاصة بك. هل أنت متأكد أنك تريد المتابعة؟?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "منعت nuTensor على الصفحة التالية من التحميل:",
|
||||
"description": "English: nuTensor has prevented the following page from loading:"
|
||||
},
|
||||
"mainBlockedPrompt2": {
|
||||
"message": "بسبب القاعدة التالية",
|
||||
"description": "English: Because of the following rule"
|
||||
},
|
||||
"mainBlockedNoParamsPrompt": {
|
||||
"message": "without parameters",
|
||||
"description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
|
||||
},
|
||||
"mainBlockedBack": {
|
||||
"message": "الرجوع للخلف",
|
||||
"description": "English: Go back"
|
||||
},
|
||||
"mainBlockedClose": {
|
||||
"message": "مغلق",
|
||||
"description": "English: Close"
|
||||
},
|
||||
"commandRevertAll": {
|
||||
"message": "إعادة كافة التغييرات المؤقتة",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistPageDomain": {
|
||||
"message": "نطاق الصفحة القائمة البيضاء مؤقتا",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistAll": {
|
||||
"message": "مؤقتا القائمة البيضاء فقط",
|
||||
"description": ""
|
||||
},
|
||||
"commandOpenDashboard": {
|
||||
"message": "فتح لوحة القيادة",
|
||||
"description": ""
|
||||
},
|
||||
"elapsedOneMinuteAgo": {
|
||||
"message": "منذ 1 دقيقة",
|
||||
"description": "English: a minute ago"
|
||||
},
|
||||
"elapsedManyMinutesAgo": {
|
||||
"message": "{{value}} دقائق مضت",
|
||||
"description": "English: {{value}} minutes ago"
|
||||
},
|
||||
"elapsedOneHourAgo": {
|
||||
"message": "قبل ساعه",
|
||||
"description": "English: an hour ago"
|
||||
},
|
||||
"elapsedManyHoursAgo": {
|
||||
"message": "{{value}} منذ ساعات",
|
||||
"description": "English: {{value}} hours ago"
|
||||
},
|
||||
"elapsedOneDayAgo": {
|
||||
"message": "منذ يوم",
|
||||
"description": "English: a day ago"
|
||||
},
|
||||
"elapsedManyDaysAgo": {
|
||||
"message": "{{value}} أيام مضت",
|
||||
"description": "English: {{value}} days ago"
|
||||
},
|
||||
"showDashboardButton": {
|
||||
"message": "لوحة التحكم",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"showLoggerButton": {
|
||||
"message": "مسجل",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"cloudPush": {
|
||||
"message": "التصدير إلى سحابة التخزين",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudPull": {
|
||||
"message": "الاستيراد من سحابة التخزين",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudNoData": {
|
||||
"message": "...\n...",
|
||||
"description": ""
|
||||
},
|
||||
"cloudDeviceNamePrompt": {
|
||||
"message": "هذا اسم الجهاز:",
|
||||
"description": "used as a prompt for the user to provide a custom device name"
|
||||
},
|
||||
"genericSubmit": {
|
||||
"message": "تأكيد",
|
||||
"description": "for generic 'submit' buttons"
|
||||
},
|
||||
"genericRevert": {
|
||||
"message": "إرجاع",
|
||||
"description": "for generic 'revert' buttons"
|
||||
},
|
||||
"errorCantConnectTo": {
|
||||
"message": "خطأ في الشبكة: غير قادر على الاتصال {{url}}",
|
||||
"description": ""
|
||||
},
|
||||
"genericApplyChanges": {
|
||||
"message": "تطبيق التغييرات",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
@ -1,866 +0,0 @@
|
||||
{
|
||||
"extName": {
|
||||
"message": "uম্যাট্রিক্স",
|
||||
"description": ""
|
||||
},
|
||||
"extShortDesc": {
|
||||
"message": "আপনার ব্রাউজার দ্বারা করা যে কোন শ্রেণীর অনুরোধ অনুমতি/নিষেধ করতে পয়েন্ট ও ক্লিক করুন। স্ক্রিপ্ট, আইফ্রেম, বিজ্ঞাপন, ফেসবুক, ইত্যাদি ব্লক এটি ব্যবহার করুন।",
|
||||
"description": "this will be used as short description in web stores: MUST BE 132 characters OR LESS"
|
||||
},
|
||||
"dashboardPageName": {
|
||||
"message": "uম্যাট্রিক্স — ড্যাশবোর্ড",
|
||||
"description": ""
|
||||
},
|
||||
"loggerPageName": {
|
||||
"message": "nuTensor — লগার",
|
||||
"description": "Title for the logger window"
|
||||
},
|
||||
"settingsPageName": {
|
||||
"message": "সেটিংস",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"privacyPageName": {
|
||||
"message": "গোপনীয়তা",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"statsPageName": {
|
||||
"message": "পরিসংখ্যান",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"userRulesPageName": {
|
||||
"message": "আমার নিয়ম",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
"message": "Assets",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "আরও",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
"message": "সম্পর্কে",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"allPrettyName": {
|
||||
"message": "সব",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cookiePrettyName": {
|
||||
"message": "কুকি",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cssPrettyName": {
|
||||
"message": "css",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"imagePrettyName": {
|
||||
"message": "চিত্র",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "মিডিয়া",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
"message": "প্লাগইন",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"scriptPrettyName": {
|
||||
"message": "স্ক্রিপ্ট",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
"message": "ফ্রেম",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"otherPrettyName": {
|
||||
"message": "অন্যান্য",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"matrixNoNetTrafficPrompt": {
|
||||
"message": "এখন পর্যন্ত এই ট্যাবের জন্য কোন নেট ট্রাফিক দেখা যায়নি।",
|
||||
"description": ""
|
||||
},
|
||||
"matrixLocalScopeTip": {
|
||||
"message": "Select a local scope to see/create rules which apply only in that scope",
|
||||
"description": "Tool tip for the local scope button"
|
||||
},
|
||||
"matrixGlobalScopeTip": {
|
||||
"message": "Select the global scope to see/create rules which apply everywhere",
|
||||
"description": "Tool tip for the global scope button"
|
||||
},
|
||||
"matrixMtxButtonTip": {
|
||||
"message": "এই ব্যাপ্তির জন্য ম্যাট্রিক্স পরিশোধন সক্রিয়/নিষ্ক্রিয় করুন।",
|
||||
"description": "Tool tip for matrix button"
|
||||
},
|
||||
"matrixPersistButtonTip": {
|
||||
"message": "এই ব্যাপ্তির জন্য সব অস্থায়ী পরিবর্তনগুলি সংরক্ষণ করুন।",
|
||||
"description": "Tool tip for the persist button"
|
||||
},
|
||||
"matrixRevertButtonTip": {
|
||||
"message": "এই ব্যাপ্তির জন্য অস্থায়ী পরিবর্তনগুলি প্রত্যাবর্তন করুন।",
|
||||
"description": "Tool tip for the revert local permission button"
|
||||
},
|
||||
"matrixReloadButton": {
|
||||
"message": "পৃষ্ঠাটি পুনঃলোড করুন।",
|
||||
"description": "Tool tip for the reload button"
|
||||
},
|
||||
"matrix1stPartyLabel": {
|
||||
"message": "১ম-দল",
|
||||
"description": "1st-party"
|
||||
},
|
||||
"matrixBlacklistedHostnames": {
|
||||
"message": "{{count}}টি কালোতালিকাভুক্ত হোস্টেরনাম",
|
||||
"description": "Appears in the metadata row of bottom-most group: **mind the limited width**"
|
||||
},
|
||||
"matrixSwitchNoMixedContent": {
|
||||
"message": "স্ক্রিপ্ট HTTPS",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoWorker": {
|
||||
"message": "Forbid web workers",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchReferrerSpoof": {
|
||||
"message": "রেফারার স্পুফিং",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoscriptSpoof": {
|
||||
"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"
|
||||
},
|
||||
"matrixLoggerMenuEntry": {
|
||||
"message": "লগারে যান",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixDashboardMenuEntry": {
|
||||
"message": "ড্যাশবোর্ডে যান",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound": {
|
||||
"message": "কোনও ওয়েব পাতা পাওয়া যায়নি",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "নিয়মগুলি আমদানি করুন",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "নিয়মগুলি সংরক্ষণ করুন",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "uম্যাট্রিক্স – পরিসংখ্যান",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageGenericStats": {
|
||||
"message": "জেনেরিক পরিসংখ্যান",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookieHeadersFoiled": {
|
||||
"message": "<a href='https://bn.wikipedia.org/wiki/এইচটিটিপি_কুকি'>এইচটিটিপি কুকি</a> হেডার ব্যর্থ: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRefererHeadersFoiled": {
|
||||
"message": "<a href='https://bn.wikipedia.org/wiki/এইচটিটিপি_রেফার'>এইচটিটিপি রেফার</a> হেডার ব্যর্থ: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageHyperlinkAuditingFoiled": {
|
||||
"message": "<a href='http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing'>হাইপারলিঙ্ক নিরীক্ষণ</a> প্রচেষ্টা ব্যর্থ: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookiesRemoved": {
|
||||
"message": "স্থানীয় কুকি সরানো হয়েছে: {{count}}টি",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLocalStoragesCleared": {
|
||||
"message": "<a href='http://diveintohtml5.info/storage.html'>স্থানীয় সংগ্রহস্থল</a> খালি: {{count}}টি",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageBrowserCacheCleared": {
|
||||
"message": "ব্রাউজারের ক্যাশে পরিষ্কার হয়েছে: {{count}}টি",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedStats": {
|
||||
"message": "বিস্তারিত পরিসংখ্যান",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedAllPages": {
|
||||
"message": "সব",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedBehindTheScenePage": {
|
||||
"message": "পর্দার আড়ালে",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOverview": {
|
||||
"message": "সংক্ষিপ্ত বিবরণ",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRequests": {
|
||||
"message": "অনুরোধ",
|
||||
"description": "header for the stat type column"
|
||||
},
|
||||
"statsPageAllowed": {
|
||||
"message": "অনুমোদিত",
|
||||
"description": "header for the allowed requests column"
|
||||
},
|
||||
"statsPageBlocked": {
|
||||
"message": "অবরুদ্ধ",
|
||||
"description": "header for the blocked requests column"
|
||||
},
|
||||
"statsPageAll": {
|
||||
"message": "সব",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePages": {
|
||||
"message": "পৃষ্ঠা",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookies": {
|
||||
"message": "কুকি",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCSS": {
|
||||
"message": "CSS",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageImages": {
|
||||
"message": "চিত্র",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePlugins": {
|
||||
"message": "প্লাগইন",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageScripts": {
|
||||
"message": "স্ক্রিপ্ট",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageXHRs": {
|
||||
"message": "XHRs",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageFrames": {
|
||||
"message": "ফ্রেম",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOthers": {
|
||||
"message": "অন্যান্য",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailed": {
|
||||
"message": "লগার",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLogSizePrompt1": {
|
||||
"message": "শেষটি মনে রাখুন",
|
||||
"description": "First part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizePrompt2": {
|
||||
"message": "<b>পাতা প্রতি</b> HTTP অনুরোধ।",
|
||||
"description": "Second part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizeHelp": {
|
||||
"message": "<p>আপনি একটি ওয়েব পাতা দ্বারা তৈরিকৃত সাম্প্রতিকতম কাঁচা HTTP অনুরোধের বিস্তারিত পরিদর্শন করতে পারেন (নিচে দেখুন)।</p><p>এটি উন্নত ব্যবহারকারীদের জন্য মূলত দরকারী যারা একটি ওয়েব পাতা কি কাজ করছে তা তদন্ত করতে চান। কিন্তু এই HTTP অনুরোধে লগিং করার জন্য মেমরি প্রয়োজন, এবং আপনি যদি এই প্রযুক্তিগত তথ্যের প্রতি যত্নশীল না হোন, তাহলে মেমরির অপচয় হবে।</p><p>তাই এই ক্ষেত্র যা সর্বোচ্চ সংখ্যক আপনার সবচেয়ে সাম্প্রতিক HTTP অনুরোধ সমন্বয় করতে দেয় যার ফলে আরও পরিদর্শনের জন্য লগকৃত করা হয়।</p><p>বিস্তারিত লগিং বন্ধ করতে “<code>0</code>” লিখুন (এবং ফলস্বরূপ <i>uম্যাট্রিক্সের</i> মেমরির পদচিহ্ন কমে)।</p>",
|
||||
"description": "To help user understand the purpose of the log size value"
|
||||
},
|
||||
"statsPageRefresh": {
|
||||
"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": ""
|
||||
},
|
||||
"settingsMatrixDisplayHeader": {
|
||||
"message": "উপস্থিতি",
|
||||
"description": "header for matrix settings used in Settings page"
|
||||
},
|
||||
"settingsMatrixDisplayTextSizePrompt": {
|
||||
"message": "লেখার মাপ:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsIconBadgeEnabled": {
|
||||
"message": "আইকনের উপর স্বতন্ত্র অনুরোধের সংখ্যা দেখান",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayColorBlind": {
|
||||
"message": "বর্ণান্ধ বন্ধুত্বপূর্ণ",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixConvenienceHeader": {
|
||||
"message": "সুবিধা",
|
||||
"description": "English: Convenience"
|
||||
},
|
||||
"settingsDefaultScopeLevel": {
|
||||
"message": "Default scope level:",
|
||||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0": {
|
||||
"message": "বৈশ্বিক",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "ডোমেইন",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
"message": "সাইট",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "অবরুদ্ধ উপাদান সংকোচনের স্থানধারক",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"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": {
|
||||
"message": "Spoof <code><noscript></code> tags when 1st-party scripts are blocked",
|
||||
"description": "This appears in the Settings pane in the dashboard"
|
||||
},
|
||||
"settingsCloudStorageEnabled": {
|
||||
"message": "ক্লাউড সঞ্চয়স্থান সমর্থন সক্রিয় করুন",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips": {
|
||||
"message": "পরামর্শ নিষ্ক্রিয় করুন",
|
||||
"description": ""
|
||||
},
|
||||
"privacyPageTitle": {
|
||||
"message": "uম্যাট্রিক্স – গোপনীয়তা",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesPrompt": {
|
||||
"message": "অবরুদ্ধ কুকি মুছুন।",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesHelp": {
|
||||
"message": "<p>কালোতালিকাভুক্ত কুকি <i>uম্যাট্রিক্স</i> দ্বারা আপনার ব্রাউজারে প্রবেশ করা থেকে প্রতিহত করা হয়না। তবে তাদের আপনার ব্রাউজার থেকে ছেড়ে চলে যাওয়ার সময় প্রতিহত করা হয়, যা সত্যিই গুরুত্বপূর্ণ। তারা আপনার ব্রাউজার প্রবেশ করার আগে কুকি অবরুদ্ধ না করা আপনাকে অবগত করার সুযোগ করে দেয় যে একটি সাইট কুকি ব্যবহার করার চেষ্টা করছে, এবং উপরন্তু তাদের বিষয়বস্তুর পরিদর্শন করা (যদি আপনি চান)।</p><p><i>uম্যাট্রিক্স</i> দ্বারা এইসব কালোতালিকাভুক্ত কুকি একবার দায়ী করা হলে, আপনি চাইলে তাদের আপনি আপনার ব্রাউজার থেকে মুছে ফেলতে পারেন।</p><p><b>গুরুত্বপূর্ণ তথ্য:</b> এক্সটেনশানগুলি তাদের স্বাভাবিক অপারেশনের সময় ওয়েব অনুরোধ করতে পারে। এই অনুরোধগুলির ফলাফল ব্রাউজারে কুকি তৈরি করা হচ্ছে হতে পারে। একটি কুকির উৎপত্তি সাদাতালিকাভুক্ত হোস্টনেম থেকে না হলে, <i>uম্যাট্রিক্স</i> দ্বারা কুকি ব্রাউজার থেকে সরানো হবে যদি এই অপশনটি সক্রিয় করা থাকে। তাই নিশ্চিত হোন যে একটি এক্সটেনশনের যোগাযোগকৃত হোস্টনেম(গুলি) সাদাতালিকাভুক্ত।</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt1": {
|
||||
"message": "অ-অবরুদ্ধ সেশন কুকি মুছুন ",
|
||||
"description": "First part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt2": {
|
||||
"message": " মিনিটের যেটি সর্বশেষ সময়ে ব্যবহৃত হয়েছিল।",
|
||||
"description": "Second part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesHelp": {
|
||||
"message": "<p><a href='http://www.w3.org/2001/tag/2010/09/ClientSideStorage.html'>W3C</a>: “যখন আপনি ব্রাউজারের সেশন শেষ করেন একটি সেশন কুকি তখন মুছে ফেলা হয়। সেশন কুকি অস্থায়ী মেমরির মধ্যে সংরক্ষিত হয় এবং ব্রাউজার বন্ধ করার পরে অপরিবর্তিত রাখা হয় না।”</p><p>সেটি বাদে এটি কিছু ব্রাউজারে <a href='https://code.google.com/p/chromium/issues/detail?id=128513'>নাও ঘটতে পারে</a>। এছাড়াও, কিছু ক্ষেত্রে, সেশন কুকি পরিস্কার করার জন্য ব্রাউজার বন্ধ হলে প্রথম দিকে যথেষ্ট নাও হতে পারে।</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStoragePrompt": {
|
||||
"message": "অবরুদ্ধ হোস্টনেম দ্বারা স্থাপিত <a href='https://bn.wikipedia.org/wiki/ওয়েব_স্টোরেজ'>স্থানীয় সঞ্চয়ের</a> সামগ্রী মুছে ফেলুন",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStorageHelp": {
|
||||
"message": "করণীয়",
|
||||
"description": ""
|
||||
},
|
||||
"privacyClearCachePrompt1": {
|
||||
"message": "ব্রাউজার ক্যাশে সাফ করুন প্রতি",
|
||||
"description": "First part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCachePrompt2": {
|
||||
"message": "মিনিটে।",
|
||||
"description": "Second part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCacheHelp": {
|
||||
"message": "<p>কিছু কিছু ওয়েব সাইট, আপনাকে ট্র্যাকিং করতে সত্যিই নমিত, তারা আপনাকে অনুসরণ করার জন্য এমন সব কৌশল নেয় যা দেখে মনে হবে তারা আপনাকে অনুসরণ করছে না।</p><p>এই রকম কিছু কৌশল<sup style='font-size:smaller'>[১, ২]</sup><a href='https://bn.wikipedia.org/wiki/ওয়েব_ক্যাশে'>ব্রাউজারের ক্যাশে</a> নির্ভর, যার যা বিষয়বস্তু প্রায়ই দীর্ঘস্থায়ী হয়, যেহেতু খুব কমই ব্যবহারকারীদের নিয়মিত তাদের ব্রাউজারের ক্যাশে সাফ করতে সময় ব্যয় করেন।</p><p>নিয়মিত ব্রাউজারের ক্যাশে সাফ সামান্য অসুবিধা আছে (সম্ভাবত আপনি লক্ষ্য করবেন না যখন এটা ঘটে), এবং সুবিধা হল আপনার গোপনীয়তা আক্রমণ করা থেকে এইসব আপত্তিকর ব্যক্তি অনুসরণ প্রতিরোধ করা।</p><p>এই অপশন সক্রিয় করলে <i>uম্যাট্রিক্স</i> আপনার ইচ্ছামত অন্তর, এটা আপনার জন্য করবে।</p><p style='font-size:smaller'>[1] <a href='https://grepular.com/Preventing_Web_Tracking_via_the_Browser_Cache'>“ব্রাউজারের ক্যাশে”</a><br>[2] <a href='http://lucb1e.com/rp/cookielesscookies/'>“কুকিবিহীন কুকির মাধ্যমে ওয়েব ট্র্যাকিং রোধ করবে”</a></p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererPrompt": {
|
||||
"message": "<a href='https://bn.wikipedia.org/wiki/এইচটিটিপি_রেফার'>এইচটিটিপি রেফারের</a> তৃতীয় পক্ষের অনুরোধের স্ট্রিং স্পুফ করুন।",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererHelp": {
|
||||
"message": "<p>উইকিপিডিয়া থেকে:</p><blockquote>এইচটিটিপি রেফারার একটি এইচটিটিপি হেডার ক্ষেত্র যা ওয়েবপাতার ঠিকানা চিহ্নিত করে যা অনুরোধকৃত রিসোর্সে সংযুক্ত থাকে।... <b>যেহেতু রেফারার তথ্য গোপনীয়তার নীতিমালা ভঙ্গ করতে পারে, কিছু ওয়েব ব্রাউজারে ব্যবহারকারীদের রেফারার তথ্য পাঠানো নিষ্ক্রিয় করার অনুমতি দেয়।</b></blockquote><p>যদি সেটিংসে এটি নির্বাচন করা থাকে, <i>uম্যাট্রিক্স</i> HTTP রেফারার তথ্য স্পুফ করবে যদি ডোমেইনের নামের নেট অনুরোধে HTTP রেফারারের ডোমেইনের নাম তৃতীয় পক্ষের হয়।</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentPrompt": {
|
||||
"message": "কড়া HTTPS: মিশ্রিত সামগ্রী নিষেধ।",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentHelp": {
|
||||
"message": "<p><a href='https://developer.mozilla.org/en-US/docs/Security/MixedContent'>মোজিলা ডেভেলপার নেটওয়ার্ক</a> থেকে:</p><blockquote>যদি HTTPS পাতা নিয়মিত, স্পষ্ট পাঠ HTTP-র মাধ্যমে বিষয়বস্তুর উদ্ধার অন্তর্ভুক্ত করে, তাহলে সংযোগ শুধুমাত্র আংশিকভাবে এনক্রিপ্ট করা হয়: এনক্রিপশনবিহীন বিষয়বস্তু স্নিফার থেকে প্রবেশযোগ্য এবং মধ্য আক্রমণকারীদের দ্বারা পরিবর্তনযোগ্য, এবং সেইজন্য সংযোগ আর সুরক্ষিত থাকে না। যখন একটি ওয়েবপাতা এই আচরণ প্রদর্শন করে, তখন এটিকে একটি মিশ্র বিষয়বস্তু পাতা বলা হয়।</blockquote>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingPrompt": {
|
||||
"message": "সব <a href='http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing'>হাইপারলিঙ্ক নিরীক্ষণ</a> প্রচেষ্টা অবরুদ্ধ।",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingHelp": {
|
||||
"message": "<p>হাইপারলিঙ্ক নিরীক্ষণ একটি প্রক্রিয়া যা একটি দল, <b>যে কোন দলকে</b> একজন ব্যবহারকারীর একটি নির্দিষ্ট ওয়েব পাতার লিঙ্ক ক্লিক করা সম্পর্কে অবগত করার অনুমতি দেয়। এটি মূলত একটি ট্র্যাকিং বৈশিষ্ট্য: যা একটি ওয়েব সাইট বা কোনো তৃতীয় পক্ষকে আপনি কোন ওয়েব সাইটের কোন ওয়েব পাতা ক্লিক করেছেন তা অবগত করার অনুমতি দেয়। একমাত্র উদ্দেশ্য হল আপনার ব্রাউজিং কার্যকলাপ অনুসরণ করা।</p>",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesPermanentHeader": {
|
||||
"message": "স্থায়ী নিয়ম",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesTemporaryHeader": {
|
||||
"message": "অস্থায়ী নিয়ম",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesRevert": {
|
||||
"message": "প্রত্যাবর্তন",
|
||||
"description": "Will remove all temporary rules"
|
||||
},
|
||||
"userRulesCommit": {
|
||||
"message": "কমিট",
|
||||
"description": "Will save all temporary rules"
|
||||
},
|
||||
"userRulesEdit": {
|
||||
"message": "সম্পাদনা",
|
||||
"description": "Will enable manual-edit mode (textarea)"
|
||||
},
|
||||
"userRulesEditSave": {
|
||||
"message": "সংরক্ষণ",
|
||||
"description": "Will save manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesEditDicard": {
|
||||
"message": "বাতিল করুন",
|
||||
"description": "Will discard manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesImport": {
|
||||
"message": "ফাইল থেকে আমদানি...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesExport": {
|
||||
"message": "ফাইলে রপ্তানি...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesFormatHint": {
|
||||
"message": "নিয়ম শব্দবিন্যাসের জন্য এই পাতাটি দেখুন।",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesDefaultFileName": {
|
||||
"message": "amar-umatrix-niyom.txt",
|
||||
"description": "default file name to use"
|
||||
},
|
||||
"assetsHostsSection": {
|
||||
"message": "Hosts files",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt": {
|
||||
"message": "বৈশ্বিক ব্যাপ্তিতে একটি হোস্ট ফাইলের সব হোস্টনেম কালোতালিকাভুক্ত হোস্টনেম হিসাবে লোড করা হয়।",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesStats": {
|
||||
"message": "এখান থেকে {{blockedHostnameCount}}টি স্বতন্ত্র অবরুদ্ধ হোস্টনেম:",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPerFileStats": {
|
||||
"message": "{{total}}টির মধ্যে {{used}}টি ব্যবহৃত",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesLastUpdate": {
|
||||
"message": "সর্বশেষ হালনাগাদ: {{ago}}",
|
||||
"description": "English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
|
||||
},
|
||||
"hostsFilesApplyChanges": {
|
||||
"message": "পরিবর্তনগুলি প্রয়োগ",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Auto-update assets",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
"message": "এখনই হালনাগাদ করুন",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPurgeAll": {
|
||||
"message": "সব ক্যাশে শোধন করুন",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsHint": {
|
||||
"message": "লাইন প্রতি একটি URL। ‘#’ সহ উপসর্গ লাইন উপেক্ষা করা হবে। অকার্যকর URL গুলি নীরবে উপেক্ষা করা হবে।",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsParse": {
|
||||
"message": "পার্স",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListPurge": {
|
||||
"message": "ক্যাশে শোধন করুন",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListNew": {
|
||||
"message": "নতুন সংস্করণ উপলব্ধ",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListObsolete": {
|
||||
"message": "পুরোনো",
|
||||
"description": ""
|
||||
},
|
||||
"assetsRecipesSection": {
|
||||
"message": "Ruleset recipes",
|
||||
"description": "header to identify the ruleset files section"
|
||||
},
|
||||
"assetsRecipesSummary": {
|
||||
"message": "Ruleset recipes are imported from the popup panel <em>on demand</em>, i.e. <b>only</b> through user interaction.",
|
||||
"description": ""
|
||||
},
|
||||
"assetsImportLabel": {
|
||||
"message": "আমদানি...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/releases'>পরিবর্তন লগ</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutStorageUsed": {
|
||||
"message": "সংগ্রহস্থল ব্যবহার: {{storageUsed}} বাইট",
|
||||
"description": ""
|
||||
},
|
||||
"aboutDoc": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki'>নথিপত্র</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutPermissions": {
|
||||
"message": "<a href='https://github.com/gorhill/httpswitchboard/wiki/Permissions'>অনুমতি</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode": {
|
||||
"message": "উত্স কোড (GPLv৩)",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssues": {
|
||||
"message": "বাগ ও ইস্যু",
|
||||
"description": "Text for a link to official issue tracker"
|
||||
},
|
||||
"aboutContributors": {
|
||||
"message": "অবদানকারী",
|
||||
"description": "English: Contributors"
|
||||
},
|
||||
"aboutCodeContributors": {
|
||||
"message": "কোড:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssueContributors": {
|
||||
"message": "ইস্যু:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutTranslationContributors": {
|
||||
"message": "অনুবাদ:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutUserDataHeader": {
|
||||
"message": "আপনার উপাত্ত",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupButton": {
|
||||
"message": "ফাইলে ব্যাকআপ...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupFilename": {
|
||||
"message": "amar-umatrix-backup.txt",
|
||||
"description": "default filename to use"
|
||||
},
|
||||
"aboutRestoreButton": {
|
||||
"message": "ফাইল থেকে পুনরুদ্ধার...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutRestoreConfirm": {
|
||||
"message": "{{time}}-এর ডেটা ব্যাকআপ ব্যবহার করে আপনার সেটিংস পুনঃলিখিত হবে, এবং uম্যাট্রিক্স পুনরায় চালু হবে।\n\nডেটা ব্যাকআপ ব্যবহার করে সমস্ত বিদ্যমান সেটিংস পুনঃলিখবেন?",
|
||||
"description": "Message asking user to confirm restore"
|
||||
},
|
||||
"aboutRestoreError": {
|
||||
"message": "উপাত্তটি পড়া যায়নি বা অকার্যকর",
|
||||
"description": ""
|
||||
},
|
||||
"aboutOr": {
|
||||
"message": "... বা ...",
|
||||
"description": "English: ... or ..."
|
||||
},
|
||||
"aboutResetButton": {
|
||||
"message": "ডিফল্ট সেটিংসে পুন:স্থাপন করুন",
|
||||
"description": "English: Reset to default settings"
|
||||
},
|
||||
"aboutResetConfirm": {
|
||||
"message": "সতর্কতা! এটি আপনার সব স্বনির্ধারিত সেটিংস সরিয়ে দেবে? আপনি কি অগ্রসর হতে চান?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "uম্যাট্রিক্স নিচের পৃষ্ঠা লোড করাকে প্রতিহত করেছে:",
|
||||
"description": "English: nuTensor has prevented the following page from loading:"
|
||||
},
|
||||
"mainBlockedPrompt2": {
|
||||
"message": "নিম্নলিখিত নিয়মের কারণে",
|
||||
"description": "English: Because of the following rule"
|
||||
},
|
||||
"mainBlockedNoParamsPrompt": {
|
||||
"message": "without parameters",
|
||||
"description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
|
||||
},
|
||||
"mainBlockedBack": {
|
||||
"message": "ফিরে যান",
|
||||
"description": "English: Go back"
|
||||
},
|
||||
"mainBlockedClose": {
|
||||
"message": "বন্ধ",
|
||||
"description": "English: Close"
|
||||
},
|
||||
"commandRevertAll": {
|
||||
"message": "সব অস্থায়ী পরিবর্তন প্রত্যাবর্তন করুন",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistPageDomain": {
|
||||
"message": "সাময়িকরূপে সাদাতালিকার পাতা ডোমেইন",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistAll": {
|
||||
"message": "সাময়িকরূপে সাদাতালিকার সব",
|
||||
"description": ""
|
||||
},
|
||||
"commandOpenDashboard": {
|
||||
"message": "ড্যাশবোর্ড খুলুন",
|
||||
"description": ""
|
||||
},
|
||||
"elapsedOneMinuteAgo": {
|
||||
"message": "এক মিনিট আগে",
|
||||
"description": "English: a minute ago"
|
||||
},
|
||||
"elapsedManyMinutesAgo": {
|
||||
"message": "{{value}} মিনিট আগে",
|
||||
"description": "English: {{value}} minutes ago"
|
||||
},
|
||||
"elapsedOneHourAgo": {
|
||||
"message": "এক ঘণ্টা আগে",
|
||||
"description": "English: an hour ago"
|
||||
},
|
||||
"elapsedManyHoursAgo": {
|
||||
"message": "{{value}} ঘণ্টা আগে",
|
||||
"description": "English: {{value}} hours ago"
|
||||
},
|
||||
"elapsedOneDayAgo": {
|
||||
"message": "এক দিন আগে",
|
||||
"description": "English: a day ago"
|
||||
},
|
||||
"elapsedManyDaysAgo": {
|
||||
"message": "{{value}} দিন আগে",
|
||||
"description": "English: {{value}} days ago"
|
||||
},
|
||||
"showDashboardButton": {
|
||||
"message": "ড্যাশবোর্ড",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"showLoggerButton": {
|
||||
"message": "লগার",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"cloudPush": {
|
||||
"message": "ক্লাউড সঞ্চয়স্থানে রপ্তানি করুন",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudPull": {
|
||||
"message": "ক্লাউড সঞ্চয়স্থান থেকে আমদানি করুন",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudNoData": {
|
||||
"message": "...\n...",
|
||||
"description": ""
|
||||
},
|
||||
"cloudDeviceNamePrompt": {
|
||||
"message": "এই ডিভাইসের নাম:",
|
||||
"description": "used as a prompt for the user to provide a custom device name"
|
||||
},
|
||||
"genericSubmit": {
|
||||
"message": "জমা দিন",
|
||||
"description": "for generic 'submit' buttons"
|
||||
},
|
||||
"genericRevert": {
|
||||
"message": "প্রত্যাবর্তন",
|
||||
"description": "for generic 'revert' buttons"
|
||||
},
|
||||
"errorCantConnectTo": {
|
||||
"message": "নেটওয়ার্ক ত্রুটি: {{url}} -এ সংযোগ করতে অক্ষম",
|
||||
"description": ""
|
||||
},
|
||||
"genericApplyChanges": {
|
||||
"message": "পরিবর্তনগুলি প্রয়োগ করুন",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "Copy to clipboard",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
@ -1,866 +0,0 @@
|
||||
{
|
||||
"extName": {
|
||||
"message": "nuTensor",
|
||||
"description": ""
|
||||
},
|
||||
"extShortDesc": {
|
||||
"message": "Point & click to forbid/allow any class of requests made by your browser. Use it to block scripts, iframes, ads, facebook, etc.",
|
||||
"description": "this will be used as short description in web stores: MUST BE 132 characters OR LESS"
|
||||
},
|
||||
"dashboardPageName": {
|
||||
"message": "nuTensor — Dashboard",
|
||||
"description": ""
|
||||
},
|
||||
"loggerPageName": {
|
||||
"message": "nuTensor — Logger",
|
||||
"description": "Title for the logger window"
|
||||
},
|
||||
"settingsPageName": {
|
||||
"message": "Settings",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"privacyPageName": {
|
||||
"message": "Privacy",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"statsPageName": {
|
||||
"message": "Statistics",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"userRulesPageName": {
|
||||
"message": "My rules",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
"message": "Assets",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "More",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
"message": "About",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"allPrettyName": {
|
||||
"message": "all",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cookiePrettyName": {
|
||||
"message": "cookie",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cssPrettyName": {
|
||||
"message": "css",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"imagePrettyName": {
|
||||
"message": "image",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "media",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
"message": "plugin",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"scriptPrettyName": {
|
||||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
"message": "frame",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"otherPrettyName": {
|
||||
"message": "other",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"matrixNoNetTrafficPrompt": {
|
||||
"message": "No net traffic seen for this tab so far.",
|
||||
"description": ""
|
||||
},
|
||||
"matrixLocalScopeTip": {
|
||||
"message": "Select a local scope to see/create rules which apply only in that scope",
|
||||
"description": "Tool tip for the local scope button"
|
||||
},
|
||||
"matrixGlobalScopeTip": {
|
||||
"message": "Select the global scope to see/create rules which apply everywhere",
|
||||
"description": "Tool tip for the global scope button"
|
||||
},
|
||||
"matrixMtxButtonTip": {
|
||||
"message": "Disable/enable matrix filtering for this scope",
|
||||
"description": "Tool tip for matrix button"
|
||||
},
|
||||
"matrixPersistButtonTip": {
|
||||
"message": "Save all temporary changes for this scope",
|
||||
"description": "Tool tip for the persist button"
|
||||
},
|
||||
"matrixRevertButtonTip": {
|
||||
"message": "Revert temporary changes for this scope",
|
||||
"description": "Tool tip for the revert local permission button"
|
||||
},
|
||||
"matrixReloadButton": {
|
||||
"message": "Reload the page. \nPress Shift to bypass the browser cache.",
|
||||
"description": "Tool tip for the reload button"
|
||||
},
|
||||
"matrix1stPartyLabel": {
|
||||
"message": "1st-party",
|
||||
"description": "1st-party"
|
||||
},
|
||||
"matrixBlacklistedHostnames": {
|
||||
"message": "{{count}} blacklisted hostname(s)",
|
||||
"description": "Appears in the metadata row of bottom-most group: **mind the limited width**"
|
||||
},
|
||||
"matrixSwitchNoMixedContent": {
|
||||
"message": "Forbid mixed content",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoWorker": {
|
||||
"message": "Forbid web workers",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchReferrerSpoof": {
|
||||
"message": "Spoof <code>Referer</code> header",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoscriptSpoof": {
|
||||
"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"
|
||||
},
|
||||
"matrixLoggerMenuEntry": {
|
||||
"message": "Go to logger",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixDashboardMenuEntry": {
|
||||
"message": "Go to dashboard",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound": {
|
||||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "nuTensor – Statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageGenericStats": {
|
||||
"message": "Generic statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookieHeadersFoiled": {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_cookie'>HTTP cookie</a> headers foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRefererHeadersFoiled": {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referer</a> headers foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageHyperlinkAuditingFoiled": {
|
||||
"message": "<a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>Hyperlink auditing</a> attempts foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookiesRemoved": {
|
||||
"message": "Local cookies removed: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLocalStoragesCleared": {
|
||||
"message": "<a href='http://diveintohtml5.info/storage.html'>Local storages</a> emptied: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageBrowserCacheCleared": {
|
||||
"message": "Browser caches cleared: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedStats": {
|
||||
"message": "Detailed statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedAllPages": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedBehindTheScenePage": {
|
||||
"message": "Behind the scene",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOverview": {
|
||||
"message": "Overview",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRequests": {
|
||||
"message": "Requests",
|
||||
"description": "header for the stat type column"
|
||||
},
|
||||
"statsPageAllowed": {
|
||||
"message": "Allowed",
|
||||
"description": "header for the allowed requests column"
|
||||
},
|
||||
"statsPageBlocked": {
|
||||
"message": "Blocked",
|
||||
"description": "header for the blocked requests column"
|
||||
},
|
||||
"statsPageAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePages": {
|
||||
"message": "Pages",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookies": {
|
||||
"message": "Cookies",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCSS": {
|
||||
"message": "CSS",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageImages": {
|
||||
"message": "Images",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePlugins": {
|
||||
"message": "Plugins",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageScripts": {
|
||||
"message": "Scripts",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageXHRs": {
|
||||
"message": "XHRs",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageFrames": {
|
||||
"message": "Frames",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOthers": {
|
||||
"message": "Others",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailed": {
|
||||
"message": "Logger",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLogSizePrompt1": {
|
||||
"message": "Remember the last",
|
||||
"description": "First part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizePrompt2": {
|
||||
"message": "HTTP requests <b>per page</b>",
|
||||
"description": "Second part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizeHelp": {
|
||||
"message": "<p>You can inspect details of the most recent raw HTTP requests which have been made by a web page (see below).</p><p>This is mostly useful to advanced users who want to investigate exactly what a web page has been doing. But logging these HTTP requests requires memory, and if you don't care about this technical information, then memory is being wasted.</p><p>Hence this field which lets you adjust the maximum number of the most recent HTTP requests which are to be logged for further inspection.</p><p>Enter “<code>0</code>” to turn off detailed logging (and consequently reduce the memory footprint of <i>nuTensor</i>).</p>",
|
||||
"description": "To help user understand the purpose of the log size value"
|
||||
},
|
||||
"statsPageRefresh": {
|
||||
"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": "nuTensor – Settings",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayHeader": {
|
||||
"message": "Matrix",
|
||||
"description": "header for matrix settings used in Settings page"
|
||||
},
|
||||
"settingsMatrixDisplayTextSizePrompt": {
|
||||
"message": "Text size:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsIconBadgeEnabled": {
|
||||
"message": "Show the number of blocked resources on the icon",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayColorBlind": {
|
||||
"message": "Color-blind friendly",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixConvenienceHeader": {
|
||||
"message": "Convenience",
|
||||
"description": "English: Convenience"
|
||||
},
|
||||
"settingsDefaultScopeLevel": {
|
||||
"message": "Default scope level:",
|
||||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0": {
|
||||
"message": "Global",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "Domain",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"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": {
|
||||
"message": "Spoof <code><noscript></code> tags when 1st-party scripts are blocked",
|
||||
"description": "This appears in the Settings pane in the dashboard"
|
||||
},
|
||||
"settingsCloudStorageEnabled": {
|
||||
"message": "Enable cloud storage support",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips": {
|
||||
"message": "Disable tooltips",
|
||||
"description": ""
|
||||
},
|
||||
"privacyPageTitle": {
|
||||
"message": "nuTensor – Privacy",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesPrompt": {
|
||||
"message": "Delete blocked cookies",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesHelp": {
|
||||
"message": "<p>Blacklisted cookies are not prevented by <i>nuTensor</i> from entering your browser. However they are prevented from leaving your browser, which is what really matters. Not blocking cookies before they enter your browser gives you the opportunity to be informed that a site tried to use cookies, and furthermore to inspect their contents if you wish.</p><p>Once these blacklisted cookies have been accounted for by <i>nuTensor</i>, they can be removed from your browser if you wish so.</p><p><b>Important note:</b> Extensions can make web requests during the course of their normal operation. These requests can result in cookies being created in the browser. If the hostname from where a cookie originate is not whitelisted, the cookie will be removed from the browser by <i>nuTensor</i> if this option is checked. So be sure that the hostname(s) with which an extension communicate is whitelisted.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt1": {
|
||||
"message": "Delete non-blocked session cookies ",
|
||||
"description": "First part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt2": {
|
||||
"message": " minutes after the last time they have been used",
|
||||
"description": "Second part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesHelp": {
|
||||
"message": "<p><a href='http://www.w3.org/2001/tag/2010/09/ClientSideStorage.html'>W3C</a>: “A session cookie ... is erased when you end the browser session. The session cookie is stored in temporary memory and is not retained after the browser is closed.”</p><p>Except that this <a href='https://code.google.com/p/chromium/issues/detail?id=128513'>might not be happening</a> in some browsers. Also, to some, having to close the browser in order for the session cookies to clear might not be early enough.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStoragePrompt": {
|
||||
"message": "Delete <a href='https://en.wikipedia.org/wiki/Web_storage'>local storage</a> content set by blocked hostnames",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStorageHelp": {
|
||||
"message": "TODO",
|
||||
"description": ""
|
||||
},
|
||||
"privacyClearCachePrompt1": {
|
||||
"message": "Clear browser cache every",
|
||||
"description": "First part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCachePrompt2": {
|
||||
"message": "minutes",
|
||||
"description": "Second part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCacheHelp": {
|
||||
"message": "<p>Some web sites are really bent on tracking you, so much that they will use not-so-nice tricks to work around whatever measures you take in order to not be tracked.</p><p>A few of these tricks rely<sup>[1, 2]</sup> on the <a href='https://en.wikipedia.org/wiki/Web_cache'>browser cache</a>, which content is often long lasting since rarely will users take the time to regularly clear their browser cache.</p><p>There is little inconvenience to clear the browser cache regularly (likelihood is that you won't notice when it happens), and the benefit is to prevent these obnoxious trackers from invading your privacy.</p><p>Check this option to have <i>nuTensor</i> do it for you, at the interval you wish.</p><p>[1] <a href='https://grepular.com/Preventing_Web_Tracking_via_the_Browser_Cache'>“Preventing Web Tracking via the Browser Cache”</a>\n[2] <a href='http://lucb1e.com/rp/cookielesscookies/'>“Cookieless cookies”</a></p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererPrompt": {
|
||||
"message": "Spoof <a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referrer</a> string of third-party requests",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererHelp": {
|
||||
"message": "From Wikipedia:<blockquote>HTTP referer is an HTTP header field that identifies the address of the webpage that linked to the resource being requested. ... <b>Because referer information can violate privacy, some web browsers allow the user to disable the sending of referer information.</b></blockquote>If this setting is checked, <i>nuTensor</i> will spoof the HTTP referrer information if the domain name of the HTTP referrer is third-party to the domain name of net request.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentPrompt": {
|
||||
"message": "Strict HTTPS: forbid mixed content",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentHelp": {
|
||||
"message": "<p>From <a href='https://developer.mozilla.org/en-US/docs/Security/MixedContent'>Mozilla Developer Network</a>:</p><blockquote>If [a] HTTPS page includes content retrieved through regular, cleartext HTTP, then the connection is only partially encrypted: the unencrypted content is accessible to sniffers and can be modified by man-in-the-middle attackers, and therefore the connection is not safeguarded anymore. When a webpage exhibits this behavior, it is called a mixed content page.</blockquote>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingPrompt": {
|
||||
"message": "Block all <a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>hyperlink auditing</a> attempts",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingHelp": {
|
||||
"message": "<p>Hyperlink auditing is a mechanism which allow a party, <b>any party</b>, to be informed about which link a user clicked on a particular web page. It is essentially a tracking feature: it allows a web site, or any third-party to that web site, to be informed about which link you clicked on which one of its web pages. The sole purpose is to track your browsing activity.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesPermanentHeader": {
|
||||
"message": "Permanent rules",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesTemporaryHeader": {
|
||||
"message": "Temporary rules",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesRevert": {
|
||||
"message": "Revert",
|
||||
"description": "Will remove all temporary rules"
|
||||
},
|
||||
"userRulesCommit": {
|
||||
"message": "Commit",
|
||||
"description": "Will save all temporary rules"
|
||||
},
|
||||
"userRulesEdit": {
|
||||
"message": "Edit",
|
||||
"description": "Will enable manual-edit mode (textarea)"
|
||||
},
|
||||
"userRulesEditSave": {
|
||||
"message": "Save",
|
||||
"description": "Will save manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesEditDicard": {
|
||||
"message": "Discard",
|
||||
"description": "Will discard manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesImport": {
|
||||
"message": "Import from file...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesExport": {
|
||||
"message": "Export to file...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesFormatHint": {
|
||||
"message": "See this page for rule syntax.",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesDefaultFileName": {
|
||||
"message": "my-umatrix-rules.txt",
|
||||
"description": "default file name to use"
|
||||
},
|
||||
"assetsHostsSection": {
|
||||
"message": "Hosts files",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt": {
|
||||
"message": "All hostnames in a hosts file are loaded as blacklisted hostnames in the global scope.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesStats": {
|
||||
"message": "{{blockedHostnameCount}} distinct blocked hostnames from:",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPerFileStats": {
|
||||
"message": "{{used}} used out of {{total}}",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesLastUpdate": {
|
||||
"message": "Last update: {{ago}}",
|
||||
"description": "English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
|
||||
},
|
||||
"hostsFilesApplyChanges": {
|
||||
"message": "Apply changes",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Auto-update assets",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
"message": "Update now",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPurgeAll": {
|
||||
"message": "Purge all caches",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsHint": {
|
||||
"message": "Import external assets here: \nOne URL per line; invalid URLs will be silently ignored.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsParse": {
|
||||
"message": "Parse",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListPurge": {
|
||||
"message": "purge cache",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListNew": {
|
||||
"message": "new version available",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListObsolete": {
|
||||
"message": "outdated",
|
||||
"description": ""
|
||||
},
|
||||
"assetsRecipesSection": {
|
||||
"message": "Ruleset recipes",
|
||||
"description": "header to identify the ruleset files section"
|
||||
},
|
||||
"assetsRecipesSummary": {
|
||||
"message": "Ruleset recipes are imported from the popup panel <em>on demand</em>, i.e. <b>only</b> through user interaction.",
|
||||
"description": ""
|
||||
},
|
||||
"assetsImportLabel": {
|
||||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/releases'>Change log</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutStorageUsed": {
|
||||
"message": "Storage used: {{storageUsed}} bytes",
|
||||
"description": ""
|
||||
},
|
||||
"aboutDoc": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki'>Documentation</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutPermissions": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki/Permissions'>Permissions</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode": {
|
||||
"message": "Source code (GPLv3)",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssues": {
|
||||
"message": "Issue tracker",
|
||||
"description": "Text for a link to official issue tracker"
|
||||
},
|
||||
"aboutContributors": {
|
||||
"message": "Contributors",
|
||||
"description": "English: Contributors"
|
||||
},
|
||||
"aboutCodeContributors": {
|
||||
"message": "Code:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssueContributors": {
|
||||
"message": "Issues:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutTranslationContributors": {
|
||||
"message": "Translations:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutUserDataHeader": {
|
||||
"message": "Your data",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupButton": {
|
||||
"message": "Back up to file...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupFilename": {
|
||||
"message": "my-umatrix-backup.txt",
|
||||
"description": "default filename to use"
|
||||
},
|
||||
"aboutRestoreButton": {
|
||||
"message": "Restore from file...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutRestoreConfirm": {
|
||||
"message": "All your settings will be overwritten using data backed up on {{time}}, and nuTensor will restart.\n\nOverwrite all existing settings using backed up data?",
|
||||
"description": "Message asking user to confirm restore"
|
||||
},
|
||||
"aboutRestoreError": {
|
||||
"message": "The data could not be read or is invalid",
|
||||
"description": ""
|
||||
},
|
||||
"aboutOr": {
|
||||
"message": "... or ...",
|
||||
"description": "English: ... or ..."
|
||||
},
|
||||
"aboutResetButton": {
|
||||
"message": "Reset to default settings",
|
||||
"description": "English: Reset to default settings"
|
||||
},
|
||||
"aboutResetConfirm": {
|
||||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "nuTensor has prevented the following page from loading:",
|
||||
"description": "English: nuTensor has prevented the following page from loading:"
|
||||
},
|
||||
"mainBlockedPrompt2": {
|
||||
"message": "Because of the following rule",
|
||||
"description": "English: Because of the following rule"
|
||||
},
|
||||
"mainBlockedNoParamsPrompt": {
|
||||
"message": "without parameters",
|
||||
"description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
|
||||
},
|
||||
"mainBlockedBack": {
|
||||
"message": "Go back",
|
||||
"description": "English: Go back"
|
||||
},
|
||||
"mainBlockedClose": {
|
||||
"message": "Close",
|
||||
"description": "English: Close"
|
||||
},
|
||||
"commandRevertAll": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistPageDomain": {
|
||||
"message": "Temporarily whitelist page domain",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistAll": {
|
||||
"message": "Temporarily whitelist all",
|
||||
"description": ""
|
||||
},
|
||||
"commandOpenDashboard": {
|
||||
"message": "Open dashboard",
|
||||
"description": ""
|
||||
},
|
||||
"elapsedOneMinuteAgo": {
|
||||
"message": "a minute ago",
|
||||
"description": "English: a minute ago"
|
||||
},
|
||||
"elapsedManyMinutesAgo": {
|
||||
"message": "{{value}} minutes ago",
|
||||
"description": "English: {{value}} minutes ago"
|
||||
},
|
||||
"elapsedOneHourAgo": {
|
||||
"message": "an hour ago",
|
||||
"description": "English: an hour ago"
|
||||
},
|
||||
"elapsedManyHoursAgo": {
|
||||
"message": "{{value}} hours ago",
|
||||
"description": "English: {{value}} hours ago"
|
||||
},
|
||||
"elapsedOneDayAgo": {
|
||||
"message": "a day ago",
|
||||
"description": "English: a day ago"
|
||||
},
|
||||
"elapsedManyDaysAgo": {
|
||||
"message": "{{value}} days ago",
|
||||
"description": "English: {{value}} days ago"
|
||||
},
|
||||
"showDashboardButton": {
|
||||
"message": "Dashboard",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"showLoggerButton": {
|
||||
"message": "Logger",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"cloudPush": {
|
||||
"message": "Export to cloud storage",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudPull": {
|
||||
"message": "Import from cloud storage",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudNoData": {
|
||||
"message": "...\n...",
|
||||
"description": ""
|
||||
},
|
||||
"cloudDeviceNamePrompt": {
|
||||
"message": "This device name:",
|
||||
"description": "used as a prompt for the user to provide a custom device name"
|
||||
},
|
||||
"genericSubmit": {
|
||||
"message": "Submit",
|
||||
"description": "for generic 'submit' buttons"
|
||||
},
|
||||
"genericRevert": {
|
||||
"message": "Revert",
|
||||
"description": "for generic 'revert' buttons"
|
||||
},
|
||||
"errorCantConnectTo": {
|
||||
"message": "Network error: Unable to connect to {{url}}",
|
||||
"description": ""
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@ -1,866 +0,0 @@
|
||||
{
|
||||
"extName": {
|
||||
"message": "nuTensor",
|
||||
"description": ""
|
||||
},
|
||||
"extShortDesc": {
|
||||
"message": "Peg og klik for at forbyde/tillade bestemte former for anmodninger. Brug det til at blokere scripts, iframes, annoncer, Facebook, etc.",
|
||||
"description": "this will be used as short description in web stores: MUST BE 132 characters OR LESS"
|
||||
},
|
||||
"dashboardPageName": {
|
||||
"message": "nuTensor — Kontrolpanel",
|
||||
"description": ""
|
||||
},
|
||||
"loggerPageName": {
|
||||
"message": "nuTensor — Logger",
|
||||
"description": "Title for the logger window"
|
||||
},
|
||||
"settingsPageName": {
|
||||
"message": "Indstillinger",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"privacyPageName": {
|
||||
"message": "Privatliv",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"statsPageName": {
|
||||
"message": "Statistik",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"userRulesPageName": {
|
||||
"message": "Mine regler",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
"message": "Assets",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "More",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
"message": "Om",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"allPrettyName": {
|
||||
"message": "alle",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cookiePrettyName": {
|
||||
"message": "cookie",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cssPrettyName": {
|
||||
"message": "css",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"imagePrettyName": {
|
||||
"message": "medier",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "media",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
"message": "plugin",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"scriptPrettyName": {
|
||||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
"message": "frame",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"otherPrettyName": {
|
||||
"message": "andre",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"matrixNoNetTrafficPrompt": {
|
||||
"message": "Endnu ingen trafik registreret på denne fane.",
|
||||
"description": ""
|
||||
},
|
||||
"matrixLocalScopeTip": {
|
||||
"message": "Select a local scope to see/create rules which apply only in that scope",
|
||||
"description": "Tool tip for the local scope button"
|
||||
},
|
||||
"matrixGlobalScopeTip": {
|
||||
"message": "Select the global scope to see/create rules which apply everywhere",
|
||||
"description": "Tool tip for the global scope button"
|
||||
},
|
||||
"matrixMtxButtonTip": {
|
||||
"message": "Deaktiver/aktiver matrix-filtrering på dette område.",
|
||||
"description": "Tool tip for matrix button"
|
||||
},
|
||||
"matrixPersistButtonTip": {
|
||||
"message": "Gem alle midlertidige ændringer på dette område.",
|
||||
"description": "Tool tip for the persist button"
|
||||
},
|
||||
"matrixRevertButtonTip": {
|
||||
"message": "Fortryd alle midlertidige ændringer på dette område.",
|
||||
"description": "Tool tip for the revert local permission button"
|
||||
},
|
||||
"matrixReloadButton": {
|
||||
"message": "Genindlæs siden.",
|
||||
"description": "Tool tip for the reload button"
|
||||
},
|
||||
"matrix1stPartyLabel": {
|
||||
"message": "1.-parts",
|
||||
"description": "1st-party"
|
||||
},
|
||||
"matrixBlacklistedHostnames": {
|
||||
"message": "{{count}} sortlistede værtsnavne",
|
||||
"description": "Appears in the metadata row of bottom-most group: **mind the limited width**"
|
||||
},
|
||||
"matrixSwitchNoMixedContent": {
|
||||
"message": "Benyt kun HTTPS",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoWorker": {
|
||||
"message": "Forbid web workers",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchReferrerSpoof": {
|
||||
"message": "Forfalsking af referer",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoscriptSpoof": {
|
||||
"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"
|
||||
},
|
||||
"matrixLoggerMenuEntry": {
|
||||
"message": "Gå til logger",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixDashboardMenuEntry": {
|
||||
"message": "Gå til kontrolpanel",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound": {
|
||||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "nuTensor – Statistik",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageGenericStats": {
|
||||
"message": "Generisk statistik",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookieHeadersFoiled": {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_cookie'>HTTP-cookie</a>-headere forhindret: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRefererHeadersFoiled": {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referer</a>-headere forhindret: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageHyperlinkAuditingFoiled": {
|
||||
"message": "<a href='http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing'>Hyperlink overvågnings</a> forsøg forhindret: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookiesRemoved": {
|
||||
"message": "Lokale cookies fjernet: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLocalStoragesCleared": {
|
||||
"message": "<a href='http://diveintohtml5.info/storage.html'>Lokale lagre</a> tømt: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageBrowserCacheCleared": {
|
||||
"message": "Browser-cacher tømt: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedStats": {
|
||||
"message": "Detaljeret statistik",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedAllPages": {
|
||||
"message": "Alle",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedBehindTheScenePage": {
|
||||
"message": "Baggrundsanmodninger",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOverview": {
|
||||
"message": "Oversigt",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRequests": {
|
||||
"message": "Forespørgsler",
|
||||
"description": "header for the stat type column"
|
||||
},
|
||||
"statsPageAllowed": {
|
||||
"message": "Tilladte",
|
||||
"description": "header for the allowed requests column"
|
||||
},
|
||||
"statsPageBlocked": {
|
||||
"message": "Blokerede",
|
||||
"description": "header for the blocked requests column"
|
||||
},
|
||||
"statsPageAll": {
|
||||
"message": "Alle",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePages": {
|
||||
"message": "Sider",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookies": {
|
||||
"message": "Cookies",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCSS": {
|
||||
"message": "CSS",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageImages": {
|
||||
"message": "Billeder",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePlugins": {
|
||||
"message": "Plugins",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageScripts": {
|
||||
"message": "Scripts",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageXHRs": {
|
||||
"message": "XHRs",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageFrames": {
|
||||
"message": "Frames",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOthers": {
|
||||
"message": "Andre",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailed": {
|
||||
"message": "Logger",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLogSizePrompt1": {
|
||||
"message": "Husk de sidste",
|
||||
"description": "First part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizePrompt2": {
|
||||
"message": "HTTP-forespørgsler <b>per side</b>.",
|
||||
"description": "Second part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizeHelp": {
|
||||
"message": "<p>Du kan inspicerer detaljerne for de seneste \"rå\" HTTP-forespørgsler, der er blevet foretaget af en webside (se nedenfor).</p><p>Dette er mest nyttigt for erfarne brugere, der ønsker at undersøge præcis hvad en webside har lavet. Men logningen af disse HTTP-forespørgsler kræver hukommelse, så hvis du er ligeglad med denne tekniske information, er det øgede forbrug af hukommelse spildt.</p><p>Derfor dette felt, som lader dig justere det maskimale antal nyeste HTTP-forespørgsler, som skal logges til yderligere inspektion.</p><p>Skriv “<code>0</code>” for at slå detaljeret logning fra (og dermed reducere hukommelsesforbruget for <i>nuTensor</i>).</p>",
|
||||
"description": "To help user understand the purpose of the log size value"
|
||||
},
|
||||
"statsPageRefresh": {
|
||||
"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": "nuTensor – Indstillinger",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayHeader": {
|
||||
"message": "Udseende",
|
||||
"description": "header for matrix settings used in Settings page"
|
||||
},
|
||||
"settingsMatrixDisplayTextSizePrompt": {
|
||||
"message": "Skriftstørrelse:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsIconBadgeEnabled": {
|
||||
"message": "Vis antal separate forespørgsler på ikonet",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayColorBlind": {
|
||||
"message": "Optimeret til farveblindhed",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixConvenienceHeader": {
|
||||
"message": "Bekvemmelighed",
|
||||
"description": "English: Convenience"
|
||||
},
|
||||
"settingsDefaultScopeLevel": {
|
||||
"message": "Default scope level:",
|
||||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0": {
|
||||
"message": "Global",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "Domain",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Sammenfold pladsholder for blokerede elementer",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"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": {
|
||||
"message": "Spoof <code><noscript></code> tags when 1st-party scripts are blocked",
|
||||
"description": "This appears in the Settings pane in the dashboard"
|
||||
},
|
||||
"settingsCloudStorageEnabled": {
|
||||
"message": "Aktiver lagring i skyen",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips": {
|
||||
"message": "Disable tooltips",
|
||||
"description": ""
|
||||
},
|
||||
"privacyPageTitle": {
|
||||
"message": "nuTensor – Privatliv",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesPrompt": {
|
||||
"message": "Slet blokerede cookies.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesHelp": {
|
||||
"message": "<p>Sortlistede cookies bliver ikke forhindret af <i>nuTensor</i> i at trænge ind i din browser. Derimod bliver de forhindret i at forlade din browser igen, hvilket faktisk er det vigtige. Ved ikke at blokere cookies inden de trænger ind i din browser, gøres det muligt for brugeren at undersøge indholdet og antallet af de cookies diverse websteder placerer i din browser.</p><p>Når disse sortlistede cookies er blevet undersøgt af <i>nuTensor</i>, kan de blive slettet, hvis brugeren ønsker det.</p><p><b>Vigtig bemærkning:</b> Udvidelser kan benytte sig af cookies i deres helt legale webkommunikation. Hvis det værtsnavn, som en cookie kommer fra, ikke er hvidlistet, vil denne cookie blive fjernet fra browseren af <i>nuTensor</i>, hvis denne indstilling er slået til. Du skal derfor sikre dig, at de værtsnavne, som en udvidelse kommunikerer med, er hvidlistede.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt1": {
|
||||
"message": "Slet ikke-blokerede session cookies ",
|
||||
"description": "First part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt2": {
|
||||
"message": " minutter efter de sidst er blevet brugt.",
|
||||
"description": "Second part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesHelp": {
|
||||
"message": "<p><a href='http://www.w3.org/2001/tag/2010/09/ClientSideStorage.html'>W3C</a>:“A session cookie ... is erased when you end the browser session. The session cookie is stored in temporary memory and is not retained after the browser is closed.”</p><p>Forvent at dette <a href='https://code.google.com/p/chromium/issues/detail?id=128513'>ikke altid sker</a> i alle browsere. For nogen kan det også være et problem, at man skal lukke sin browser helt før disse cookies slettes.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStoragePrompt": {
|
||||
"message": "Slet <a href='https://en.wikipedia.org/wiki/Web_storage'>lokal lagret</a> indhold fra blokerede hostnavne",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStorageHelp": {
|
||||
"message": "TODO",
|
||||
"description": ""
|
||||
},
|
||||
"privacyClearCachePrompt1": {
|
||||
"message": "Slet browser cache hvert",
|
||||
"description": "First part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCachePrompt2": {
|
||||
"message": "minutter.",
|
||||
"description": "Second part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCacheHelp": {
|
||||
"message": "<p>Nogle hjemmesider er meget opsatte på at tracke din færden på internettet, faktisk så meget at de er villige til at benytte sig af ikke-så-flinke metoder til at omgå de tiltag du tager for at beskytte dig selv mod tracking.</p><p>Nogle af disse metoder benytter sig af<sup style='font-size:smaller'>[1, 2]</sup> af din <a href='https://en.wikipedia.org/wiki/Web_cache'>browsers cache</a>, hvis indhold ofte bliver gemt meget længe, og ydermere er der nogle brugere der ikke sletter deres browers cache ofte.</p><p>Der er ikke rigtigt nogen negative effekter ved at slette din browers cache ofte (højst sandsynligt vil du ikke opdage det), men derimod er gevinsten stor ift. at stoppe trackers fra at invadere dit privatliv.</p><p>Vælg denne indstilling, hvis du vil have <i>nuTensor</i> til at slette din browsers cache for dig, så ofte du ønsker det.</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": {
|
||||
"message": "Forfalsk<a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referrer</a> string fra tredjeparts forespørgsler.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererHelp": {
|
||||
"message": "<p>Fra Wikipedia:</p><blockquote>HTTP referer is an HTTP header field that identifies the address of the webpage that linked to the resource being requested. ... <b>Because referer information can violate privacy, some web browsers allow the user to disable the sending of referer information.</b></blockquote><p>Hvis denne indstilling vælges, <i>vil nuTensor</i> forfalske den information som HTTP referreren indeholder, hvis netanmodningen om HTTP referreren kommer fra en tredjepart.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentPrompt": {
|
||||
"message": "Streng HTTPS: forbyd blandet indhold.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentHelp": {
|
||||
"message": "<p>Fra <a href='https://developer.mozilla.org/en-US/docs/Security/MixedContent'>Mozilla Developer Network</a>:</p><blockquote>If [a] HTTPS page includes content retrieved through regular, cleartext HTTP, then the connection is only partially encrypted: the unencrypted content is accessible to sniffers and can be modified by man-in-the-middle attackers, and therefore the connection is not safeguarded anymore. When a webpage exhibits this behavior, it is called a mixed content page.</blockquote>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingPrompt": {
|
||||
"message": "Bloker alle <a href='http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing'>hyperlink overvågnings</a>forsøg.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingHelp": {
|
||||
"message": "<p>Hyperlink overvågning er en mekanisme der gør det muligt for første eller <b>tredjepart</b>, at indsamle data om hvilke brugeren klikker på en hjemmeside. Det er altså tale om en tracking funktion, der gør informerer første eller tredjepart om, hvilke links en bruger vælger at klikke på under sit besøg på en hvilken som helst hjemmeside. Det eneste formål med hyperlink overvågning er altså, at tracke din browser aktivitet.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesPermanentHeader": {
|
||||
"message": "Permanente regler",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesTemporaryHeader": {
|
||||
"message": "Midlertidige regler",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesRevert": {
|
||||
"message": "Fortryd",
|
||||
"description": "Will remove all temporary rules"
|
||||
},
|
||||
"userRulesCommit": {
|
||||
"message": "Tilføj",
|
||||
"description": "Will save all temporary rules"
|
||||
},
|
||||
"userRulesEdit": {
|
||||
"message": "Rediger",
|
||||
"description": "Will enable manual-edit mode (textarea)"
|
||||
},
|
||||
"userRulesEditSave": {
|
||||
"message": "Gem",
|
||||
"description": "Will save manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesEditDicard": {
|
||||
"message": "Kassér",
|
||||
"description": "Will discard manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesImport": {
|
||||
"message": "Importer fra fil...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesExport": {
|
||||
"message": "Eksporter fil til...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesFormatHint": {
|
||||
"message": "Gå til denne side for at se syntaks regler.",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesDefaultFileName": {
|
||||
"message": "my-umatrix-rules.txt",
|
||||
"description": "default file name to use"
|
||||
},
|
||||
"assetsHostsSection": {
|
||||
"message": "Hosts files",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt": {
|
||||
"message": "Alle hostnavne der forefindes i en host fil vil blive sortlistet, og blokeret overalt.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesStats": {
|
||||
"message": "{{blockedHostnameCount}} blokerede unikke hostnavne fra:",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPerFileStats": {
|
||||
"message": "{{used}} forbrug ud af {{total}}",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesLastUpdate": {
|
||||
"message": "Sidst opdateret: {{ago}}",
|
||||
"description": "English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
|
||||
},
|
||||
"hostsFilesApplyChanges": {
|
||||
"message": "Anvend ændringer",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Auto-update assets",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
"message": "Opdater nu",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPurgeAll": {
|
||||
"message": "Slet alt caches",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsHint": {
|
||||
"message": "Et URL per linje. Linjer der begynder med ‘#’ vil blive ignoreret. Ugyldige URLs vil lydløst blive ignoreret.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsParse": {
|
||||
"message": "Parse",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListPurge": {
|
||||
"message": "Slet cache",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListNew": {
|
||||
"message": "Ny version tilgængelig",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListObsolete": {
|
||||
"message": "Forældet",
|
||||
"description": ""
|
||||
},
|
||||
"assetsRecipesSection": {
|
||||
"message": "Ruleset recipes",
|
||||
"description": "header to identify the ruleset files section"
|
||||
},
|
||||
"assetsRecipesSummary": {
|
||||
"message": "Ruleset recipes are imported from the popup panel <em>on demand</em>, i.e. <b>only</b> through user interaction.",
|
||||
"description": ""
|
||||
},
|
||||
"assetsImportLabel": {
|
||||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/releases'>Change log</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutStorageUsed": {
|
||||
"message": "Lagerplads brugt: {{storageUsed}} bytes",
|
||||
"description": ""
|
||||
},
|
||||
"aboutDoc": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki'>Dokumentation</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutPermissions": {
|
||||
"message": "<a href='https://github.com/gorhill/httpswitchboard/wiki/Permissions'>Tilladelser</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode": {
|
||||
"message": "Source code (GPLv3)",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssues": {
|
||||
"message": "Fejl og problemer",
|
||||
"description": "Text for a link to official issue tracker"
|
||||
},
|
||||
"aboutContributors": {
|
||||
"message": "Bidragydere",
|
||||
"description": "English: Contributors"
|
||||
},
|
||||
"aboutCodeContributors": {
|
||||
"message": "Kode:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssueContributors": {
|
||||
"message": "Problemstillinger:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutTranslationContributors": {
|
||||
"message": "Oversættelser:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutUserDataHeader": {
|
||||
"message": "Din data",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupButton": {
|
||||
"message": "Backup til fil...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupFilename": {
|
||||
"message": "my-umatrix-backup.txt",
|
||||
"description": "default filename to use"
|
||||
},
|
||||
"aboutRestoreButton": {
|
||||
"message": "Gendan fra fil...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutRestoreConfirm": {
|
||||
"message": "Alle dine indstillinger vil blive overskrevet med data fra backupfilen fra {{time}}, herefter vil nuTensor genstarte.\n\nGendan fra backupfilen?",
|
||||
"description": "Message asking user to confirm restore"
|
||||
},
|
||||
"aboutRestoreError": {
|
||||
"message": "Dataen er enten ugyldig eller kunne ikke læses",
|
||||
"description": ""
|
||||
},
|
||||
"aboutOr": {
|
||||
"message": "... eller ...",
|
||||
"description": "English: ... or ..."
|
||||
},
|
||||
"aboutResetButton": {
|
||||
"message": "Gendan til fabriksindstillinger",
|
||||
"description": "English: Reset to default settings"
|
||||
},
|
||||
"aboutResetConfirm": {
|
||||
"message": "Forsigtig! Dette slette alle brugerdefinerede indstillinger. Er du sikker på, at du vil fortsætte?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "nuTensor har blokeret den følgende webside:",
|
||||
"description": "English: nuTensor has prevented the following page from loading:"
|
||||
},
|
||||
"mainBlockedPrompt2": {
|
||||
"message": "På grund af den følgende regel",
|
||||
"description": "English: Because of the following rule"
|
||||
},
|
||||
"mainBlockedNoParamsPrompt": {
|
||||
"message": "without parameters",
|
||||
"description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
|
||||
},
|
||||
"mainBlockedBack": {
|
||||
"message": "Tilbage",
|
||||
"description": "English: Go back"
|
||||
},
|
||||
"mainBlockedClose": {
|
||||
"message": "Luk",
|
||||
"description": "English: Close"
|
||||
},
|
||||
"commandRevertAll": {
|
||||
"message": "Fortryd alle midlertidige ændringer",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistPageDomain": {
|
||||
"message": "Tillad midlertidigt alt traffik på dette domæne",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistAll": {
|
||||
"message": "Tillad midlertidigt alt trafik på alle domæner",
|
||||
"description": ""
|
||||
},
|
||||
"commandOpenDashboard": {
|
||||
"message": "Åbn kontrolpanel",
|
||||
"description": ""
|
||||
},
|
||||
"elapsedOneMinuteAgo": {
|
||||
"message": "et minut siden",
|
||||
"description": "English: a minute ago"
|
||||
},
|
||||
"elapsedManyMinutesAgo": {
|
||||
"message": "{{value}} minutter siden",
|
||||
"description": "English: {{value}} minutes ago"
|
||||
},
|
||||
"elapsedOneHourAgo": {
|
||||
"message": "en time sider",
|
||||
"description": "English: an hour ago"
|
||||
},
|
||||
"elapsedManyHoursAgo": {
|
||||
"message": "{{value}} timer siden",
|
||||
"description": "English: {{value}} hours ago"
|
||||
},
|
||||
"elapsedOneDayAgo": {
|
||||
"message": "en dag siden",
|
||||
"description": "English: a day ago"
|
||||
},
|
||||
"elapsedManyDaysAgo": {
|
||||
"message": "{{value}} dage siden",
|
||||
"description": "English: {{value}} days ago"
|
||||
},
|
||||
"showDashboardButton": {
|
||||
"message": "Kontrolpanel",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"showLoggerButton": {
|
||||
"message": "Logger",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"cloudPush": {
|
||||
"message": "Eksporter til skyen",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudPull": {
|
||||
"message": "Eksporter fra skyen",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudNoData": {
|
||||
"message": "...\n...",
|
||||
"description": ""
|
||||
},
|
||||
"cloudDeviceNamePrompt": {
|
||||
"message": "Denne enheds navn:",
|
||||
"description": "used as a prompt for the user to provide a custom device name"
|
||||
},
|
||||
"genericSubmit": {
|
||||
"message": "Indsend",
|
||||
"description": "for generic 'submit' buttons"
|
||||
},
|
||||
"genericRevert": {
|
||||
"message": "Gendan",
|
||||
"description": "for generic 'revert' buttons"
|
||||
},
|
||||
"errorCantConnectTo": {
|
||||
"message": "Netværksfejl: Kan ikke oprette forbindelse til {{url}}",
|
||||
"description": ""
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@ -1,866 +0,0 @@
|
||||
{
|
||||
"extName": {
|
||||
"message": "nuTensor",
|
||||
"description": ""
|
||||
},
|
||||
"extShortDesc": {
|
||||
"message": "Kontrolliere alle Anfragen deines Browsers durch einfaches Point&Click. Ein Fork von Raymond Hills uMatrix.",
|
||||
"description": "this will be used as short description in web stores: MUST BE 132 characters OR LESS"
|
||||
},
|
||||
"dashboardPageName": {
|
||||
"message": "nuTensor — Dashboard",
|
||||
"description": ""
|
||||
},
|
||||
"loggerPageName": {
|
||||
"message": "nuTensor — Logger",
|
||||
"description": "Title for the logger window"
|
||||
},
|
||||
"settingsPageName": {
|
||||
"message": "Einstellungen",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"privacyPageName": {
|
||||
"message": "Privatsphäre",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"statsPageName": {
|
||||
"message": "Statistiken",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"userRulesPageName": {
|
||||
"message": "Meine Regeln",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
"message": "Assets",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "Mehr",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
"message": "Über",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"allPrettyName": {
|
||||
"message": "Alle",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cookiePrettyName": {
|
||||
"message": "Cookie",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cssPrettyName": {
|
||||
"message": "CSS",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"imagePrettyName": {
|
||||
"message": "Grafik",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "Medien",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
"message": "Plugin",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"scriptPrettyName": {
|
||||
"message": "Skript",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
"message": "Frame",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"otherPrettyName": {
|
||||
"message": "Andere",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"matrixNoNetTrafficPrompt": {
|
||||
"message": "Bisher keine Netzwerkaktivität für diesen Tab.",
|
||||
"description": ""
|
||||
},
|
||||
"matrixLocalScopeTip": {
|
||||
"message": "Wähle einen lokalen Geltungsbereich, um Regeln zu betrachten/erzeugen, die nur in diesem Geltungsbereich angewandt werden",
|
||||
"description": "Tool tip for the local scope button"
|
||||
},
|
||||
"matrixGlobalScopeTip": {
|
||||
"message": "Wähle den globalen Geltungsbereich, um Regeln zu betrachten/erzeugen, die überall angewandt werden",
|
||||
"description": "Tool tip for the global scope button"
|
||||
},
|
||||
"matrixMtxButtonTip": {
|
||||
"message": "Aktiviere/deaktiviere die Matrix-Filter für diesen Geltungsbereich.",
|
||||
"description": "Tool tip for matrix button"
|
||||
},
|
||||
"matrixPersistButtonTip": {
|
||||
"message": "Speichere alle temporären Änderungen für diesen Geltungsbereich.",
|
||||
"description": "Tool tip for the persist button"
|
||||
},
|
||||
"matrixRevertButtonTip": {
|
||||
"message": "Entferne temporäre Änderungen für diesen Geltungsbereich.",
|
||||
"description": "Tool tip for the revert local permission button"
|
||||
},
|
||||
"matrixReloadButton": {
|
||||
"message": "Seite neu laden.\nShift drücken um den Browser Cache zu ignorieren.",
|
||||
"description": "Tool tip for the reload button"
|
||||
},
|
||||
"matrix1stPartyLabel": {
|
||||
"message": "Aktuelle Domain",
|
||||
"description": "1st-party"
|
||||
},
|
||||
"matrixBlacklistedHostnames": {
|
||||
"message": "{{count}} Hostname(n) auf der Blacklist",
|
||||
"description": "Appears in the metadata row of bottom-most group: **mind the limited width**"
|
||||
},
|
||||
"matrixSwitchNoMixedContent": {
|
||||
"message": "Gemischte Inhalte verbieten",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoWorker": {
|
||||
"message": "Web Worker verbieten",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchReferrerSpoof": {
|
||||
"message": "Referrer verschleiern",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoscriptSpoof": {
|
||||
"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"
|
||||
},
|
||||
"matrixLoggerMenuEntry": {
|
||||
"message": "Gehe zum Protokoll",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixDashboardMenuEntry": {
|
||||
"message": "Gehe zum Dashboard",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound": {
|
||||
"message": "Keine Webseite gefunden",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Regeln importieren",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Regeln speichern",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "µMatrix – Statistik",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageGenericStats": {
|
||||
"message": "Statistik nach Gattungen",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookieHeadersFoiled": {
|
||||
"message": "<a href='https://de.wikipedia.org/wiki/HTTP_Cookie'>HTTP Cookie</a> Header blockiert: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRefererHeadersFoiled": {
|
||||
"message": "<a href='https://de.wikipedia.org/wiki/Referrer'>HTTP Referrer</a> Header blockiert: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageHyperlinkAuditingFoiled": {
|
||||
"message": "<a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>Hyperlink auditing</a> Versuche vereitelt: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookiesRemoved": {
|
||||
"message": "Lokale Cookies entfernt: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLocalStoragesCleared": {
|
||||
"message": "<a href='http://diveintohtml5.info/storage.html'>Local Storage</a> geleert: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageBrowserCacheCleared": {
|
||||
"message": "Browser Cache geleert: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedStats": {
|
||||
"message": "Detaillierte Statistik",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedAllPages": {
|
||||
"message": "Alle",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedBehindTheScenePage": {
|
||||
"message": "Hintergrundanfragen",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOverview": {
|
||||
"message": "Übersicht",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRequests": {
|
||||
"message": "Anfragen",
|
||||
"description": "header for the stat type column"
|
||||
},
|
||||
"statsPageAllowed": {
|
||||
"message": "Erlaubt",
|
||||
"description": "header for the allowed requests column"
|
||||
},
|
||||
"statsPageBlocked": {
|
||||
"message": "Blockiert",
|
||||
"description": "header for the blocked requests column"
|
||||
},
|
||||
"statsPageAll": {
|
||||
"message": "Alle",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePages": {
|
||||
"message": "Seiten",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookies": {
|
||||
"message": "Cookies",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCSS": {
|
||||
"message": "CSS",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageImages": {
|
||||
"message": "Bilder",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePlugins": {
|
||||
"message": "Plugins",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageScripts": {
|
||||
"message": "Skripte",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageXHRs": {
|
||||
"message": "XHRs",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageFrames": {
|
||||
"message": "Frames",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOthers": {
|
||||
"message": "Andere",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailed": {
|
||||
"message": "Protokoll der Anfragen",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLogSizePrompt1": {
|
||||
"message": "Speichere die letzten",
|
||||
"description": "First part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizePrompt2": {
|
||||
"message": "HTTP Anfragen <b>pro Seite</b>.",
|
||||
"description": "Second part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizeHelp": {
|
||||
"message": "<p>Die Details der letzten HTTP Anfragen einer Webseite kannst du dir unten anschauen.</p><p>Das ist besonders nützlich für neugierige bzw. erfahrene Benutzer, die genau wissen wollen, was eine Webseite gemacht hat. Allerdings benötigt das Logging dieser HTTP Anfragen Arbeitsspeicher, und wenn du an diesen detaillierten Informationen nicht interessiert bist, belegst du diesen Speicher unnötigerweise.</p><p>Daher lässt sich mit diesem Feld die maximale Zahl der letzten HTTP Anfragen, die aufgezeichnet werden sollen, festlegen.<p><p>Gib “<code>0</code>” ein, um dieses detaillierte Logging ganz abzuschalten (und entsprechend die Speicherbelegung von <i>nuTensor</i> zu reduzieren).</p>",
|
||||
"description": "To help user understand the purpose of the log size value"
|
||||
},
|
||||
"statsPageRefresh": {
|
||||
"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": "nuTensor – Einstellungen",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayHeader": {
|
||||
"message": "Matrix",
|
||||
"description": "header for matrix settings used in Settings page"
|
||||
},
|
||||
"settingsMatrixDisplayTextSizePrompt": {
|
||||
"message": "Schriftgröße:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsIconBadgeEnabled": {
|
||||
"message": "Zeige die Zahl der blockierten Anfragen auf dem Icon an",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayColorBlind": {
|
||||
"message": "Anzeige für farbenblinde Benutzer",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixConvenienceHeader": {
|
||||
"message": "Komforteinstellungen",
|
||||
"description": "English: Convenience"
|
||||
},
|
||||
"settingsDefaultScopeLevel": {
|
||||
"message": "Standardgeltungsbereich:",
|
||||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0": {
|
||||
"message": "Global",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "Domain",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
"message": "Seite",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Verstecke die Platzhalter für blockierte Elemente",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Verstecke die Platzhalter für Elemente auf der Blacklist",
|
||||
"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": {
|
||||
"message": "Verschleiere <code><noscript></code> Tags wenn Skripte der aktuellen Domain blockiert werden",
|
||||
"description": "This appears in the Settings pane in the dashboard"
|
||||
},
|
||||
"settingsCloudStorageEnabled": {
|
||||
"message": "Aktiviere die Unterstützung der Speicherung in der Cloud",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips": {
|
||||
"message": "Deaktiviere Tooltips",
|
||||
"description": ""
|
||||
},
|
||||
"privacyPageTitle": {
|
||||
"message": "nuTensor – Privatsphäre",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesPrompt": {
|
||||
"message": "Lösche geblockte Cookies.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesHelp": {
|
||||
"message": "<p>Cookies auf der Blacklist werden von <i>nuTensor</i> nicht daran gehindert, vom Browser empfangen zu werden. Vielmehr werden sie daran gehindert, den Browser wieder zu verlassen - das ist es, worauf es wirklich ankommt. Dass Cookies nicht blockiert werden, bevor sie vom Browser empfangen werden, gibt dir die Gelegenheit, dich zu informieren, welche Seiten Cookies zu verwenden versuchen, und dir den Inhalt der Cookies anzuschauen, wenn du möchtest.</p><p>Sobald diese sich auf der Blacklist befindlichen Cookies von <i>nuTensor</i> erfasst sind, können sie aus deinem Browser gelöscht werden, falls du möchtest.</p><p><b>Wichtiger Hinweis:</b> Erweiterungen können während ihrer Benutzung Webanfragen tätigen. Diese Anfragen können dazu führen, dass Cookies im Browser erzeugt werden. Falls der Hostname, von dem das Cookie stammt, nicht auf der Whitelist ist, wird das Cookie von <i>nuTensor</i> aus dem Browser entfernt, sofern dieser Schalter aktiviert ist. Stelle daher sicher, dass Hostnamen, mit denen eine Erweiterung kommuniziert, auf der Whitelist stehen.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt1": {
|
||||
"message": "Lösche nicht blockierte Sitzungscookies ",
|
||||
"description": "First part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt2": {
|
||||
"message": " Minuten nach ihrer letzten Benutzung.",
|
||||
"description": "Second part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesHelp": {
|
||||
"message": "<p><a href='http://www.w3.org/2001/tag/2010/09/ClientSideStorage.html'>W3C</a>: “Ein Sitzungscookie ... wird gelöscht, wenn die Browsersitzung beendet wird. Das Sitzungscookie wird temporär gespeichert und nicht behalten, nachdem der Browser geschlossen wurde.”</p><p>Nur ist das möglicherweise bei einigen Browsern <a href='https://code.google.com/p/chromium/issues/detail?id=128513'>nicht der Fall</a>. Außerdem bevorzugen es manche Benutzer, Sitzungscookies loszuwerden, bevor sie den Browser schließen.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStoragePrompt": {
|
||||
"message": "Lösche <a href='http://de.wikipedia.org/wiki/Web_Storage'>Lokaler Speicher-Inhalt (Local Storage)</a> für blockierte Hostnamen",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStorageHelp": {
|
||||
"message": "TODO",
|
||||
"description": ""
|
||||
},
|
||||
"privacyClearCachePrompt1": {
|
||||
"message": "Lösche den Browser-Cache alle",
|
||||
"description": "First part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCachePrompt2": {
|
||||
"message": "Minuten.",
|
||||
"description": "Second part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCacheHelp": {
|
||||
"message": "<p>Einige Webseiten sind wirklich darauf aus, dich zu verfolgen bzw. zu tracken, und scheuen nicht davor zurück, unfeine Tricks zu verwenden, um Maßnahmen, die dieses Tracking verhindern sollen, zu unterlaufen.</p><p>Einige dieser Tricks benutzen dazu den <sup style='font-size:smaller'>[1, 2]</sup> on the <a href='https://de.wikipedia.org/wiki/Browser-Cache'>Browser Cache</a>, dessen Inhalt häufig für lange Zeit auslesbar ist, da viele Benutzer ihn nicht regelmäßig löschen.</p><p>Das regelmäßige Löschen des Browser Caches bringt kaum Nachteile mit sich (wahrscheinlich wirst du gar keine bemerken), während die Vorteile darin bestehen, dass diese fiesen Tracker davon abgehalten werden, in deine Privatsphäre einzudringen.</p><p>Aktiviere diesen Schalter, damit <i>nuTensor</i> diese Aufgabe in dem von dir gewünschten Intervall übernimmt.</p><p >[1] <a href='https://grepular.com/Preventing_Web_Tracking_via_the_Browser_Cache'>“Preventing Web Tracking via the Browser Cache”</a>[2] <a href='http://lucb1e.com/rp/cookielesscookies/'>“Cookieless cookies”</a></p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererPrompt": {
|
||||
"message": "Verschleiere den <a href='https://de.wikipedia.org/wiki/Referrer'>HTTP Referrer</a>, wenn das Ziel eine Drittseite ist.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererHelp": {
|
||||
"message": "<p>Aus Wikipedia:</p><blockquote>Ein Referrer ist die Internetadresse der Webseite, von der der Benutzer durch Anklicken eines Links zu der aktuellen Seite gekommen ist. ... <b>(Die Übertragung eines Referrers zu verhindern) ...ist unter anderem aus Datenschutzerwägungen interessant, da andernfalls die Möglichkeit besteht, die Referrer mit den Nutzer-IP-Adressen in Verbindung zu bringen.</b></blockquote><p>Wenn dieser Schalter aktiviert ist, wird <i>nuTensor</i> den HTTP Referrer verschleiern bzw. manipulieren, wenn der Domänenname des HTTP Referrer nicht mit dem Domänenname der anfragenden URL überein stimmt (das heißt, der Referrer stammt von einer Drittseite).",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentPrompt": {
|
||||
"message": "Nur HTTPS: verbiete gemischte Inhalte.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentHelp": {
|
||||
"message": "<p>Übersetzt von <a href='https://developer.mozilla.org/en-US/docs/Security/MixedContent'>Mozilla Developer Network</a>:</p><blockquote>Wenn [eine] HTTPS-Seite normale Klartext-HTTP-Inhalte enthält, ist die Verbindung nur teilweise verschlüsselt: der unverschlüsselte Inhalt ist zugänglich für Schnüffler und kann durch man-in-the-middle-Attacken modifiziert werden; die Verbindung ist daher nicht mehr sicher. Wenn eine Webseite ein solches Verhalten aufweist, nennt man dies eine Seite mit gemischten Inhalten. </blockquote>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingPrompt": {
|
||||
"message": "Blockiere alle <a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>hyperlink auditing</a> Versuche.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingHelp": {
|
||||
"message": "<p>Hyperlink-Auditing ist ein Mechanismus, der es <b>allen beteiligten Parteien</b> erlaubt herauszufinden, auf welchen Link ein Benutzer auf einer bestimmten Webseite klickt. Im Grunde ist es eine Tracking-Funktion: Es erlaubt einer Webseite oder auch Drittparteien auf dieser Webseite, sich darüber zu informieren, auf welche Links du auf eine dieser Seiten geklickt hast. Der einzige Zweck besteht darin, deine Browsing-Aktivitäten zu verfolgen.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesPermanentHeader": {
|
||||
"message": "Permanente Regeln",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesTemporaryHeader": {
|
||||
"message": "Temporäre Regeln",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesRevert": {
|
||||
"message": "Rückgängig machen",
|
||||
"description": "Will remove all temporary rules"
|
||||
},
|
||||
"userRulesCommit": {
|
||||
"message": "Dauerhaft speichern",
|
||||
"description": "Will save all temporary rules"
|
||||
},
|
||||
"userRulesEdit": {
|
||||
"message": "Bearbeiten",
|
||||
"description": "Will enable manual-edit mode (textarea)"
|
||||
},
|
||||
"userRulesEditSave": {
|
||||
"message": "Speichern",
|
||||
"description": "Will save manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesEditDicard": {
|
||||
"message": "Verwerfen",
|
||||
"description": "Will discard manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesImport": {
|
||||
"message": "Aus Datei importieren...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesExport": {
|
||||
"message": "In eine Datei exportieren ...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesFormatHint": {
|
||||
"message": "Auf dieser Seite findest du die Syntax für die Regeln.",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesDefaultFileName": {
|
||||
"message": "my-umatrix-rules.txt",
|
||||
"description": "default file name to use"
|
||||
},
|
||||
"assetsHostsSection": {
|
||||
"message": "Hosts-Dateien",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt": {
|
||||
"message": "Alle Hostnamen einer Hosts-Datei werden als geblacklistete Hostnamen im globalen Geltungsbereich geladen.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesStats": {
|
||||
"message": "{{blockedHostnameCount}} eindeutig blockierte Hostnamen aus:",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPerFileStats": {
|
||||
"message": "{{used}} benutzt aus {{total}}",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesLastUpdate": {
|
||||
"message": "Letzte Aktualisierung: {{ago}}",
|
||||
"description": "English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
|
||||
},
|
||||
"hostsFilesApplyChanges": {
|
||||
"message": "Änderungen anwenden",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Automatische Aktualisierung der Assets",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
"message": "Jetzt aktualisieren",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPurgeAll": {
|
||||
"message": "Alle Cache-Speicher löschen",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsHint": {
|
||||
"message": "Eine URL pro Zeile. Zeilen mit vorangestelltem ‘#’ werden ignoriert. Ungültige URLs werden stillschweigend ignoriert.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsParse": {
|
||||
"message": "Anwenden",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListPurge": {
|
||||
"message": "Cache löschen",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListNew": {
|
||||
"message": "Neue Version verfügbar",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListObsolete": {
|
||||
"message": "veraltet",
|
||||
"description": ""
|
||||
},
|
||||
"assetsRecipesSection": {
|
||||
"message": "Rezepte für Regelsätze",
|
||||
"description": "header to identify the ruleset files section"
|
||||
},
|
||||
"assetsRecipesSummary": {
|
||||
"message": "Rezepte für Regelsätze werden <em>auf Anforderung</em>, d.h. <b>nur</b> durch eine Aktion des Benutzers, über das Popup-Panel importiert.",
|
||||
"description": ""
|
||||
},
|
||||
"assetsImportLabel": {
|
||||
"message": "Importieren...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "Meine Hostnamen",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "Meine Rezepte",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warnung! Die Änderung dieser Konfigurations-Einstellungen erfolgt auf eigenes Risiko.",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/releases'>Änderungsprotokoll</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutStorageUsed": {
|
||||
"message": "Benutzter Speicherplatz: {{storageUsed}} Bytes",
|
||||
"description": ""
|
||||
},
|
||||
"aboutDoc": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki'>Dokumentation</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutPermissions": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki/Permissions'>Berechtigungen</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode": {
|
||||
"message": "Quellcode (GPLv3)",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssues": {
|
||||
"message": "Fehler und Probleme",
|
||||
"description": "Text for a link to official issue tracker"
|
||||
},
|
||||
"aboutContributors": {
|
||||
"message": "Mitwirkende",
|
||||
"description": "English: Contributors"
|
||||
},
|
||||
"aboutCodeContributors": {
|
||||
"message": "Code:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssueContributors": {
|
||||
"message": "Probleme:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutTranslationContributors": {
|
||||
"message": "Übersetzungen:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutUserDataHeader": {
|
||||
"message": "Deine Daten",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupButton": {
|
||||
"message": "Sicherung in eine Datei...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupFilename": {
|
||||
"message": "my-umatrix-backup.txt",
|
||||
"description": "default filename to use"
|
||||
},
|
||||
"aboutRestoreButton": {
|
||||
"message": "Wiederherstellung aus einer Datei...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutRestoreConfirm": {
|
||||
"message": "Alle deine Einstellungen werden überschrieben mit Sicherungs-Daten vom {{time}}, und nuTensor wird neu gestartet.\n\nSollen alle existierenden Einstellungen mit Sicherungs-Daten überschrieben werden?",
|
||||
"description": "Message asking user to confirm restore"
|
||||
},
|
||||
"aboutRestoreError": {
|
||||
"message": "Die Daten konnten nicht gelesen werden oder sind ungültig",
|
||||
"description": ""
|
||||
},
|
||||
"aboutOr": {
|
||||
"message": "... oder ...",
|
||||
"description": "English: ... or ..."
|
||||
},
|
||||
"aboutResetButton": {
|
||||
"message": "Auf Standardeinstellungen zurücksetzen",
|
||||
"description": "English: Reset to default settings"
|
||||
},
|
||||
"aboutResetConfirm": {
|
||||
"message": "Vorsicht! Dies wird alle deine individuellen Einstellungen entfernen. Bist du sicher, dass du fortfahren willst?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "nuTensor hat das Laden der folgenden Seite verhindert:",
|
||||
"description": "English: nuTensor has prevented the following page from loading:"
|
||||
},
|
||||
"mainBlockedPrompt2": {
|
||||
"message": "Aufgrund der folgenden Regel",
|
||||
"description": "English: Because of the following rule"
|
||||
},
|
||||
"mainBlockedNoParamsPrompt": {
|
||||
"message": "without parameters",
|
||||
"description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
|
||||
},
|
||||
"mainBlockedBack": {
|
||||
"message": "Gehe zurück",
|
||||
"description": "English: Go back"
|
||||
},
|
||||
"mainBlockedClose": {
|
||||
"message": "Schließe",
|
||||
"description": "English: Close"
|
||||
},
|
||||
"commandRevertAll": {
|
||||
"message": "Entferne alle temporären Änderungen",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistPageDomain": {
|
||||
"message": "Setze die Domain temporär auf die Whitelist",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistAll": {
|
||||
"message": "Setze alles temporär auf die Whitelist",
|
||||
"description": ""
|
||||
},
|
||||
"commandOpenDashboard": {
|
||||
"message": "Dashboard öffnen",
|
||||
"description": ""
|
||||
},
|
||||
"elapsedOneMinuteAgo": {
|
||||
"message": "vor einer Minute",
|
||||
"description": "English: a minute ago"
|
||||
},
|
||||
"elapsedManyMinutesAgo": {
|
||||
"message": "vor {{value}} Minuten",
|
||||
"description": "English: {{value}} minutes ago"
|
||||
},
|
||||
"elapsedOneHourAgo": {
|
||||
"message": "vor einer Stunde",
|
||||
"description": "English: an hour ago"
|
||||
},
|
||||
"elapsedManyHoursAgo": {
|
||||
"message": "vor {{value}} Stunden",
|
||||
"description": "English: {{value}} hours ago"
|
||||
},
|
||||
"elapsedOneDayAgo": {
|
||||
"message": "vor einem Tag",
|
||||
"description": "English: a day ago"
|
||||
},
|
||||
"elapsedManyDaysAgo": {
|
||||
"message": "vor {{value}} Tagen",
|
||||
"description": "English: {{value}} days ago"
|
||||
},
|
||||
"showDashboardButton": {
|
||||
"message": "Dashboard",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"showLoggerButton": {
|
||||
"message": "Protokoll",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"cloudPush": {
|
||||
"message": "Export in den Cloud-Speicher",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudPull": {
|
||||
"message": "Import aus dem Cloud-Speicher",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudNoData": {
|
||||
"message": "...\n...",
|
||||
"description": ""
|
||||
},
|
||||
"cloudDeviceNamePrompt": {
|
||||
"message": "Dieser Gerätename:",
|
||||
"description": "used as a prompt for the user to provide a custom device name"
|
||||
},
|
||||
"genericSubmit": {
|
||||
"message": "Absenden",
|
||||
"description": "for generic 'submit' buttons"
|
||||
},
|
||||
"genericRevert": {
|
||||
"message": "Rückgängig machen",
|
||||
"description": "for generic 'revert' buttons"
|
||||
},
|
||||
"errorCantConnectTo": {
|
||||
"message": "Netzwerkfehler: konnte nicht zu {{url}} verbinden",
|
||||
"description": ""
|
||||
},
|
||||
"genericApplyChanges": {
|
||||
"message": "Änderungen anwenden",
|
||||
"description": "for generic 'Apply changes' buttons"
|
||||
},
|
||||
"genericCopyToClipboard": {
|
||||
"message": "In die Zwischenablage kopieren",
|
||||
"description": "Label for buttons used to copy something to the clipboard"
|
||||
}
|
||||
}
|
||||
@ -1,885 +0,0 @@
|
||||
{
|
||||
"extName": {
|
||||
"message": "nuTensor",
|
||||
"description": ""
|
||||
},
|
||||
"extShortDesc": {
|
||||
"message": "Point & click to forbid/allow any class of requests made by your browser. A fork of Raymond Hill's uMatrix.",
|
||||
"description": "this will be used as short description in web stores: MUST BE 132 characters OR LESS"
|
||||
},
|
||||
"dashboardPageName": {
|
||||
"message": "nuTensor — Dashboard",
|
||||
"description": ""
|
||||
},
|
||||
"loggerPageName": {
|
||||
"message": "nuTensor — Logger",
|
||||
"description": "Title for the logger window"
|
||||
},
|
||||
"settingsPageName": {
|
||||
"message": "Settings",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"privacyPageName": {
|
||||
"message": "Privacy",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"statsPageName": {
|
||||
"message": "Statistics",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"userRulesPageName": {
|
||||
"message": "My rules",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName" : {
|
||||
"message": "Assets",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "More",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
"message": "About",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
|
||||
|
||||
"allPrettyName": {
|
||||
"message": "all",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cookiePrettyName": {
|
||||
"message": "cookie",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cssPrettyName": {
|
||||
"message": "css",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"imagePrettyName": {
|
||||
"message": "image",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "media",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
"message": "plugin",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"scriptPrettyName": {
|
||||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
"message": "frame",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"otherPrettyName": {
|
||||
"message": "other",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
|
||||
|
||||
"matrixNoNetTrafficPrompt" : {
|
||||
"message": "No net traffic seen for this tab so far.",
|
||||
"description": ""
|
||||
},
|
||||
"matrixLocalScopeTip" : {
|
||||
"message": "Select a local scope to see/create rules which apply only in that scope",
|
||||
"description": "Tool tip for the local scope button"
|
||||
},
|
||||
"matrixGlobalScopeTip" : {
|
||||
"message": "Select the global scope to see/create rules which apply everywhere",
|
||||
"description": "Tool tip for the global scope button"
|
||||
},
|
||||
"matrixMtxButtonTip" : {
|
||||
"message": "Disable/enable matrix filtering for this scope",
|
||||
"description": "Tool tip for matrix button"
|
||||
},
|
||||
"matrixPersistButtonTip" : {
|
||||
"message": "Save all temporary changes for this scope",
|
||||
"description": "Tool tip for the persist button"
|
||||
},
|
||||
"matrixRevertButtonTip" : {
|
||||
"message": "Revert temporary changes for this scope",
|
||||
"description": "Tool tip for the revert local permission button"
|
||||
},
|
||||
"matrixReloadButton" : {
|
||||
"message": "Reload the page. \nPress Shift to bypass the browser cache.",
|
||||
"description": "Tool tip for the reload button"
|
||||
},
|
||||
"matrix1stPartyLabel" : {
|
||||
"message": "1st-party",
|
||||
"description": "1st-party"
|
||||
},
|
||||
"matrixBlacklistedHostnames" : {
|
||||
"message": "{{count}} blacklisted hostname(s)",
|
||||
"description": "Appears in the metadata row of bottom-most group: **mind the limited width**"
|
||||
},
|
||||
"matrixSwitchNoMixedContent" : {
|
||||
"message": "Forbid mixed content",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoWorker" : {
|
||||
"message": "Forbid web workers",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchReferrerSpoof" : {
|
||||
"message": "Spoof <code>Referer</code> header",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoscriptSpoof" : {
|
||||
"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"
|
||||
},
|
||||
"matrixLoggerMenuEntry" : {
|
||||
"message": "Go to logger",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixDashboardMenuEntry" : {
|
||||
"message": "Go to dashboard",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound" : {
|
||||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip" : {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip" : {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
|
||||
"statsPageTitle" : {
|
||||
"message": "nuTensor – Statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageGenericStats" : {
|
||||
"message": "Generic statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookieHeadersFoiled" : {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_cookie'>HTTP cookie</a> headers foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRefererHeadersFoiled" : {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referer</a> headers foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageHyperlinkAuditingFoiled" : {
|
||||
"message": "<a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>Hyperlink auditing</a> attempts foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookiesRemoved" : {
|
||||
"message": "Local cookies removed: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLocalStoragesCleared" : {
|
||||
"message": "<a href='http://diveintohtml5.info/storage.html'>Local storages</a> emptied: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageBrowserCacheCleared" : {
|
||||
"message": "Browser caches cleared: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedStats" : {
|
||||
"message": "Detailed statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedAllPages" : {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedBehindTheScenePage" : {
|
||||
"message": "Behind the scene",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOverview" : {
|
||||
"message": "Overview",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRequests" : {
|
||||
"message": "Requests",
|
||||
"description": "header for the stat type column"
|
||||
},
|
||||
"statsPageAllowed" : {
|
||||
"message": "Allowed",
|
||||
"description": "header for the allowed requests column"
|
||||
},
|
||||
"statsPageBlocked" : {
|
||||
"message": "Blocked",
|
||||
"description": "header for the blocked requests column"
|
||||
},
|
||||
"statsPageAll" : {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePages" : {
|
||||
"message": "Pages",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookies" : {
|
||||
"message": "Cookies",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCSS" : {
|
||||
"message": "CSS",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageImages" : {
|
||||
"message": "Images",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePlugins" : {
|
||||
"message": "Plugins",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageScripts" : {
|
||||
"message": "Scripts",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageXHRs" : {
|
||||
"message": "XHRs",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageFrames" : {
|
||||
"message": "Frames",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOthers" : {
|
||||
"message": "Others",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailed" : {
|
||||
"message": "Logger",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLogSizePrompt1" : {
|
||||
"message": "Remember the last",
|
||||
"description": "First part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizePrompt2" : {
|
||||
"message": "HTTP requests <b>per page</b>",
|
||||
"description": "Second part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizeHelp" : {
|
||||
"message": "<p>You can inspect details of the most recent raw HTTP requests which have been made by a web page (see below).</p><p>This is mostly useful to advanced users who want to investigate exactly what a web page has been doing. But logging these HTTP requests requires memory, and if you don't care about this technical information, then memory is being wasted.</p><p>Hence this field which lets you adjust the maximum number of the most recent HTTP requests which are to be logged for further inspection.</p><p>Enter “<code>0</code>” to turn off detailed logging (and consequently reduce the memory footprint of <i>nuTensor</i>).</p>",
|
||||
"description": "To help user understand the purpose of the log size value"
|
||||
},
|
||||
"statsPageRefresh" : {
|
||||
"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": "nuTensor – Settings",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayHeader" : {
|
||||
"message": "Matrix",
|
||||
"description": "header for matrix settings used in Settings page"
|
||||
},
|
||||
"settingsMatrixDisplayTextSizePrompt" : {
|
||||
"message": "Text size:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsIconBadgeEnabled":{
|
||||
"message":"Show the number of blocked resources on the icon",
|
||||
"description":""
|
||||
},
|
||||
"settingsMatrixDisplayColorBlind" : {
|
||||
"message": "Color-blind friendly",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixConvenienceHeader" : {
|
||||
"message": "Convenience",
|
||||
"description": "English: Convenience"
|
||||
},
|
||||
"settingsDefaultScopeLevel" : {
|
||||
"message": "Default scope level:",
|
||||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0" : {
|
||||
"message": "Global",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1" : {
|
||||
"message": "Domain",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2" : {
|
||||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked" : {
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted" : {
|
||||
"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" : {
|
||||
"message": "Spoof <code><noscript></code> tags when 1st-party scripts are blocked",
|
||||
"description": "This appears in the Settings pane in the dashboard"
|
||||
},
|
||||
"settingsCloudStorageEnabled" : {
|
||||
"message": "Enable cloud storage support",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips" : {
|
||||
"message": "Disable tooltips",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"privacyPageTitle" : {
|
||||
"message": "nuTensor – Privacy",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesPrompt" : {
|
||||
"message": "Delete blocked cookies",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesHelp" : {
|
||||
"message": "<p>Blacklisted cookies are not prevented by <i>nuTensor</i> from entering your browser. However they are prevented from leaving your browser, which is what really matters. Not blocking cookies before they enter your browser gives you the opportunity to be informed that a site tried to use cookies, and furthermore to inspect their contents if you wish.</p><p>Once these blacklisted cookies have been accounted for by <i>nuTensor</i>, they can be removed from your browser if you wish so.</p><p><b>Important note:</b> Extensions can make web requests during the course of their normal operation. These requests can result in cookies being created in the browser. If the hostname from where a cookie originate is not whitelisted, the cookie will be removed from the browser by <i>nuTensor</i> if this option is checked. So be sure that the hostname(s) with which an extension communicate is whitelisted.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt1" : {
|
||||
"message": "Delete non-blocked session cookies ",
|
||||
"description": "First part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt2" : {
|
||||
"message": " minutes after the last time they have been used",
|
||||
"description": "Second part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesHelp" : {
|
||||
"message": "<p><a href='http://www.w3.org/2001/tag/2010/09/ClientSideStorage.html'>W3C</a>: “A session cookie ... is erased when you end the browser session. The session cookie is stored in temporary memory and is not retained after the browser is closed.”</p><p>Except that this <a href='https://code.google.com/p/chromium/issues/detail?id=128513'>might not be happening</a> in some browsers. Also, to some, having to close the browser in order for the session cookies to clear might not be early enough.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStoragePrompt" : {
|
||||
"message": "Delete <a href='https://en.wikipedia.org/wiki/Web_storage'>local storage</a> content set by blocked hostnames",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStorageHelp" : {
|
||||
"message": "TODO",
|
||||
"description": ""
|
||||
},
|
||||
"privacyClearCachePrompt1" : {
|
||||
"message": "Clear browser cache every",
|
||||
"description": "First part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCachePrompt2" : {
|
||||
"message": "minutes",
|
||||
"description": "Second part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCacheHelp" : {
|
||||
"message": "<p>Some web sites are really bent on tracking you, so much that they will use not-so-nice tricks to work around whatever measures you take in order to not be tracked.</p><p>A few of these tricks rely<sup>[1, 2]</sup> on the <a href='https://en.wikipedia.org/wiki/Web_cache'>browser cache</a>, which content is often long lasting since rarely will users take the time to regularly clear their browser cache.</p><p>There is little inconvenience to clear the browser cache regularly (likelihood is that you won't notice when it happens), and the benefit is to prevent these obnoxious trackers from invading your privacy.</p><p>Check this option to have <i>nuTensor</i> do it for you, at the interval you wish.</p><p>[1] <a href='https://grepular.com/Preventing_Web_Tracking_via_the_Browser_Cache'>“Preventing Web Tracking via the Browser Cache”</a>\n[2] <a href='http://lucb1e.com/rp/cookielesscookies/'>“Cookieless cookies”</a></p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererPrompt" : {
|
||||
"message": "Spoof <a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referrer</a> string of third-party requests",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererHelp" : {
|
||||
"message": "From Wikipedia:<blockquote>HTTP referer is an HTTP header field that identifies the address of the webpage that linked to the resource being requested. ... <b>Because referer information can violate privacy, some web browsers allow the user to disable the sending of referer information.</b></blockquote>If this setting is checked, <i>nuTensor</i> will spoof the HTTP referrer information if the domain name of the HTTP referrer is third-party to the domain name of net request.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentPrompt" : {
|
||||
"message": "Strict HTTPS: forbid mixed content",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentHelp" : {
|
||||
"message": "<p>From <a href='https://developer.mozilla.org/en-US/docs/Security/MixedContent'>Mozilla Developer Network</a>:</p><blockquote>If [a] HTTPS page includes content retrieved through regular, cleartext HTTP, then the connection is only partially encrypted: the unencrypted content is accessible to sniffers and can be modified by man-in-the-middle attackers, and therefore the connection is not safeguarded anymore. When a webpage exhibits this behavior, it is called a mixed content page.</blockquote>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingPrompt" : {
|
||||
"message": "Block all <a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>hyperlink auditing</a> attempts",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingHelp" : {
|
||||
"message": "<p>Hyperlink auditing is a mechanism which allow a party, <b>any party</b>, to be informed about which link a user clicked on a particular web page. It is essentially a tracking feature: it allows a web site, or any third-party to that web site, to be informed about which link you clicked on which one of its web pages. The sole purpose is to track your browsing activity.</p>",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
|
||||
"userRulesPermanentHeader": {
|
||||
"message": "Permanent rules",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesTemporaryHeader": {
|
||||
"message": "Temporary rules",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesRevert": {
|
||||
"message": "Revert",
|
||||
"description": "Will remove all temporary rules"
|
||||
},
|
||||
"userRulesCommit": {
|
||||
"message": "Commit",
|
||||
"description": "Will save all temporary rules"
|
||||
},
|
||||
"userRulesEdit": {
|
||||
"message": "Edit",
|
||||
"description": "Will enable manual-edit mode (textarea)"
|
||||
},
|
||||
"userRulesEditSave": {
|
||||
"message": "Save",
|
||||
"description": "Will save manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesEditDicard": {
|
||||
"message": "Discard",
|
||||
"description": "Will discard manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesImport": {
|
||||
"message": "Import from file...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesExport": {
|
||||
"message": "Export to file...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesFormatHint": {
|
||||
"message": "See this page for rule syntax.",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesDefaultFileName": {
|
||||
"message": "my-umatrix-rules.txt",
|
||||
"description": "default file name to use"
|
||||
},
|
||||
|
||||
|
||||
"assetsHostsSection" : {
|
||||
"message": "Hosts files",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt" : {
|
||||
"message": "All hostnames in a hosts file are loaded as blacklisted hostnames in the global scope.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesStats" : {
|
||||
"message": "{{blockedHostnameCount}} distinct blocked hostnames from:",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPerFileStats" : {
|
||||
"message": "{{used}} used out of {{total}}",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesLastUpdate" : {
|
||||
"message":"Last update: {{ago}}",
|
||||
"description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
|
||||
},
|
||||
"hostsFilesApplyChanges" : {
|
||||
"message": "Apply changes",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt":{
|
||||
"message":"Auto-update assets",
|
||||
"description":""
|
||||
},
|
||||
"hostsFilesUpdateNow":{
|
||||
"message":"Update now",
|
||||
"description":""
|
||||
},
|
||||
"hostsFilesPurgeAll":{
|
||||
"message":"Purge all caches",
|
||||
"description":""
|
||||
},
|
||||
"hostsFilesExternalListsHint":{
|
||||
"message":"Import external assets here: \nOne URL per line; invalid URLs will be silently ignored.",
|
||||
"description":""
|
||||
},
|
||||
"hostsFilesExternalListsParse":{
|
||||
"message":"Parse",
|
||||
"description":""
|
||||
},
|
||||
"hostsFilesExternalListPurge":{
|
||||
"message":"purge cache",
|
||||
"description":""
|
||||
},
|
||||
"hostsFilesExternalListNew":{
|
||||
"message":"new version available",
|
||||
"description":""
|
||||
},
|
||||
"hostsFilesExternalListObsolete":{
|
||||
"message":"outdated",
|
||||
"description":""
|
||||
},
|
||||
"assetsRecipesSection" : {
|
||||
"message": "Ruleset recipes",
|
||||
"description": "header to identify the ruleset files section"
|
||||
},
|
||||
"assetsRecipesSummary" : {
|
||||
"message": "Ruleset recipes are imported from the popup panel <em>on demand</em>, i.e. <b>only</b> through user interaction.",
|
||||
"description": ""
|
||||
},
|
||||
"assetsImportLabel" : {
|
||||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"rawSettingsWarning" : {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"aboutChangelog" : {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/releases'>Change log</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutStorageUsed" : {
|
||||
"message": "Storage used: {{storageUsed}} bytes",
|
||||
"description": ""
|
||||
},
|
||||
"aboutDoc" : {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki'>Documentation</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutPermissions" : {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki/Permissions'>Permissions</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode" : {
|
||||
"message": "Source code (GPLv3)",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssues" : {
|
||||
"message": "Issue tracker",
|
||||
"description": "Text for a link to official issue tracker"
|
||||
},
|
||||
"aboutContributors":{
|
||||
"message":"Contributors",
|
||||
"description":"English: Contributors"
|
||||
},
|
||||
"aboutCodeContributors":{
|
||||
"message":"Code:",
|
||||
"description":""
|
||||
},
|
||||
"aboutIssueContributors":{
|
||||
"message":"Issues:",
|
||||
"description":""
|
||||
},
|
||||
"aboutTranslationContributors":{
|
||||
"message":"Translations:",
|
||||
"description":""
|
||||
},
|
||||
"aboutUserDataHeader" : {
|
||||
"message": "Your data",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupButton" : {
|
||||
"message": "Back up to file...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupFilename" : {
|
||||
"message": "my-umatrix-backup.txt",
|
||||
"description": "default filename to use"
|
||||
},
|
||||
"aboutRestoreButton" : {
|
||||
"message": "Restore from file...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutRestoreConfirm" : {
|
||||
"message": "All your settings will be overwritten using data backed up on {{time}}, and nuTensor will restart.\n\nOverwrite all existing settings using backed up data?",
|
||||
"description": "Message asking user to confirm restore"
|
||||
},
|
||||
"aboutRestoreError" : {
|
||||
"message": "The data could not be read or is invalid",
|
||||
"description": ""
|
||||
},
|
||||
"aboutOr" : {
|
||||
"message": "... or ...",
|
||||
"description": "English: ... or ..."
|
||||
},
|
||||
"aboutResetButton" : {
|
||||
"message": "Reset to default settings",
|
||||
"description": "English: Reset to default settings"
|
||||
},
|
||||
"aboutResetConfirm" : {
|
||||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "nuTensor has prevented the following page from loading:",
|
||||
"description": "English: nuTensor has prevented the following page from loading:"
|
||||
},
|
||||
"mainBlockedPrompt2": {
|
||||
"message": "Because of the following rule",
|
||||
"description": "English: Because of the following rule"
|
||||
},
|
||||
"mainBlockedNoParamsPrompt": {
|
||||
"message": "without parameters",
|
||||
"description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
|
||||
},
|
||||
"mainBlockedBack" : {
|
||||
"message": "Go back",
|
||||
"description": "English: Go back"
|
||||
},
|
||||
"mainBlockedClose" : {
|
||||
"message": "Close",
|
||||
"description": "English: Close"
|
||||
},
|
||||
|
||||
"commandRevertAll" : {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistPageDomain" : {
|
||||
"message": "Temporarily whitelist page domain",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistAll" : {
|
||||
"message": "Temporarily whitelist all",
|
||||
"description": ""
|
||||
},
|
||||
"commandOpenDashboard" : {
|
||||
"message": "Open dashboard",
|
||||
"description": ""
|
||||
},
|
||||
|
||||
"elapsedOneMinuteAgo":{
|
||||
"message":"a minute ago",
|
||||
"description":"English: a minute ago"
|
||||
},
|
||||
"elapsedManyMinutesAgo":{
|
||||
"message":"{{value}} minutes ago",
|
||||
"description":"English: {{value}} minutes ago"
|
||||
},
|
||||
"elapsedOneHourAgo":{
|
||||
"message":"an hour ago",
|
||||
"description":"English: an hour ago"
|
||||
},
|
||||
"elapsedManyHoursAgo":{
|
||||
"message":"{{value}} hours ago",
|
||||
"description":"English: {{value}} hours ago"
|
||||
},
|
||||
"elapsedOneDayAgo":{
|
||||
"message":"a day ago",
|
||||
"description":"English: a day ago"
|
||||
},
|
||||
"elapsedManyDaysAgo":{
|
||||
"message":"{{value}} days ago",
|
||||
"description":"English: {{value}} days ago"
|
||||
},
|
||||
|
||||
"showDashboardButton":{
|
||||
"message":"Dashboard",
|
||||
"description":"Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"showLoggerButton":{
|
||||
"message":"Logger",
|
||||
"description":"Appears in Firefox's add-on preferences"
|
||||
},
|
||||
|
||||
"cloudPush": {
|
||||
"message": "Export to cloud storage",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudPull": {
|
||||
"message": "Import from cloud storage",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudNoData": {
|
||||
"message": "...\n...",
|
||||
"description": ""
|
||||
},
|
||||
"cloudDeviceNamePrompt": {
|
||||
"message": "This device name:",
|
||||
"description": "used as a prompt for the user to provide a custom device name"
|
||||
},
|
||||
"genericSubmit": {
|
||||
"message": "Submit",
|
||||
"description": "for generic 'submit' buttons"
|
||||
},
|
||||
"genericRevert": {
|
||||
"message": "Revert",
|
||||
"description": "for generic 'revert' buttons"
|
||||
},
|
||||
|
||||
"errorCantConnectTo":{
|
||||
"message":"Network error: Unable to connect to {{url}}",
|
||||
"description":""
|
||||
},
|
||||
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@ -1,866 +0,0 @@
|
||||
{
|
||||
"extName": {
|
||||
"message": "nuTensor",
|
||||
"description": ""
|
||||
},
|
||||
"extShortDesc": {
|
||||
"message": "Point & click to forbid/allow any class of requests made by your browser. Use it to block scripts, iframes, ads, facebook, etc.",
|
||||
"description": "this will be used as short description in web stores: MUST BE 132 characters OR LESS"
|
||||
},
|
||||
"dashboardPageName": {
|
||||
"message": "nuTensor — Panelo",
|
||||
"description": ""
|
||||
},
|
||||
"loggerPageName": {
|
||||
"message": "nuTensor — Logger",
|
||||
"description": "Title for the logger window"
|
||||
},
|
||||
"settingsPageName": {
|
||||
"message": "Agordoj",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"privacyPageName": {
|
||||
"message": "Privateco",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"statsPageName": {
|
||||
"message": "Statistics",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"userRulesPageName": {
|
||||
"message": "Miaj reguloj",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
"message": "Assets",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "More",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
"message": "Pri",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"allPrettyName": {
|
||||
"message": "all",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cookiePrettyName": {
|
||||
"message": "kuketo",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cssPrettyName": {
|
||||
"message": "css",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"imagePrettyName": {
|
||||
"message": "bildo",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "media",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
"message": "kromaĵo",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"scriptPrettyName": {
|
||||
"message": "skripto",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
"message": "kadro",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"otherPrettyName": {
|
||||
"message": "alia",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"matrixNoNetTrafficPrompt": {
|
||||
"message": "No net traffic seen for this tab so far.",
|
||||
"description": ""
|
||||
},
|
||||
"matrixLocalScopeTip": {
|
||||
"message": "Select a local scope to see/create rules which apply only in that scope",
|
||||
"description": "Tool tip for the local scope button"
|
||||
},
|
||||
"matrixGlobalScopeTip": {
|
||||
"message": "Select the global scope to see/create rules which apply everywhere",
|
||||
"description": "Tool tip for the global scope button"
|
||||
},
|
||||
"matrixMtxButtonTip": {
|
||||
"message": "Disable/enable matrix filtering for this scope",
|
||||
"description": "Tool tip for matrix button"
|
||||
},
|
||||
"matrixPersistButtonTip": {
|
||||
"message": "Save all temporary changes for this scope",
|
||||
"description": "Tool tip for the persist button"
|
||||
},
|
||||
"matrixRevertButtonTip": {
|
||||
"message": "Revert temporary changes for this scope",
|
||||
"description": "Tool tip for the revert local permission button"
|
||||
},
|
||||
"matrixReloadButton": {
|
||||
"message": "Reŝargi la paĝon.",
|
||||
"description": "Tool tip for the reload button"
|
||||
},
|
||||
"matrix1stPartyLabel": {
|
||||
"message": "1st-party",
|
||||
"description": "1st-party"
|
||||
},
|
||||
"matrixBlacklistedHostnames": {
|
||||
"message": "{{count}} blacklisted hostname(s)",
|
||||
"description": "Appears in the metadata row of bottom-most group: **mind the limited width**"
|
||||
},
|
||||
"matrixSwitchNoMixedContent": {
|
||||
"message": "Forbid mixed content",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoWorker": {
|
||||
"message": "Forbid web workers",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchReferrerSpoof": {
|
||||
"message": "Spoof <code>Referer</code> header",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoscriptSpoof": {
|
||||
"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"
|
||||
},
|
||||
"matrixLoggerMenuEntry": {
|
||||
"message": "Iri al protokolilo",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixDashboardMenuEntry": {
|
||||
"message": "Iri al panelo",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound": {
|
||||
"message": "No web page found",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Import rules",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Save rules",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "nuTensor – Statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageGenericStats": {
|
||||
"message": "Generic statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookieHeadersFoiled": {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_cookie'>HTTP cookie</a> headers foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRefererHeadersFoiled": {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referer</a> headers foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageHyperlinkAuditingFoiled": {
|
||||
"message": "<a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>Hyperlink auditing</a> attempts foiled: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookiesRemoved": {
|
||||
"message": "Lokaj kuketoj forigitaj: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLocalStoragesCleared": {
|
||||
"message": "<a href='http://diveintohtml5.info/storage.html'>Lokaj konservadoj</a> malplenigitaj: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageBrowserCacheCleared": {
|
||||
"message": "Browser caches cleared: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedStats": {
|
||||
"message": "Detailed statistics",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedAllPages": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedBehindTheScenePage": {
|
||||
"message": "Behind the scene",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOverview": {
|
||||
"message": "Superrigardo",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRequests": {
|
||||
"message": "Petoj",
|
||||
"description": "header for the stat type column"
|
||||
},
|
||||
"statsPageAllowed": {
|
||||
"message": "Allowed",
|
||||
"description": "header for the allowed requests column"
|
||||
},
|
||||
"statsPageBlocked": {
|
||||
"message": "Blocked",
|
||||
"description": "header for the blocked requests column"
|
||||
},
|
||||
"statsPageAll": {
|
||||
"message": "All",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePages": {
|
||||
"message": "Paĝoj",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookies": {
|
||||
"message": "Kuketoj",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCSS": {
|
||||
"message": "CSS",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageImages": {
|
||||
"message": "Bildoj",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePlugins": {
|
||||
"message": "Kromaĵoj",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageScripts": {
|
||||
"message": "Skriptoj",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageXHRs": {
|
||||
"message": "XHR-oj",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageFrames": {
|
||||
"message": "Kadroj",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOthers": {
|
||||
"message": "Aliaj",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailed": {
|
||||
"message": "Protokolilo",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLogSizePrompt1": {
|
||||
"message": "Remember the last",
|
||||
"description": "First part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizePrompt2": {
|
||||
"message": "HTTP requests <b>per page</b>",
|
||||
"description": "Second part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizeHelp": {
|
||||
"message": "<p>You can inspect details of the most recent raw HTTP requests which have been made by a web page (see below).</p><p>This is mostly useful to advanced users who want to investigate exactly what a web page has been doing. But logging these HTTP requests requires memory, and if you don't care about this technical information, then memory is being wasted.</p><p>Hence this field which lets you adjust the maximum number of the most recent HTTP requests which are to be logged for further inspection.</p><p>Enter “<code>0</code>” to turn off detailed logging (and consequently reduce the memory footprint of <i>nuTensor</i>).</p>",
|
||||
"description": "To help user understand the purpose of the log size value"
|
||||
},
|
||||
"statsPageRefresh": {
|
||||
"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": "nuTensor – Agordoj",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayHeader": {
|
||||
"message": "Apero",
|
||||
"description": "header for matrix settings used in Settings page"
|
||||
},
|
||||
"settingsMatrixDisplayTextSizePrompt": {
|
||||
"message": "Tekstogrando:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsIconBadgeEnabled": {
|
||||
"message": "Show the number of blocked resources on the icon",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayColorBlind": {
|
||||
"message": "Afabla por kolorblinduloj",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixConvenienceHeader": {
|
||||
"message": "Komforto",
|
||||
"description": "English: Convenience"
|
||||
},
|
||||
"settingsDefaultScopeLevel": {
|
||||
"message": "Default scope level:",
|
||||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0": {
|
||||
"message": "Global",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "Domain",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
"message": "Site",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"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": {
|
||||
"message": "Spoof <code><noscript></code> tags when 1st-party scripts are blocked",
|
||||
"description": "This appears in the Settings pane in the dashboard"
|
||||
},
|
||||
"settingsCloudStorageEnabled": {
|
||||
"message": "Ŝalti subtenon por nuba konservado",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips": {
|
||||
"message": "Disable tooltips",
|
||||
"description": ""
|
||||
},
|
||||
"privacyPageTitle": {
|
||||
"message": "nuTensor – Privateco",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesPrompt": {
|
||||
"message": "Delete blocked cookies",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesHelp": {
|
||||
"message": "<p>Blacklisted cookies are not prevented by <i>nuTensor</i> from entering your browser. However they are prevented from leaving your browser, which is what really matters. Not blocking cookies before they enter your browser gives you the opportunity to be informed that a site tried to use cookies, and furthermore to inspect their contents if you wish.</p><p>Once these blacklisted cookies have been accounted for by <i>nuTensor</i>, they can be removed from your browser if you wish so.</p><p><b>Important note:</b> Extensions can make web requests during the course of their normal operation. These requests can result in cookies being created in the browser. If the hostname from where a cookie originate is not whitelisted, the cookie will be removed from the browser by <i>nuTensor</i> if this option is checked. So be sure that the hostname(s) with which an extension communicate is whitelisted.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt1": {
|
||||
"message": "Delete non-blocked session cookies ",
|
||||
"description": "First part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt2": {
|
||||
"message": " minutes after the last time they have been used",
|
||||
"description": "Second part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesHelp": {
|
||||
"message": "<p><a href='http://www.w3.org/2001/tag/2010/09/ClientSideStorage.html'>W3C</a>: “A session cookie ... is erased when you end the browser session. The session cookie is stored in temporary memory and is not retained after the browser is closed.”</p><p>Except that this <a href='https://code.google.com/p/chromium/issues/detail?id=128513'>might not be happening</a> in some browsers. Also, to some, having to close the browser in order for the session cookies to clear might not be early enough.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStoragePrompt": {
|
||||
"message": "Delete <a href='https://en.wikipedia.org/wiki/Web_storage'>local storage</a> content set by blocked hostnames",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStorageHelp": {
|
||||
"message": "TODO",
|
||||
"description": ""
|
||||
},
|
||||
"privacyClearCachePrompt1": {
|
||||
"message": "Clear browser cache every",
|
||||
"description": "First part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCachePrompt2": {
|
||||
"message": "minutoj.",
|
||||
"description": "Second part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCacheHelp": {
|
||||
"message": "<p>Some web sites are really bent on tracking you, so much that they will use not-so-nice tricks to work around whatever measures you take in order to not be tracked.</p><p>A few of these tricks rely<sup>[1, 2]</sup> on the <a href='https://en.wikipedia.org/wiki/Web_cache'>browser cache</a>, which content is often long lasting since rarely will users take the time to regularly clear their browser cache.</p><p>There is little inconvenience to clear the browser cache regularly (likelihood is that you won't notice when it happens), and the benefit is to prevent these obnoxious trackers from invading your privacy.</p><p>Check this option to have <i>nuTensor</i> do it for you, at the interval you wish.</p><p>[1] <a href='https://grepular.com/Preventing_Web_Tracking_via_the_Browser_Cache'>“Preventing Web Tracking via the Browser Cache”</a>\n[2] <a href='http://lucb1e.com/rp/cookielesscookies/'>“Cookieless cookies”</a></p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererPrompt": {
|
||||
"message": "Spoof <a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referrer</a> string of third-party requests",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererHelp": {
|
||||
"message": "From Wikipedia:<blockquote>HTTP referer is an HTTP header field that identifies the address of the webpage that linked to the resource being requested. ... <b>Because referer information can violate privacy, some web browsers allow the user to disable the sending of referer information.</b></blockquote>If this setting is checked, <i>nuTensor</i> will spoof the HTTP referrer information if the domain name of the HTTP referrer is third-party to the domain name of net request.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentPrompt": {
|
||||
"message": "Strict HTTPS: forbid mixed content",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentHelp": {
|
||||
"message": "<p>From <a href='https://developer.mozilla.org/en-US/docs/Security/MixedContent'>Mozilla Developer Network</a>:</p><blockquote>If [a] HTTPS page includes content retrieved through regular, cleartext HTTP, then the connection is only partially encrypted: the unencrypted content is accessible to sniffers and can be modified by man-in-the-middle attackers, and therefore the connection is not safeguarded anymore. When a webpage exhibits this behavior, it is called a mixed content page.</blockquote>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingPrompt": {
|
||||
"message": "Block all <a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>hyperlink auditing</a> attempts",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingHelp": {
|
||||
"message": "<p>Hyperlink auditing is a mechanism which allow a party, <b>any party</b>, to be informed about which link a user clicked on a particular web page. It is essentially a tracking feature: it allows a web site, or any third-party to that web site, to be informed about which link you clicked on which one of its web pages. The sole purpose is to track your browsing activity.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesPermanentHeader": {
|
||||
"message": "Daŭraj reguloj",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesTemporaryHeader": {
|
||||
"message": "Nedaŭraj reguloj",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesRevert": {
|
||||
"message": "Malfari",
|
||||
"description": "Will remove all temporary rules"
|
||||
},
|
||||
"userRulesCommit": {
|
||||
"message": "Konservi",
|
||||
"description": "Will save all temporary rules"
|
||||
},
|
||||
"userRulesEdit": {
|
||||
"message": "Redakti",
|
||||
"description": "Will enable manual-edit mode (textarea)"
|
||||
},
|
||||
"userRulesEditSave": {
|
||||
"message": "Konservi",
|
||||
"description": "Will save manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesEditDicard": {
|
||||
"message": "Ignori",
|
||||
"description": "Will discard manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesImport": {
|
||||
"message": "Importi el dosiero...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesExport": {
|
||||
"message": "Eksporti al dosiero...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesFormatHint": {
|
||||
"message": "See this page for rule syntax.",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesDefaultFileName": {
|
||||
"message": "miaj-umatrix-reguloj.txt",
|
||||
"description": "default file name to use"
|
||||
},
|
||||
"assetsHostsSection": {
|
||||
"message": "Hosts files",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt": {
|
||||
"message": "All hostnames in a hosts file are loaded as blacklisted hostnames in the global scope.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesStats": {
|
||||
"message": "{{blockedHostnameCount}} distinct blocked hostnames from:",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPerFileStats": {
|
||||
"message": "{{used}} used out of {{total}}",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesLastUpdate": {
|
||||
"message": "Lasta ĝisdatigo: {{ago}}",
|
||||
"description": "English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
|
||||
},
|
||||
"hostsFilesApplyChanges": {
|
||||
"message": "Apliki ŝanĝojn",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Auto-update assets",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
"message": "Ĝisdatigi nun",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPurgeAll": {
|
||||
"message": "Malplenigi ĉiujn kaŝmemorojn",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsHint": {
|
||||
"message": "Import external assets here: \nOne URL per line; invalid URLs will be silently ignored.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsParse": {
|
||||
"message": "Analizi",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListPurge": {
|
||||
"message": "malplenigi kaŝmemoron",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListNew": {
|
||||
"message": "nova versio disponebla",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListObsolete": {
|
||||
"message": "neĝisdata",
|
||||
"description": ""
|
||||
},
|
||||
"assetsRecipesSection": {
|
||||
"message": "Ruleset recipes",
|
||||
"description": "header to identify the ruleset files section"
|
||||
},
|
||||
"assetsRecipesSummary": {
|
||||
"message": "Ruleset recipes are imported from the popup panel <em>on demand</em>, i.e. <b>only</b> through user interaction.",
|
||||
"description": ""
|
||||
},
|
||||
"assetsImportLabel": {
|
||||
"message": "Import...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "My hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "My recipes",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/releases'>Ŝanĝoprotokolo</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutStorageUsed": {
|
||||
"message": "Storage used: {{storageUsed}} bytes",
|
||||
"description": ""
|
||||
},
|
||||
"aboutDoc": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki'>Documentation</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutPermissions": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki/Permissions'>Permissions</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode": {
|
||||
"message": "Fontkodo (GPLv3)",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssues": {
|
||||
"message": "Cimoj kaj problemoj",
|
||||
"description": "Text for a link to official issue tracker"
|
||||
},
|
||||
"aboutContributors": {
|
||||
"message": "Kontribuantoj",
|
||||
"description": "English: Contributors"
|
||||
},
|
||||
"aboutCodeContributors": {
|
||||
"message": "Kode:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssueContributors": {
|
||||
"message": "Problemoj:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutTranslationContributors": {
|
||||
"message": "Tradukoj:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutUserDataHeader": {
|
||||
"message": "Viaj datumoj",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupButton": {
|
||||
"message": "Savkopii al dosiero...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupFilename": {
|
||||
"message": "mia-umatrix-savkopio.txt",
|
||||
"description": "default filename to use"
|
||||
},
|
||||
"aboutRestoreButton": {
|
||||
"message": "Restore from file...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutRestoreConfirm": {
|
||||
"message": "All your settings will be overwritten using data backed up on {{time}}, and nuTensor will restart.\n\nOverwrite all existing settings using backed up data?",
|
||||
"description": "Message asking user to confirm restore"
|
||||
},
|
||||
"aboutRestoreError": {
|
||||
"message": "The data could not be read or is invalid",
|
||||
"description": ""
|
||||
},
|
||||
"aboutOr": {
|
||||
"message": "... aŭ ...",
|
||||
"description": "English: ... or ..."
|
||||
},
|
||||
"aboutResetButton": {
|
||||
"message": "Reset to default settings",
|
||||
"description": "English: Reset to default settings"
|
||||
},
|
||||
"aboutResetConfirm": {
|
||||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "nuTensor has prevented the following page from loading:",
|
||||
"description": "English: nuTensor has prevented the following page from loading:"
|
||||
},
|
||||
"mainBlockedPrompt2": {
|
||||
"message": "Because of the following rule",
|
||||
"description": "English: Because of the following rule"
|
||||
},
|
||||
"mainBlockedNoParamsPrompt": {
|
||||
"message": "without parameters",
|
||||
"description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
|
||||
},
|
||||
"mainBlockedBack": {
|
||||
"message": "Reen",
|
||||
"description": "English: Go back"
|
||||
},
|
||||
"mainBlockedClose": {
|
||||
"message": "Fermi",
|
||||
"description": "English: Close"
|
||||
},
|
||||
"commandRevertAll": {
|
||||
"message": "Revert all temporary changes",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistPageDomain": {
|
||||
"message": "Temporarily whitelist page domain",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistAll": {
|
||||
"message": "Temporarily whitelist all",
|
||||
"description": ""
|
||||
},
|
||||
"commandOpenDashboard": {
|
||||
"message": "Malfermi la panelo",
|
||||
"description": ""
|
||||
},
|
||||
"elapsedOneMinuteAgo": {
|
||||
"message": "antaŭ 1 minuto",
|
||||
"description": "English: a minute ago"
|
||||
},
|
||||
"elapsedManyMinutesAgo": {
|
||||
"message": "antaŭ {{value}} minutoj",
|
||||
"description": "English: {{value}} minutes ago"
|
||||
},
|
||||
"elapsedOneHourAgo": {
|
||||
"message": "antaŭ 1 horo",
|
||||
"description": "English: an hour ago"
|
||||
},
|
||||
"elapsedManyHoursAgo": {
|
||||
"message": "antaŭ {{value}} horoj",
|
||||
"description": "English: {{value}} hours ago"
|
||||
},
|
||||
"elapsedOneDayAgo": {
|
||||
"message": "antaŭ 1 tago",
|
||||
"description": "English: a day ago"
|
||||
},
|
||||
"elapsedManyDaysAgo": {
|
||||
"message": "antaŭ {{value}} tagoj",
|
||||
"description": "English: {{value}} days ago"
|
||||
},
|
||||
"showDashboardButton": {
|
||||
"message": "Panelo",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"showLoggerButton": {
|
||||
"message": "Protokolilo",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"cloudPush": {
|
||||
"message": "Eksporti al nuba konservado",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudPull": {
|
||||
"message": "Importi el nuba konservado",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudNoData": {
|
||||
"message": "...\n...",
|
||||
"description": ""
|
||||
},
|
||||
"cloudDeviceNamePrompt": {
|
||||
"message": "Nomo de ĉi tiu aparato:",
|
||||
"description": "used as a prompt for the user to provide a custom device name"
|
||||
},
|
||||
"genericSubmit": {
|
||||
"message": "Sendi",
|
||||
"description": "for generic 'submit' buttons"
|
||||
},
|
||||
"genericRevert": {
|
||||
"message": "Malfari",
|
||||
"description": "for generic 'revert' buttons"
|
||||
},
|
||||
"errorCantConnectTo": {
|
||||
"message": "Reteraro: {{url}} ne konekteblas",
|
||||
"description": ""
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@ -1,866 +0,0 @@
|
||||
{
|
||||
"extName": {
|
||||
"message": "nuTensor",
|
||||
"description": ""
|
||||
},
|
||||
"extShortDesc": {
|
||||
"message": "Prohíbe/permite cualquier petición del navegador. Bloquea scripts, iframes, anuncios, facebook, etc.",
|
||||
"description": "this will be used as short description in web stores: MUST BE 132 characters OR LESS"
|
||||
},
|
||||
"dashboardPageName": {
|
||||
"message": "nuTensor — Panel de control",
|
||||
"description": ""
|
||||
},
|
||||
"loggerPageName": {
|
||||
"message": "nuTensor — Registro de peticiones",
|
||||
"description": "Title for the logger window"
|
||||
},
|
||||
"settingsPageName": {
|
||||
"message": "Configuración",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"privacyPageName": {
|
||||
"message": "Privacidad",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"statsPageName": {
|
||||
"message": "Estadísticas",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"userRulesPageName": {
|
||||
"message": "Mis reglas",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
"message": "Recursos",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "Más",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
"message": "Acerca de",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"allPrettyName": {
|
||||
"message": "todo",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cookiePrettyName": {
|
||||
"message": "cookie",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cssPrettyName": {
|
||||
"message": "css",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"imagePrettyName": {
|
||||
"message": "imagen",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "media",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
"message": "plugin",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"scriptPrettyName": {
|
||||
"message": "script",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
"message": "frame",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"otherPrettyName": {
|
||||
"message": "otro",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"matrixNoNetTrafficPrompt": {
|
||||
"message": "No se ha detectado tráfico de red en esta pestaña hasta el momento.",
|
||||
"description": ""
|
||||
},
|
||||
"matrixLocalScopeTip": {
|
||||
"message": "Seleccione un ámbito local para ver/crear reglas que se aplican solo en ese ámbito",
|
||||
"description": "Tool tip for the local scope button"
|
||||
},
|
||||
"matrixGlobalScopeTip": {
|
||||
"message": "Seleccione el alcance global para ver/crear reglas que se aplican en todas partes",
|
||||
"description": "Tool tip for the global scope button"
|
||||
},
|
||||
"matrixMtxButtonTip": {
|
||||
"message": "Deshabilitar/habilitar el filtrado por matriz en este ámbito",
|
||||
"description": "Tool tip for matrix button"
|
||||
},
|
||||
"matrixPersistButtonTip": {
|
||||
"message": "Guardar cambios temporales para este ámbito",
|
||||
"description": "Tool tip for the persist button"
|
||||
},
|
||||
"matrixRevertButtonTip": {
|
||||
"message": "Revertir cambios temporales para este ámbito",
|
||||
"description": "Tool tip for the revert local permission button"
|
||||
},
|
||||
"matrixReloadButton": {
|
||||
"message": "Recargar la página.\nMantenga pulsada la tecla Shift para evitar usar la caché del navegador.",
|
||||
"description": "Tool tip for the reload button"
|
||||
},
|
||||
"matrix1stPartyLabel": {
|
||||
"message": "peticiones del dominio",
|
||||
"description": "1st-party"
|
||||
},
|
||||
"matrixBlacklistedHostnames": {
|
||||
"message": "{{count}} nombres de dominio en la lista negra",
|
||||
"description": "Appears in the metadata row of bottom-most group: **mind the limited width**"
|
||||
},
|
||||
"matrixSwitchNoMixedContent": {
|
||||
"message": "Prohibir contenido mixto",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoWorker": {
|
||||
"message": "Prohibir web workers",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchReferrerSpoof": {
|
||||
"message": "Falsificar encabezado <code>Referer</code>",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoscriptSpoof": {
|
||||
"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"
|
||||
},
|
||||
"matrixLoggerMenuEntry": {
|
||||
"message": "Ir al registro de peticiones",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixDashboardMenuEntry": {
|
||||
"message": "Ir al panel de control",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound": {
|
||||
"message": "No se encontró la página",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Importar reglas",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Guardar reglas",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "nuTensor – Estadísticas",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageGenericStats": {
|
||||
"message": "Estadísticas genéricas",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookieHeadersFoiled": {
|
||||
"message": "Encabezados de <a href='https://es.wikipedia.org/wiki/Cookie_%28inform%C3%A1tica%29'>HTTP cookie</a> frustrados: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRefererHeadersFoiled": {
|
||||
"message": "Encabezados de <a href='https://es.wikipedia.org/wiki/Referer_%28Cabecera_HTTP%29'>HTTP referer</a> frustrados: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageHyperlinkAuditingFoiled": {
|
||||
"message": "Intentos de <a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>auditoría de hipervínculos</a> frustrados: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookiesRemoved": {
|
||||
"message": "Cookies locales eliminadas: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLocalStoragesCleared": {
|
||||
"message": "<a href='http://diveintohtml5.info/storage.html'>Almacenamientos locales</a> vaciados: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageBrowserCacheCleared": {
|
||||
"message": "Memorias caché del navegador eliminadas: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedStats": {
|
||||
"message": "Estadísticas detalladas",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedAllPages": {
|
||||
"message": "Todo",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedBehindTheScenePage": {
|
||||
"message": "Peticiones ocultas",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOverview": {
|
||||
"message": "Resumen",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRequests": {
|
||||
"message": "Peticiones",
|
||||
"description": "header for the stat type column"
|
||||
},
|
||||
"statsPageAllowed": {
|
||||
"message": "Permitidas",
|
||||
"description": "header for the allowed requests column"
|
||||
},
|
||||
"statsPageBlocked": {
|
||||
"message": "Bloquedas",
|
||||
"description": "header for the blocked requests column"
|
||||
},
|
||||
"statsPageAll": {
|
||||
"message": "Todo",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePages": {
|
||||
"message": "Páginas",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookies": {
|
||||
"message": "Cookies",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCSS": {
|
||||
"message": "CSS",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageImages": {
|
||||
"message": "Imágenes",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePlugins": {
|
||||
"message": "Plugins",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageScripts": {
|
||||
"message": "Scripts",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageXHRs": {
|
||||
"message": "XHRs",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageFrames": {
|
||||
"message": "Frames",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOthers": {
|
||||
"message": "Otros",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailed": {
|
||||
"message": "Registro de peticiones",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLogSizePrompt1": {
|
||||
"message": "Recordar últimas",
|
||||
"description": "First part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizePrompt2": {
|
||||
"message": "Peticiones HTTP <b>por página</b>",
|
||||
"description": "Second part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizeHelp": {
|
||||
"message": "<p>Permite inspeccionar los detalles de las peticiones HTTP directas más recientes hechas por una página web (ver debajo).</p><p>Útil sobre todo para usuarios avanzados que deseen investigar qué, exactamente, ha estado haciendo una página. Sin embargo, registrar tales peticiones HTTP requiere memoria, que puede terminar siendo malgastada si dicha información técnica no es de su interés.</p><p>Por ello este campo le permite ajustar el número máximo de peticiones HTTP recientes que se van a registrar para una inspección ulterior.</p><p>Introduzca “<code>0</code>” para desactivar el registro detallado (con el consecuente ahorro de memoria de <i>nuTensor</i>).</p>",
|
||||
"description": "To help user understand the purpose of the log size value"
|
||||
},
|
||||
"statsPageRefresh": {
|
||||
"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": "nuTensor – Configuración",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayHeader": {
|
||||
"message": "Matriz",
|
||||
"description": "header for matrix settings used in Settings page"
|
||||
},
|
||||
"settingsMatrixDisplayTextSizePrompt": {
|
||||
"message": "Tamaño del texto:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsIconBadgeEnabled": {
|
||||
"message": "Mostrar el número de peticiones bloqueadas en el icono",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayColorBlind": {
|
||||
"message": "Accesible para daltónicos",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixConvenienceHeader": {
|
||||
"message": "Comodidad",
|
||||
"description": "English: Convenience"
|
||||
},
|
||||
"settingsDefaultScopeLevel": {
|
||||
"message": "Nivel de entorno predeterminado:",
|
||||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0": {
|
||||
"message": "Global",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "Dominio",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
"message": "Sitio",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Ocultar marcadores de posición de los elementos bloqueados",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"message": "Ocultar marcadores de posición de los elementos en la 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": {
|
||||
"message": "Falsificar etiquetas <code><noscript></code> cuando se bloquean scripts del dominio",
|
||||
"description": "This appears in the Settings pane in the dashboard"
|
||||
},
|
||||
"settingsCloudStorageEnabled": {
|
||||
"message": "Habilitar almacenamiento en la nube",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips": {
|
||||
"message": "Deshabilitar las descripciones emergentes",
|
||||
"description": ""
|
||||
},
|
||||
"privacyPageTitle": {
|
||||
"message": "nuTensor – Privacidad",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesPrompt": {
|
||||
"message": "Eliminar cookies bloquedas",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesHelp": {
|
||||
"message": "<p><i>nuTensor</i> no previene la entrada al navegador de cookies en la lista negra, pero sí su salida, que es lo que realmente importa. El hecho de no bloquear las cookies antes de su entrada, da la oportunidad de saber si un sitio intenta usar cookies, e inspeccionar su contenido si se desea.</p><p>Una vez que tales cookies han sido detectadas por <i>nuTensor</i>, las mismas pueden ser eliminadas del navegador si lo decide.</p><p><b>Nota importante:</b> Las extensiones pueden hacer peticiones web como parte de su normal operación. Estas peticiones pueden resultar en la creación de cookies dentro del navegador. Si el nombre de dominio del cual se generó la cookie no está en la lista de permitidos, la cookie será eliminada por <i>nuTensor</i> mientras esta opción esté activa. Así que asegúrese de permitir los nombres de dominio con los cuales se comunica una extensión determinada.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt1": {
|
||||
"message": "Eliminar las cookies de sesión no bloqueadas ",
|
||||
"description": "First part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt2": {
|
||||
"message": " minutos a partir de la última vez que fueron usadas",
|
||||
"description": "Second part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesHelp": {
|
||||
"message": "<p><a href='http://www.w3.org/2001/tag/2010/09/ClientSideStorage.html'>W3C</a>: “Una cookie de sesión ... es eliminada una vez usted termina la sesión del navegador. La cookie de sesión es almacenada en la memoria temporal y no está disponible luego de cerrar el navegador.”</p><p>Excepto que esto <a href='https://code.google.com/p/chromium/issues/detail?id=128513'>pudiera no estar sucediendo así</a> cuando se usa un navegador basado en Chromium. Además, cerrar el navegador para limpiar las cookies de sesión quizás no sea lo suficientemente rápido para algunos.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStoragePrompt": {
|
||||
"message": "Eliminar contenido de los nombres de dominio bloqueados <a href='https://en.wikipedia.org/wiki/Web_storage'>almacenado localmente</a>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStorageHelp": {
|
||||
"message": "POR HACER",
|
||||
"description": ""
|
||||
},
|
||||
"privacyClearCachePrompt1": {
|
||||
"message": "Limpiar la caché del navegador cada",
|
||||
"description": "First part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCachePrompt2": {
|
||||
"message": "minutos",
|
||||
"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 tu privacidad.</p><p>Active esta opción para que <i>nuTensor</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": {
|
||||
"message": "Falsificar cadenas <a href='https://es.wikipedia.org/wiki/Referer_%28Cabecera_HTTP%29'>HTTP referer</a> en las peticiones de terceros",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererHelp": {
|
||||
"message": "Según Wikipedia:<blockquote>Un HTTP referer identifica la dirección de la página web (es decir, la URI o IRI) que creó el vínculo con el recurso que está siendo solicitado. ... <b>Esto desata preocupaciones en cuanto a la privacidad, y como resultado, se han desarrollado un cierto número de sistemas para prevenir que los servidores web envíen la URL real.</b></blockquote>Si se selecciona esta opción, <i>nuTensor</i> falsificará la información del HTTP referer si el nombre de dominio del HTTP referer no concuerda con el nombre de dominio de la URL pedida (o sea, el creador del vínculo es un tercero respecto a la página web).",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentPrompt": {
|
||||
"message": "HTTPS estricto: prohibir contenido mixto",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentHelp": {
|
||||
"message": "<p>Según <a href='https://developer.mozilla.org/en-US/docs/Security/MixedContent'>Mozilla Developer Network</a>:</p><blockquote>Si [una] página HTTPS incluye contenido que se obtiene a través de HTTP regular, entonces la conexión está solo parcialmente encriptada: el contenido no encriptado puede ser leído mediante sniffers y modificado por ataques tipo \"man-in-the-middle\", lo que hace que la conexión ya no sea segura. Una página web que exhiba este comportamiento, se considera una página de contenido mixto.</blockquote>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingPrompt": {
|
||||
"message": "Bloquear todos los intentos de <a href='http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing'>auditoría de hipervínculos</a>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingHelp": {
|
||||
"message": "<p>La auditoría de hipervínculos o enlaces es un mecanismo que permite a alguien, <b>cualquiera</b>, ser informado acerca de a que enlace accedió un usuario en una página web particular. Es esencialmente un mecanismo de rastreo: permite a un sitio web, o cualquier tercero, ser informado sobre cuales enlaces, en cuales páginas, fueron accedidos por el usuario. Su único motivo es rastrear la actividad de navegación del usuario.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesPermanentHeader": {
|
||||
"message": "Reglas permanentes",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesTemporaryHeader": {
|
||||
"message": "Reglas temporales",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesRevert": {
|
||||
"message": "Revertir",
|
||||
"description": "Will remove all temporary rules"
|
||||
},
|
||||
"userRulesCommit": {
|
||||
"message": "Establecer",
|
||||
"description": "Will save all temporary rules"
|
||||
},
|
||||
"userRulesEdit": {
|
||||
"message": "Editar",
|
||||
"description": "Will enable manual-edit mode (textarea)"
|
||||
},
|
||||
"userRulesEditSave": {
|
||||
"message": "Guardar",
|
||||
"description": "Will save manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesEditDicard": {
|
||||
"message": "Descartar",
|
||||
"description": "Will discard manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesImport": {
|
||||
"message": "Importar desde archivo...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesExport": {
|
||||
"message": "Exportar a archivo...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesFormatHint": {
|
||||
"message": "Consulte esta página para sintaxis de las reglas.",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesDefaultFileName": {
|
||||
"message": "umatrix-mis-reglas.txt",
|
||||
"description": "default file name to use"
|
||||
},
|
||||
"assetsHostsSection": {
|
||||
"message": "Archivos hosts",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt": {
|
||||
"message": "Todos los nombres de dominio en un archivo hosts son cargados como nombres de dominio en la lista negra de manera global.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesStats": {
|
||||
"message": "{{blockedHostnameCount}} nombres de dominio bloqueados a partir de:",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPerFileStats": {
|
||||
"message": "{{used}} utilizados de {{total}}",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesLastUpdate": {
|
||||
"message": "Última actualización: {{ago}}",
|
||||
"description": "English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
|
||||
},
|
||||
"hostsFilesApplyChanges": {
|
||||
"message": "Aplicar cambios",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Actualizar automáticamente los recursos",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
"message": "Actualizar ahora",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPurgeAll": {
|
||||
"message": "Vaciar todas las memorias caché",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsHint": {
|
||||
"message": "Importar recursos externos aquí: \nUna URL por línea. Las URL inválidas serán ignoradas.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsParse": {
|
||||
"message": "Analizar",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListPurge": {
|
||||
"message": "vaciar memoria caché",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListNew": {
|
||||
"message": "nueva versión disponible",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListObsolete": {
|
||||
"message": "desactualizado",
|
||||
"description": ""
|
||||
},
|
||||
"assetsRecipesSection": {
|
||||
"message": "Plantillas de conjunto de reglas",
|
||||
"description": "header to identify the ruleset files section"
|
||||
},
|
||||
"assetsRecipesSummary": {
|
||||
"message": "Las plantillas de conjunto de reglas se importan desde el panel emergente <em>bajo demanda</em>, ej. <b>solo</b> mediante una acción del usuario.",
|
||||
"description": ""
|
||||
},
|
||||
"assetsImportLabel": {
|
||||
"message": "Importar...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "Mis hosts",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "Mis plantillas",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "¡Atención! Cambie estas configuraciones bajo tu propio riesgo.",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/releases'>Registro de cambios</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutStorageUsed": {
|
||||
"message": "Almacenamiento usado: {{storageUsed}} bytes",
|
||||
"description": ""
|
||||
},
|
||||
"aboutDoc": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki'>Documentación</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutPermissions": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki/Permissions'>Permisos</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode": {
|
||||
"message": "Código fuente (GPLv3)",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssues": {
|
||||
"message": "Registro de problemas",
|
||||
"description": "Text for a link to official issue tracker"
|
||||
},
|
||||
"aboutContributors": {
|
||||
"message": "Colaboradores",
|
||||
"description": "English: Contributors"
|
||||
},
|
||||
"aboutCodeContributors": {
|
||||
"message": "Código:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssueContributors": {
|
||||
"message": "Problemas:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutTranslationContributors": {
|
||||
"message": "Traducciones:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutUserDataHeader": {
|
||||
"message": "Tus datos",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupButton": {
|
||||
"message": "Respaldar en archivo...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupFilename": {
|
||||
"message": "umatrix-mi-respaldo.txt",
|
||||
"description": "default filename to use"
|
||||
},
|
||||
"aboutRestoreButton": {
|
||||
"message": "Restaurar desde archivo...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutRestoreConfirm": {
|
||||
"message": "Toda la configuración se sobrescribirá utilizando datos respaldados en {{time}} y nuTensor se reiniciará.\n\n¿Sobrescribir toda la configuración existente utilizando los datos de respaldo?",
|
||||
"description": "Message asking user to confirm restore"
|
||||
},
|
||||
"aboutRestoreError": {
|
||||
"message": "Los datos no se pueden leer o son inválidos",
|
||||
"description": ""
|
||||
},
|
||||
"aboutOr": {
|
||||
"message": "... o ...",
|
||||
"description": "English: ... or ..."
|
||||
},
|
||||
"aboutResetButton": {
|
||||
"message": "Restablecer ajustes predeterminados",
|
||||
"description": "English: Reset to default settings"
|
||||
},
|
||||
"aboutResetConfirm": {
|
||||
"message": "¡Atención! Esto borrará todas tus configuraciones personalizadas. ¿Seguro desea continuar?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "nuTensor impidió la carga de la página:",
|
||||
"description": "English: nuTensor has prevented the following page from loading:"
|
||||
},
|
||||
"mainBlockedPrompt2": {
|
||||
"message": "Como resultado de la siguiente regla:",
|
||||
"description": "English: Because of the following rule"
|
||||
},
|
||||
"mainBlockedNoParamsPrompt": {
|
||||
"message": "sin parámetros",
|
||||
"description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
|
||||
},
|
||||
"mainBlockedBack": {
|
||||
"message": "Regresar",
|
||||
"description": "English: Go back"
|
||||
},
|
||||
"mainBlockedClose": {
|
||||
"message": "Cerrar",
|
||||
"description": "English: Close"
|
||||
},
|
||||
"commandRevertAll": {
|
||||
"message": "Revertir todos los cambios temporales",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistPageDomain": {
|
||||
"message": "Permitir temporalmente el dominio de la página",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistAll": {
|
||||
"message": "Permitir todo temporalmente",
|
||||
"description": ""
|
||||
},
|
||||
"commandOpenDashboard": {
|
||||
"message": "Abrir panel de control",
|
||||
"description": ""
|
||||
},
|
||||
"elapsedOneMinuteAgo": {
|
||||
"message": "hace un minuto",
|
||||
"description": "English: a minute ago"
|
||||
},
|
||||
"elapsedManyMinutesAgo": {
|
||||
"message": "hace {{value}} minutos",
|
||||
"description": "English: {{value}} minutes ago"
|
||||
},
|
||||
"elapsedOneHourAgo": {
|
||||
"message": "hace una hora",
|
||||
"description": "English: an hour ago"
|
||||
},
|
||||
"elapsedManyHoursAgo": {
|
||||
"message": "hace {{value}} horas",
|
||||
"description": "English: {{value}} hours ago"
|
||||
},
|
||||
"elapsedOneDayAgo": {
|
||||
"message": "hace un día",
|
||||
"description": "English: a day ago"
|
||||
},
|
||||
"elapsedManyDaysAgo": {
|
||||
"message": "hace {{value}} días",
|
||||
"description": "English: {{value}} days ago"
|
||||
},
|
||||
"showDashboardButton": {
|
||||
"message": "Panel de control",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"showLoggerButton": {
|
||||
"message": "Registro de peticiones",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"cloudPush": {
|
||||
"message": "Exportar datos a la nube",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudPull": {
|
||||
"message": "Importar datos de la nube",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudNoData": {
|
||||
"message": "...\n...",
|
||||
"description": ""
|
||||
},
|
||||
"cloudDeviceNamePrompt": {
|
||||
"message": "Nombre de este dispositivo:",
|
||||
"description": "used as a prompt for the user to provide a custom device name"
|
||||
},
|
||||
"genericSubmit": {
|
||||
"message": "Enviar",
|
||||
"description": "for generic 'submit' buttons"
|
||||
},
|
||||
"genericRevert": {
|
||||
"message": "Revertir",
|
||||
"description": "for generic 'revert' buttons"
|
||||
},
|
||||
"errorCantConnectTo": {
|
||||
"message": "Error de red: Imposible conectar con {{url}}",
|
||||
"description": ""
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@ -1,866 +0,0 @@
|
||||
{
|
||||
"extName": {
|
||||
"message": "nuTensor",
|
||||
"description": ""
|
||||
},
|
||||
"extShortDesc": {
|
||||
"message": "Suuna ja klõpsa, et keelata/lubada veebilehitseja kõiki päringud. Sellega saab keelata skripte, iframe-e, reklaame, facebook'i jne.",
|
||||
"description": "this will be used as short description in web stores: MUST BE 132 characters OR LESS"
|
||||
},
|
||||
"dashboardPageName": {
|
||||
"message": "nuTensor — Töölaud",
|
||||
"description": ""
|
||||
},
|
||||
"loggerPageName": {
|
||||
"message": "nuTensor — Logija",
|
||||
"description": "Title for the logger window"
|
||||
},
|
||||
"settingsPageName": {
|
||||
"message": "Seaded",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"privacyPageName": {
|
||||
"message": "Privaatsus",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"statsPageName": {
|
||||
"message": "Statistika",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"userRulesPageName": {
|
||||
"message": "Minu reeglid",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"ubiquitousRulesPageName": {
|
||||
"message": "Vahendid",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"rawSettingsPageName": {
|
||||
"message": "Rohkem",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"aboutPageName": {
|
||||
"message": "Teave",
|
||||
"description": "a tab in dashboard"
|
||||
},
|
||||
"allPrettyName": {
|
||||
"message": "kõik",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cookiePrettyName": {
|
||||
"message": "küpsis",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"cssPrettyName": {
|
||||
"message": "css",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"imagePrettyName": {
|
||||
"message": "pilt",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"mediaPrettyName": {
|
||||
"message": "meedia",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"pluginPrettyName": {
|
||||
"message": "meedia",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"scriptPrettyName": {
|
||||
"message": "skript",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"fetchPrettyName": {
|
||||
"message": "fetch",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"framePrettyName": {
|
||||
"message": "raam",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"otherPrettyName": {
|
||||
"message": "teised",
|
||||
"description": "HAS TO FIT IN MATRIX HEADER!"
|
||||
},
|
||||
"matrixNoNetTrafficPrompt": {
|
||||
"message": "Selle kaardi kohta pole veel netiliiklust näha.",
|
||||
"description": ""
|
||||
},
|
||||
"matrixLocalScopeTip": {
|
||||
"message": "Select a local scope to see/create rules which apply only in that scope",
|
||||
"description": "Tool tip for the local scope button"
|
||||
},
|
||||
"matrixGlobalScopeTip": {
|
||||
"message": "Select the global scope to see/create rules which apply everywhere",
|
||||
"description": "Tool tip for the global scope button"
|
||||
},
|
||||
"matrixMtxButtonTip": {
|
||||
"message": "Selle määratluse puhul keela/luba maatriksiline filtreerimine.\nMaatriksilise filtreerimise blokeeritud ühendused selles portaalis: {{count}}.",
|
||||
"description": "Tool tip for matrix button"
|
||||
},
|
||||
"matrixPersistButtonTip": {
|
||||
"message": "Salvesta ajutiselt kõik selle määratluse muudatused.",
|
||||
"description": "Tool tip for the persist button"
|
||||
},
|
||||
"matrixRevertButtonTip": {
|
||||
"message": "Eemalda selle määratluse ajutised muudatused.",
|
||||
"description": "Tool tip for the revert local permission button"
|
||||
},
|
||||
"matrixReloadButton": {
|
||||
"message": "Värskenda lehekülge.",
|
||||
"description": "Tool tip for the reload button"
|
||||
},
|
||||
"matrix1stPartyLabel": {
|
||||
"message": "1. osapool",
|
||||
"description": "1st-party"
|
||||
},
|
||||
"matrixBlacklistedHostnames": {
|
||||
"message": "{{count}} hosti nimi(e) mustas nimekirjas",
|
||||
"description": "Appears in the metadata row of bottom-most group: **mind the limited width**"
|
||||
},
|
||||
"matrixSwitchNoMixedContent": {
|
||||
"message": "Keela segatud sisu",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoWorker": {
|
||||
"message": "Keela veebitöötajad",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchReferrerSpoof": {
|
||||
"message": "Viitaja narritamine",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixSwitchNoscriptSpoof": {
|
||||
"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"
|
||||
},
|
||||
"matrixLoggerMenuEntry": {
|
||||
"message": "Mine logijasse",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixDashboardMenuEntry": {
|
||||
"message": "Mine esilehele",
|
||||
"description": "A menu entry in the matrix popup"
|
||||
},
|
||||
"matrixNoTabFound": {
|
||||
"message": "Lehekülge ei leitud",
|
||||
"description": "Displays in place of matrix when no data is found for the current page"
|
||||
},
|
||||
"matrixRecipeImportTip": {
|
||||
"message": "Impordi reeglid",
|
||||
"description": "Used as a tooltip for the recipe import button"
|
||||
},
|
||||
"matrixRecipeSaveTip": {
|
||||
"message": "Salvesta reeglid",
|
||||
"description": "Used as a tooltip for the recipe padlock button"
|
||||
},
|
||||
"statsPageTitle": {
|
||||
"message": "nuTensor'i – statistika",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageGenericStats": {
|
||||
"message": "Üldstatistika",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookieHeadersFoiled": {
|
||||
"message": "<a href='https://et.wikipedia.org/wiki/HTTP-k%C3%BCpsis'>HTTP-küpsise</a> tõrjutud päiseid: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRefererHeadersFoiled": {
|
||||
"message": "<a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referer</a>'i tõrjutud päiseid: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageHyperlinkAuditingFoiled": {
|
||||
"message": "<a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>Hüperlingi kontrolli</a> tõrjumiste arv: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookiesRemoved": {
|
||||
"message": "Kohalikke küpsiseid eemaldatud: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLocalStoragesCleared": {
|
||||
"message": "<a href='http://diveintohtml5.info/storage.html'>Kohalikke mälusid</a> tühjendatud: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageBrowserCacheCleared": {
|
||||
"message": "Veebilehe vahemälu tühjendatud: {{count}}",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedStats": {
|
||||
"message": "Üksikasjalik statistika",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedAllPages": {
|
||||
"message": "Kõik",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailedBehindTheScenePage": {
|
||||
"message": "Peidetud päringud",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOverview": {
|
||||
"message": "Ülevaade",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageRequests": {
|
||||
"message": "Päringud",
|
||||
"description": "header for the stat type column"
|
||||
},
|
||||
"statsPageAllowed": {
|
||||
"message": "Lubatud",
|
||||
"description": "header for the allowed requests column"
|
||||
},
|
||||
"statsPageBlocked": {
|
||||
"message": "Blokeeritud",
|
||||
"description": "header for the blocked requests column"
|
||||
},
|
||||
"statsPageAll": {
|
||||
"message": "Kõik",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePages": {
|
||||
"message": "Leheküljed",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCookies": {
|
||||
"message": "Küpsised",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageCSS": {
|
||||
"message": "CSS",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageImages": {
|
||||
"message": "Pildid",
|
||||
"description": ""
|
||||
},
|
||||
"statsPagePlugins": {
|
||||
"message": "Pluginad",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageScripts": {
|
||||
"message": "Skriptid",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageXHRs": {
|
||||
"message": "XHRid",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageFrames": {
|
||||
"message": "Raamid",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageOthers": {
|
||||
"message": "Muud",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageDetailed": {
|
||||
"message": "Logija",
|
||||
"description": ""
|
||||
},
|
||||
"statsPageLogSizePrompt1": {
|
||||
"message": "Mäleta viimast",
|
||||
"description": "First part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizePrompt2": {
|
||||
"message": "HTTP päringut <b>lehekülje kaupa</b>.",
|
||||
"description": "Second part of Remember the last [n] HTTP requests per page"
|
||||
},
|
||||
"statsPageLogSizeHelp": {
|
||||
"message": "<p>You can inspect details of the most recent raw HTTP requests which have been made by a web page (see below).</p><p>This is mostly useful to advanced users who want to investigate exactly what a web page has been doing. But logging these HTTP requests requires memory, and if you don't care about this technical information, then memory is being wasted.</p><p>Hence this field which lets you adjust the maximum number of the most recent HTTP requests which are to be logged for further inspection.</p><p>Enter “<code>0</code>” to turn off detailed logging (and consequently reduce the memory footprint of <i>nuTensor</i>).</p>",
|
||||
"description": "To help user understand the purpose of the log size value"
|
||||
},
|
||||
"statsPageRefresh": {
|
||||
"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": "nuTensor'i – seaded",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayHeader": {
|
||||
"message": "Maatriks",
|
||||
"description": "header for matrix settings used in Settings page"
|
||||
},
|
||||
"settingsMatrixDisplayTextSizePrompt": {
|
||||
"message": "Teksti suurus:",
|
||||
"description": ""
|
||||
},
|
||||
"settingsIconBadgeEnabled": {
|
||||
"message": "Kuva ikoonil blokeeritud ressursside arv",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixDisplayColorBlind": {
|
||||
"message": "Värvipimeduse-sõbralik",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixConvenienceHeader": {
|
||||
"message": "Mugavus",
|
||||
"description": "English: Convenience"
|
||||
},
|
||||
"settingsDefaultScopeLevel": {
|
||||
"message": "Default scope level:",
|
||||
"description": "Label for default scope level selector in Settings pane"
|
||||
},
|
||||
"settingsDefaultScopeLevel0": {
|
||||
"message": "Üldine",
|
||||
"description": "Scope will be global"
|
||||
},
|
||||
"settingsDefaultScopeLevel1": {
|
||||
"message": "Domeen",
|
||||
"description": "Scope will be base domain"
|
||||
},
|
||||
"settingsDefaultScopeLevel2": {
|
||||
"message": "Sait",
|
||||
"description": "Scope will be full hostname of site"
|
||||
},
|
||||
"settingsCollapseBlocked": {
|
||||
"message": "Hide placeholder of blocked elements",
|
||||
"description": "A setting in the dashboard's Settings pane"
|
||||
},
|
||||
"settingsCollapseBlacklisted": {
|
||||
"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": {
|
||||
"message": "Spoof <code><noscript></code> tags when 1st-party scripts are blocked",
|
||||
"description": "This appears in the Settings pane in the dashboard"
|
||||
},
|
||||
"settingsCloudStorageEnabled": {
|
||||
"message": "Luba pilve salvestamise tugi",
|
||||
"description": ""
|
||||
},
|
||||
"settingsMatrixNoTooltips": {
|
||||
"message": "Keela näpunäited",
|
||||
"description": ""
|
||||
},
|
||||
"privacyPageTitle": {
|
||||
"message": "nuTensor'i – privaatsus",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesPrompt": {
|
||||
"message": "Kustuta blokeeritud küpsised",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedCookiesHelp": {
|
||||
"message": "<p>Blacklisted cookies are not prevented by <i>nuTensor</i> from entering your browser. However they are prevented from leaving your browser, which is what really matters. Not blocking cookies before they enter your browser gives you the opportunity to be informed that a site tried to use cookies, and furthermore to inspect their contents if you wish.</p><p>Once these blacklisted cookies have been accounted for by <i>nuTensor</i>, they can be removed from your browser if you wish so.</p><p><b>Important note:</b> Extensions can make web requests during the course of their normal operation. These requests can result in cookies being created in the browser. If the hostname from where a cookie originate is not whitelisted, the cookie will be removed from the browser by <i>nuTensor</i> if this option is checked. So be sure that the hostname(s) with which an extension communicate is whitelisted.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt1": {
|
||||
"message": "Delete non-blocked session cookies ",
|
||||
"description": "First part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesPrompt2": {
|
||||
"message": " minutes after the last time they have been used",
|
||||
"description": "Second part of 'Delete non-blocked session cookies [n] minutes after the last time they have been used'"
|
||||
},
|
||||
"privacyDeleteNonBlockedSessionCookiesHelp": {
|
||||
"message": "<p><a href='http://www.w3.org/2001/tag/2010/09/ClientSideStorage.html'>W3C</a>: “A session cookie ... is erased when you end the browser session. The session cookie is stored in temporary memory and is not retained after the browser is closed.”</p><p>Except that this <a href='https://code.google.com/p/chromium/issues/detail?id=128513'>might not be happening</a> in some browsers. Also, to some, having to close the browser in order for the session cookies to clear might not be early enough.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStoragePrompt": {
|
||||
"message": "Delete <a href='https://en.wikipedia.org/wiki/Web_storage'>local storage</a> content set by blocked hostnames",
|
||||
"description": ""
|
||||
},
|
||||
"privacyDeleteBlockedLocalStorageHelp": {
|
||||
"message": "Vaja teha",
|
||||
"description": ""
|
||||
},
|
||||
"privacyClearCachePrompt1": {
|
||||
"message": "Clear browser cache every",
|
||||
"description": "First part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCachePrompt2": {
|
||||
"message": "minutit",
|
||||
"description": "Second part of 'Clear browser cache every [n] minutes'"
|
||||
},
|
||||
"privacyClearCacheHelp": {
|
||||
"message": "<p>Some web sites are really bent on tracking you, so much that they will use not-so-nice tricks to work around whatever measures you take in order to not be tracked.</p><p>A few of these tricks rely<sup>[1, 2]</sup> on the <a href='https://en.wikipedia.org/wiki/Web_cache'>browser cache</a>, which content is often long lasting since rarely will users take the time to regularly clear their browser cache.</p><p>There is little inconvenience to clear the browser cache regularly (likelihood is that you won't notice when it happens), and the benefit is to prevent these obnoxious trackers from invading your privacy.</p><p>Check this option to have <i>nuTensor</i> do it for you, at the interval you wish.</p><p>[1] <a href='https://grepular.com/Preventing_Web_Tracking_via_the_Browser_Cache'>“Preventing Web Tracking via the Browser Cache”</a>\n[2] <a href='http://lucb1e.com/rp/cookielesscookies/'>“Cookieless cookies”</a></p>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererPrompt": {
|
||||
"message": "Spoof <a href='https://en.wikipedia.org/wiki/HTTP_referer'>HTTP referrer</a> string of third-party requests",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessRefererHelp": {
|
||||
"message": "From Wikipedia:<blockquote>HTTP referer is an HTTP header field that identifies the address of the webpage that linked to the resource being requested. ... <b>Because referer information can violate privacy, some web browsers allow the user to disable the sending of referer information.</b></blockquote>If this setting is checked, <i>nuTensor</i> will spoof the HTTP referrer information if the domain name of the HTTP referrer is third-party to the domain name of net request.",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentPrompt": {
|
||||
"message": "Range HTTPS: keela segatud sisu",
|
||||
"description": ""
|
||||
},
|
||||
"privacyNoMixedContentHelp": {
|
||||
"message": "<p>From <a href='https://developer.mozilla.org/en-US/docs/Security/MixedContent'>Mozilla Developer Network</a>:</p><blockquote>If [a] HTTPS page includes content retrieved through regular, cleartext HTTP, then the connection is only partially encrypted: the unencrypted content is accessible to sniffers and can be modified by man-in-the-middle attackers, and therefore the connection is not safeguarded anymore. When a webpage exhibits this behavior, it is called a mixed content page.</blockquote>",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingPrompt": {
|
||||
"message": "Block all <a href='https://html.spec.whatwg.org/multipage/semantics.html#hyperlink-auditing'>hyperlink auditing</a> attempts",
|
||||
"description": ""
|
||||
},
|
||||
"privacyProcessHyperlinkAuditingHelp": {
|
||||
"message": "<p>Hyperlink auditing is a mechanism which allow a party, <b>any party</b>, to be informed about which link a user clicked on a particular web page. It is essentially a tracking feature: it allows a web site, or any third-party to that web site, to be informed about which link you clicked on which one of its web pages. The sole purpose is to track your browsing activity.</p>",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesPermanentHeader": {
|
||||
"message": "Püsivad reeglid",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesTemporaryHeader": {
|
||||
"message": "Ajutised reeglid",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesRevert": {
|
||||
"message": "Ennista",
|
||||
"description": "Will remove all temporary rules"
|
||||
},
|
||||
"userRulesCommit": {
|
||||
"message": "Sisesta",
|
||||
"description": "Will save all temporary rules"
|
||||
},
|
||||
"userRulesEdit": {
|
||||
"message": "Muuda",
|
||||
"description": "Will enable manual-edit mode (textarea)"
|
||||
},
|
||||
"userRulesEditSave": {
|
||||
"message": "Salvesta",
|
||||
"description": "Will save manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesEditDicard": {
|
||||
"message": "Loobu",
|
||||
"description": "Will discard manually-edited content and exit manual-edit mode"
|
||||
},
|
||||
"userRulesImport": {
|
||||
"message": "Impordi failist...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesExport": {
|
||||
"message": "Ekspordi faili...",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesFormatHint": {
|
||||
"message": "See this page for rule syntax.",
|
||||
"description": ""
|
||||
},
|
||||
"userRulesDefaultFileName": {
|
||||
"message": "minu-umatrix-reeglid.txt",
|
||||
"description": "default file name to use"
|
||||
},
|
||||
"assetsHostsSection": {
|
||||
"message": "Hostifailid",
|
||||
"description": "header to identify the hosts files section"
|
||||
},
|
||||
"hostsFilesPrompt": {
|
||||
"message": "All hostnames in a hosts file are loaded as blacklisted hostnames in the global scope.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesStats": {
|
||||
"message": "{{blockedHostnameCount}} distinct blocked hostnames from:",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPerFileStats": {
|
||||
"message": "{{used}} used out of {{total}}",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesLastUpdate": {
|
||||
"message": "Last update: {{ago}}",
|
||||
"description": "English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
|
||||
},
|
||||
"hostsFilesApplyChanges": {
|
||||
"message": "Rakenda muudatused",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesAutoUpdatePrompt": {
|
||||
"message": "Auto-update assets",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesUpdateNow": {
|
||||
"message": "Uuenda kohe",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesPurgeAll": {
|
||||
"message": "Tühjenda kõik vahemälud",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsHint": {
|
||||
"message": "Import external assets here: \nOne URL per line; invalid URLs will be silently ignored.",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListsParse": {
|
||||
"message": "Töötle",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListPurge": {
|
||||
"message": "tühjenda vahemälu",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListNew": {
|
||||
"message": "new version available",
|
||||
"description": ""
|
||||
},
|
||||
"hostsFilesExternalListObsolete": {
|
||||
"message": "outdated",
|
||||
"description": ""
|
||||
},
|
||||
"assetsRecipesSection": {
|
||||
"message": "Ruleset recipes",
|
||||
"description": "header to identify the ruleset files section"
|
||||
},
|
||||
"assetsRecipesSummary": {
|
||||
"message": "Ruleset recipes are imported from the popup panel <em>on demand</em>, i.e. <b>only</b> through user interaction.",
|
||||
"description": ""
|
||||
},
|
||||
"assetsImportLabel": {
|
||||
"message": "Impordi...",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineHostsLabel": {
|
||||
"message": "Minu hostid",
|
||||
"description": ""
|
||||
},
|
||||
"assetsInlineRecipesLabel": {
|
||||
"message": "Minu retseptid",
|
||||
"description": ""
|
||||
},
|
||||
"rawSettingsWarning": {
|
||||
"message": "Warning! Change these raw configuration settings at your own risk.",
|
||||
"description": ""
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/releases'>Muudatuste logi</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutStorageUsed": {
|
||||
"message": "Storage used: {{storageUsed}} bytes",
|
||||
"description": ""
|
||||
},
|
||||
"aboutDoc": {
|
||||
"message": "<a href='https://github.com/geekprojects/nuTensor/wiki'>Dokumentatsioon</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutPermissions": {
|
||||
"message": "<a href='https://github.com/gorhill/httpswitchboard/wiki/Permissions'>Õigused</a>",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode": {
|
||||
"message": "Lähtekood (GPLv3)",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssues": {
|
||||
"message": "Vead ja probleemid",
|
||||
"description": "Text for a link to official issue tracker"
|
||||
},
|
||||
"aboutContributors": {
|
||||
"message": "Toetajad",
|
||||
"description": "English: Contributors"
|
||||
},
|
||||
"aboutCodeContributors": {
|
||||
"message": "Kood:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutIssueContributors": {
|
||||
"message": "Probleemid:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutTranslationContributors": {
|
||||
"message": "Tõlked:",
|
||||
"description": ""
|
||||
},
|
||||
"aboutUserDataHeader": {
|
||||
"message": "Sinu andmed",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupButton": {
|
||||
"message": "Varunda faili...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutBackupFilename": {
|
||||
"message": "minu-umatrix-varundus.txt",
|
||||
"description": "default filename to use"
|
||||
},
|
||||
"aboutRestoreButton": {
|
||||
"message": "Taasta failist...",
|
||||
"description": ""
|
||||
},
|
||||
"aboutRestoreConfirm": {
|
||||
"message": "All your settings will be overwritten using data backed up on {{time}}, and nuTensor will restart.\n\nOverwrite all existing settings using backed up data?",
|
||||
"description": "Message asking user to confirm restore"
|
||||
},
|
||||
"aboutRestoreError": {
|
||||
"message": "The data could not be read or is invalid",
|
||||
"description": ""
|
||||
},
|
||||
"aboutOr": {
|
||||
"message": "... või ...",
|
||||
"description": "English: ... or ..."
|
||||
},
|
||||
"aboutResetButton": {
|
||||
"message": "Lähtesta vaikeseadetele",
|
||||
"description": "English: Reset to default settings"
|
||||
},
|
||||
"aboutResetConfirm": {
|
||||
"message": "Caution! this will remove all your custom settings. Are you sure you want to proceed?",
|
||||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"mainBlockedPrompt1": {
|
||||
"message": "nuTensor has prevented the following page from loading:",
|
||||
"description": "English: nuTensor has prevented the following page from loading:"
|
||||
},
|
||||
"mainBlockedPrompt2": {
|
||||
"message": "Because of the following rule",
|
||||
"description": "English: Because of the following rule"
|
||||
},
|
||||
"mainBlockedNoParamsPrompt": {
|
||||
"message": "without parameters",
|
||||
"description": "label to be used for the parameter-less URL: https://cloud.githubusercontent.com/assets/585534/9832014/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png"
|
||||
},
|
||||
"mainBlockedBack": {
|
||||
"message": "Mine tagasi",
|
||||
"description": "English: Go back"
|
||||
},
|
||||
"mainBlockedClose": {
|
||||
"message": "Sulge",
|
||||
"description": "English: Close"
|
||||
},
|
||||
"commandRevertAll": {
|
||||
"message": "Taasta kõik ajutised muudatused",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistPageDomain": {
|
||||
"message": "Temporarily whitelist page domain",
|
||||
"description": ""
|
||||
},
|
||||
"commandWhitelistAll": {
|
||||
"message": "Temporarily whitelist all",
|
||||
"description": ""
|
||||
},
|
||||
"commandOpenDashboard": {
|
||||
"message": "Open dashboard",
|
||||
"description": ""
|
||||
},
|
||||
"elapsedOneMinuteAgo": {
|
||||
"message": "minut tagasi",
|
||||
"description": "English: a minute ago"
|
||||
},
|
||||
"elapsedManyMinutesAgo": {
|
||||
"message": "{{value}} minutit tagasi",
|
||||
"description": "English: {{value}} minutes ago"
|
||||
},
|
||||
"elapsedOneHourAgo": {
|
||||
"message": "tund tagasi",
|
||||
"description": "English: an hour ago"
|
||||
},
|
||||
"elapsedManyHoursAgo": {
|
||||
"message": "{{value}} tundi tagasi",
|
||||
"description": "English: {{value}} hours ago"
|
||||
},
|
||||
"elapsedOneDayAgo": {
|
||||
"message": "päev tagasi",
|
||||
"description": "English: a day ago"
|
||||
},
|
||||
"elapsedManyDaysAgo": {
|
||||
"message": "{{value}} päeva tagasi",
|
||||
"description": "English: {{value}} days ago"
|
||||
},
|
||||
"showDashboardButton": {
|
||||
"message": "Töölaud",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"showLoggerButton": {
|
||||
"message": "Logija",
|
||||
"description": "Appears in Firefox's add-on preferences"
|
||||
},
|
||||
"cloudPush": {
|
||||
"message": "Export to cloud storage",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudPull": {
|
||||
"message": "Import from cloud storage",
|
||||
"description": "tooltip"
|
||||
},
|
||||
"cloudNoData": {
|
||||
"message": "...\n...",
|
||||
"description": ""
|
||||
},
|
||||
"cloudDeviceNamePrompt": {
|
||||
"message": "This device name:",
|
||||
"description": "used as a prompt for the user to provide a custom device name"
|
||||
},
|
||||
"genericSubmit": {
|
||||
"message": "Sisesta",
|
||||
"description": "for generic 'submit' buttons"
|
||||
},
|
||||
"genericRevert": {
|
||||
"message": "Ennista",
|
||||
"description": "for generic 'revert' buttons"
|
||||
},
|
||||
"errorCantConnectTo": {
|
||||
"message": "Network error: Unable to connect to {{url}}",
|
||||
"description": ""
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||