diff --git a/.jshintrc b/.jshintrc index de72266b3f30a..748a6206b05a8 100644 --- a/.jshintrc +++ b/.jshintrc @@ -4,7 +4,8 @@ "eqeqeq": true, "esnext": true, "globals": { - "chrome": false, + "browser": false, // global variable in Firefox, Edge + "chrome": false, // global variable in Chromium, Chrome, Opera "Components": false, // global variable in Firefox "safari": false, "self": false, @@ -18,6 +19,5 @@ "sub": true, "undef": true, "unused": true, - "validthis": true, - "-W058": true // suppress "Missing '()' invoking a constructor" message + "validthis": true } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ad12233853dd5..8368c14da98df 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,12 +1,14 @@ # Submitting issues +From now on, I will be quite less inclined to deal with issues for which little to no investigation to find the **actual cause** of a purported issue was made by the reporter. Positive contributions are those which are reported with efforts to find the actual cause of an issue, or at the very least efforts were made to narrow it as much as possible. This project is a hobby, do not expect "customer support"-style interaction. Requiring people to investigate as much as possible before opening an issue will more than likely avoid burdening the project with [invalid issues](https://github.com/gorhill/uBlock/issues?q=is%3Aissue+is%3Aclosed+label%3Ainvalid) or [issues unrelated](https://github.com/gorhill/uBlock/issues?q=is%3Aissue+is%3Aclosed+label%3Aexternal) to uBO. + For **support/discussions/help**, there is [/r/uBlockOrigin](https://www.reddit.com/r/uBlockOrigin/) on Reddit -- this is where I see the most activity for people helping each other regarding uBlock Origin. For **filter-related issues**, report on the respective filter list support site, or at [uBlockOrigin/uAssets](https://github.com/uBlockOrigin/uAssets/issues). Use [the logger](https://github.com/gorhill/uBlock/wiki/The-logger) to diagnose/confirm filter-related issues. If something does not work properly with uBO enabled, the **first step** is to rule out filter-related issues. Ignorance of the above rules is no excuse: **Opening an issue for purpose of support or discussion, or opening a filter-related issue will result in the user being immediately blocked.** Given the [amount of invalid issues being opened](https://github.com/gorhill/uBlock/issues?q=is%3Aissue+label%3Ainvalid+is%3Aclosed), I have no choice but to resort to such a drastic measure. You will still be able to open filter list issues at [uBlockOrigin/uAssets](https://github.com/uBlockOrigin/uAssets/issues). -**The issue tracker is for provable issues only:** You will have to make the case that the issue is really with uBlock Origin and not something else on your side. To make a case means to provide detailed steps so that anybody can reproduce the issue. Be sure to rule out that the issue is not caused by something specific on your side. +**The issue tracker is for provable issues only:** You will have to make the case that the issue is really with uBlock Origin and not something else on your side. To make a case means to provide detailed steps so that anybody can reproduce the issue. Be sure to rule out that the issue is not caused by something specific on your side. Specifically, _speculated_ performance issues will be marked as invalid and closed if they do not come with **actual profiling data + analysis** supporting the claim. **Any issue opened without effort to provide the required details for me (or anybody else) to reproduce the problem will be closed as _invalid_.** If you provide more details thereafter for me to reproduce the issue, I will reopen it if I can confirm there is indeed an issue with uBlock Origin. Example of detailed steps: diff --git a/README.md b/README.md index b750119d5f8e8..38e4ce22a6d35 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Edge disables side-loaded extensions whenever you restart the browser. However a #### Note -To benefit from uBlock Origin's higher efficiency, it's advised that you don't use other inefficient blockers at the same time (such as AdBlock or Adblock Plus). uBlock₀ will do [as well or better](#blocking) than most popular ad blockers. +To benefit from uBlock Origin's higher efficiency, it's advised that you don't use other inefficient blockers at the same time (such as AdBlock or Adblock Plus). uBlock₀ will do as well or better than most popular ad blockers. Other blockers can also prevent uBlock₀'s privacy or anti-blocker features from working properly. ## Release History diff --git a/assets/assets.json b/assets/assets.json index 9d2140b5a66fc..ede40f04c5a1d 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -65,6 +65,15 @@ "assets/ublock/privacy.txt" ] }, + "ublock-abuse": { + "content": "filters", + "group": "default", + "title": "uBlock filters – Resource abuse", + "contentURL": [ + "https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/resource-abuse.txt", + "assets/ublock/resource-abuse.txt" + ] + }, "ublock-unbreak": { "content": "filters", "group": "default", @@ -74,15 +83,6 @@ "assets/ublock/unbreak.txt" ] }, - "abprotector-0": { - "content": "filters", - "group": "ads", - "off": true, - "title": "uBlock Protector List", - "contentURL": "https://raw.githubusercontent.com/jspenguin2017/uBlockProtector/master/uBlockProtectorList.txt", - "supportURL": "https://github.com/jspenguin2017/uBlockProtector/blob/master/CONTRIBUTING.MD", - "instructionURL": "https://jspenguin2017.github.io/uBlockProtector/" - }, "awrl-0": { "content": "filters", "group": "ads", @@ -91,14 +91,24 @@ "contentURL": "https://easylist-downloads.adblockplus.org/antiadblockfilters.txt", "supportURL": "https://forums.lanik.us/" }, - "reek-0": { + "adguard-generic": { "content": "filters", "group": "ads", "off": true, - "title": "Anti-Adblock Killer | Reek", - "contentURL": "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", - "supportURL": "https://github.com/reek/anti-adblock-killer", - "instructionURL": "https://github.com/reek/anti-adblock-killer#instruction" + "title": "Adguard Base Filters", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/2_without_easylist.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", + "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + }, + "adguard-mobile": { + "content": "filters", + "group": "ads", + "off": true, + "title": "Adguard Mobile Filters", + "ua": "mobile", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/11.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", + "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" }, "easylist": { "content": "filters", @@ -113,20 +123,14 @@ ], "supportURL": "https://forums.lanik.us/" }, - "easylist-nocosmetic": { - "content": "filters", - "group": "ads", - "off": true, - "title": "EasyList without element hiding rules", - "contentURL": "https://easylist-downloads.adblockplus.org/easylist_noelemhide.txt", - "supportURL": "https://forums.lanik.us/" - }, - "disconnect-tracking": { + "adguard-spyware": { "content": "filters", "group": "privacy", "off": true, - "title": "Basic tracking list by Disconnect", - "contentURL": "https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt" + "title": "Adguard Spyware Filters", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/3.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", + "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" }, "easyprivacy": { "content": "filters", @@ -147,7 +151,7 @@ "off": true, "title": "Fanboy’s Enhanced Tracking List", "contentURL": "https://www.fanboy.co.nz/enhancedstats.txt", - "supportURL": "https://forums.lanik.us/" + "supportURL": "https://github.com/ryanbr/fanboy-adblock/issues" }, "disconnect-malvertising": { "content": "filters", @@ -177,17 +181,6 @@ ], "supportURL": "https://www.malwaredomains.com/" }, - "malware-2": { - "content": "filters", - "group": "malware", - "off": true, - "title": "Malware domains (long-lived)", - "contentURL": [ - "https://mirror1.malwaredomains.com/files/immortal_domains.txt", - "https://mirror.cedia.org.ec/malwaredomains/immortal_domains.txt" - ], - "supportURL": "https://www.malwaredomains.com/" - }, "disconnect-malware": { "content": "filters", "group": "malware", @@ -203,13 +196,22 @@ "contentURL": "https://raw.githubusercontent.com/Dawsey21/Lists/master/adblock-list.txt", "supportURL": "http://www.spam404.com/" }, + "adguard-annoyance": { + "content": "filters", + "group": "social", + "off": true, + "title": "Adguard’s Annoyance List", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/14.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", + "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + }, "fanboy-thirdparty_social": { "content": "filters", "group": "social", "off": true, - "title": "Anti-ThirdpartySocial (see warning inside list)", + "title": "Fanboy’s Anti-Thirdparty Social (see warning inside list)", "contentURL": "https://fanboy.co.nz/fanboy-antifacebook.txt", - "supportURL": "https://forums.lanik.us/" + "supportURL": "https://github.com/ryanbr/fanboy-adblock/issues" }, "fanboy-annoyance": { "content": "filters", @@ -223,6 +225,14 @@ ], "supportURL": "https://forums.lanik.us/" }, + "fanboy-cookiemonster": { + "content": "filters", + "group": "social", + "off": true, + "title": "Fanboy’s Cookiemonster List", + "contentURL": "https://secure.fanboy.co.nz/fanboy-cookiemonster.txt", + "supportURL": "https://github.com/ryanbr/fanboy-adblock/issues" + }, "fanboy-social": { "content": "filters", "group": "social", @@ -244,14 +254,6 @@ "contentURL": "http://someonewhocares.org/hosts/hosts", "supportURL": "http://someonewhocares.org/hosts/" }, - "fanboy-ultimate": { - "content": "filters", - "group": "multipurpose", - "off": true, - "title": "Fanboy+Easylist-Merged Ultimate List", - "contentURL": "https://www.fanboy.co.nz/r/fanboy-ultimate.txt", - "supportURL": "https://forums.lanik.us/" - }, "hphosts": { "content": "filters", "group": "multipurpose", @@ -316,25 +318,19 @@ "content": "filters", "group": "regions", "off": true, - "title": "CHN: CJX's EasyList Lite (main focus on Chinese sites)", + "title": "CHN: CJX's EasyList Lite", + "lang": "zh", "contentURL": "https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjxlist.txt", - "supportURL": "https://github.com/cjx82630/cjxlist" - }, - "CHN-2": { - "content": "filters", - "group": "regions", - "off": true, - "title": "CHN: CJX's Annoyance List", - "contentURL": "https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjx-annoyance.txt", - "supportURL": "https://github.com/cjx82630/cjxlist" + "supportURL": "https://github.com/cjx82630/cjxlist", + "instructionURL": "http://abpchina.org/forum/forum.php?mod=viewthread&tid=29667" }, "CZE-0": { "content": "filters", "group": "regions", "off": true, "title": "CZE, SVK: EasyList Czech and Slovak", - "lang": "cs", - "contentURL": "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt", + "lang": "cs sk", + "contentURL": "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters_ublock.txt", "supportURL": "https://github.com/tomasko126/easylistczechandslovak" }, "DEU-0": { @@ -364,16 +360,8 @@ "off": true, "title": "EST: Eesti saitidele kohandatud filter", "lang": "et", - "contentURL": "http://adblock.ee/list.php", - "supportURL": "http://adblock.ee/" - }, - "EU-prebake": { - "content": "filters", - "group": "regions", - "off": true, - "title": "EU: Prebake - Filter Obtrusive Cookie Notices", - "contentURL": "https://raw.githubusercontent.com/liamja/Prebake/master/obtrusive.txt", - "supportURL": "https://github.com/liamja/Prebake" + "contentURL": "https://adblock.ee/list.php", + "supportURL": "https://adblock.ee/" }, "FIN-0": { "content": "filters", @@ -465,7 +453,7 @@ "off": true, "title": "ITA: ABP X Files", "contentURL": "https://raw.githubusercontent.com/gioxx/xfiles/master/filtri.txt", - "supportURL": "http://noads.it/" + "supportURL": "https://xfiles.noads.it/" }, "JPN-0": { "content": "filters", @@ -476,6 +464,16 @@ "contentURL": "https://raw.githubusercontent.com/k2jp/abp-japanese-filters/master/abpjf.txt", "supportURL": "https://github.com/k2jp/abp-japanese-filters/wiki/Support_Policy" }, + "JPN-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "JPN: Adguard Japan Filter", + "lang": "ja", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/7.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", + "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + }, "KOR-0": { "content": "filters", "group": "regions", @@ -494,14 +492,6 @@ "contentURL": "https://raw.githubusercontent.com/yous/YousList/master/youslist.txt", "supportURL": "https://github.com/yous/YousList" }, - "KOR-2": { - "content": "filters", - "group": "regions", - "off": true, - "title": "KOR: Fanboy's Korean", - "contentURL": "https://www.fanboy.co.nz/fanboy-korean.txt", - "supportURL": "https://forums.lanik.us/" - }, "LTU-0": { "content": "filters", "group": "regions", @@ -536,7 +526,7 @@ "title": "POL: polskie filtry do Adblocka i uBlocka", "lang": "pl", "contentURL": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt", - "supportURL": "https://www.certyficate.it/adblock-ublock-polish-filters/" + "supportURL": "https://github.com/MajkiIT/polish-ads-filter/issues" }, "POL-1": { "content": "filters", @@ -545,32 +535,27 @@ "title": "POL: polskie filtry do uBlocka uzupelnienie", "lang": "pl", "contentURL": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock_ublock.txt", - "supportURL": "https://www.certyficate.it/adblock-ublock-polish-filters/" + "supportURL": "https://github.com/MajkiIT/polish-ads-filter/issues" }, "RUS-0": { "content": "filters", "group": "regions", "off": true, - "title": "RUS: RU AdList (Дополнительная региональная подписка)", + "title": "RUS: RU AdList", "lang": "be ru uk", - "contentURL": "https://easylist-downloads.adblockplus.org/advblock.txt", - "supportURL": "https://forums.lanik.us/viewforum.php?f=102" - }, - "RUS-1": { - "content": "filters", - "group": "regions", - "off": true, - "title": "RUS: BitBlock List (Дополнительная подписка фильтров)", - "contentURL": "https://easylist-downloads.adblockplus.org/bitblock.txt", - "supportURL": "https://forums.lanik.us/viewforum.php?f=102" + "contentURL": "https://easylist-downloads.adblockplus.org/advblock+cssfixes.txt", + "supportURL": "https://forums.lanik.us/viewforum.php?f=102", + "instructionURL": "https://forums.lanik.us/viewtopic.php?f=102&t=22512" }, "RUS-2": { "content": "filters", "group": "regions", "off": true, "title": "RUS: Adguard Russian Filter", + "lang": "be ru uk", "contentURL": "https://filters.adtidy.org/extension/ublock/filters/1.txt", - "supportURL": "https://forum.adguard.com/forumdisplay.php?69-%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D1%8B-Adguard" + "supportURL": "https://forum.adguard.com/forumdisplay.php?69-%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D1%8B-Adguard", + "instructionURL": "https://kb.adguard.com/ru/general/adguard-ad-filters#russian" }, "spa-0": { "content": "filters", @@ -581,6 +566,16 @@ "contentURL": "https://easylist-downloads.adblockplus.org/easylistspanish.txt", "supportURL": "https://forums.lanik.us/viewforum.php?f=103" }, + "spa-1": { + "content": "filters", + "group": "regions", + "off": true, + "title": "spa, por: Adguard Spanish/Portuguese", + "lang": "es pt", + "contentURL": "https://filters.adtidy.org/extension/ublock/filters/9.txt", + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", + "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" + }, "SVN-0": { "content": "filters", "group": "regions", @@ -597,7 +592,7 @@ "title": "SWE: Fanboy's Swedish", "lang": "sv", "contentURL": "https://www.fanboy.co.nz/fanboy-swedish.txt", - "supportURL": "https://forums.lanik.us/" + "supportURL": "https://github.com/ryanbr/fanboy-adblock/issues" }, "TUR-0": { "content": "filters", @@ -606,15 +601,16 @@ "title": "TUR: Adguard Turkish Filter", "lang": "tr", "contentURL": "https://filters.adtidy.org/extension/ublock/filters/13.txt", - "supportURL": "https://forum.adguard.com/forumdisplay.php?51-Filter-Rules" + "supportURL": "https://github.com/AdguardTeam/AdguardFilters#adguard-filters", + "instructionURL": "https://kb.adguard.com/en/general/adguard-ad-filters" }, - "VIE-0": { + "VIE-1": { "content": "filters", "group": "regions", "off": true, - "title": "VIE: Fanboy's Vietnamese", + "title": "VIE: ABPVN List", "lang": "vi", - "contentURL": "https://www.fanboy.co.nz/fanboy-vietnam.txt", - "supportURL": "https://forums.lanik.us/" + "contentURL": "https://raw.githubusercontent.com/abpvn/abpvn/master/filter/abpvn.txt", + "supportURL": "http://abpvn.com/" } } diff --git a/dist/README.md b/dist/README.md index 94cd0f8d26ebd..6932c8e95f96c 100644 --- a/dist/README.md +++ b/dist/README.md @@ -1,6 +1,6 @@ ## INSTALL -#### Chromium +### Chromium - Download and unzip `ublock0.chromium.zip` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). - Rename the unzipped directory to `ublock` @@ -20,26 +20,43 @@ Remember that you have to update manually also. For some users, updating manuall - You can update when **you** want - If ever a new version sucks, you can easily just re-install the previous one -#### Firefox +### Firefox webext + +Compatible with Firefox 52 and beyond. This works only if you set `xpinstall.signatures.required` to `false` in `about:config`. + +- Download `ublock0.webext.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). + - Right-click and choose _"Save As..."_. +- Drag and drop the previously downloaded `ublock0.webext.xpi` into Firefox + +On Linux, the settings are saved in a JSON file located at `~/.mozilla/firefox/[profile name]/browser-extension-data/uBlock0@raymondhill.net/storage.js`. + +When you uninstall the extension, Firefox deletes that file, so all your settings are lost when you uninstall. + +### Firefox legacy + +Compatible with Firefox 24 to Firefox 56. - Download `ublock0.firefox.xpi` ([latest release desirable](https://github.com/gorhill/uBlock/releases)). - Drag and drop the previously downloaded `ublock0.firefox.xpi` into Firefox +With Firefox 43 and beyond, you may need to toggle the setting `xpinstall.signatures.required` to `false` in `about:config`. + Your uBlock Origin 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/ublock0.sqlite`. On Windows, the settings are saved in a SQlite file located at `%APPDATA%\Mozilla\Firefox\Profiles\[profile name]\extension-data\ublock0.sqlite`. -#### Build instructions (for developers) +### Build instructions (for developers) - Clone [uBlock](https://github.com/gorhill/uBlock) and [uAssets](https://github.com/uBlockOrigin/uAssets) repositories in the same parent directory - Set path to uBlock: `cd uBlock` - Optional: Select the version to build: `git checkout ` - Build the plugin: - Chromium: `./tools/make-chromium.sh` - - Firefox: `./tools/make-firefox.sh all` + - Firefox webext: `./tools/make-webext.sh all` + - Firefox legacy: `./tools/make-firefox.sh all` - Load the result of the build into your browser: - Chromium: load the unpacked extension folder `/uBlock/dist/build/uBlock0.chromium/` in Chromium to use the extension. - - Firefox: drag-and-drop `/uBlock/dist/build/uBlock0.firefox.xpi` into Firefox. + - Firefox: drag-and-drop `/uBlock/dist/build/uBlock0.firefox.xpi` or `/uBlock/dist/build/uBlock0.webext.xpi` into Firefox. diff --git a/dist/description/description-bn.txt b/dist/description/description-bn.txt index 0de4337ab57cc..baeee2bb01c1e 100644 --- a/dist/description/description-bn.txt +++ b/dist/description/description-bn.txt @@ -1,42 +1,42 @@ একটি কার্যকর বিজ্ঞাপন প্রতিরোধক: মেমরি ও প্রসেসর সহায়ক, এবং অন্যান্য জনপ্রিয় বিজ্ঞাপন প্রতিরোধক বা অবরোধকারী থেকে হাজার অধিক ফিল্টারকে লোড এবং বাস্তবায়ন করতে পারে। -এটির কার্যকারিতার সচিত্র বিবরণ: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared +এটির কার্যকারিতার সচিত্র সংক্ষিপ্ত বিবরণ: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared ব্যবহারের ধরন: পপআপে বড় পাওয়ার বোতাম স্থায়ীভাবে বর্তমান ওয়েব সাইটের জন্য uBlock সক্রিয়/নিষ্ক্রিয় করবে। এটা শুধুমাত্র বর্তমান ওয়েব সাইটে প্রযোজ্য, এটি একটি সার্বজনীন পাওয়ার বোতাম নয়। *** -নমনীয়, এটি একটি "বিজ্ঞাপন প্রতিরোধক"-এর চেয়েও বেশি: এছাড়াও এটি হোস্ট ফাইলস থেকে ফিল্টার পড়তে ও তৈরি করতে পারে। +নমনীয়, এটি একটি "বিজ্ঞাপন প্রতিরোধক"-এর চেয়েও বেশি: এছাড়াও এটি হোস্ট ফাইল থেকে ফিল্টার পড়তে ও তৈরি করতে পারে। -বাক্সের বাইরের, এই তালিকার ফিল্টারগুলি লোড করে এবং তা সক্রিয় করে: +বাক্সের বাইরের, এই তালিকার ফিল্টারগুলি লোড করে এবং তা প্রয়োগ করে: - সহজ তালিকা - পিটার লো'য়ের বিজ্ঞাপন সার্ভারের তালিকা - সহজ গোপনীয়তা -- ম্যালওয়্যার ডোমেইনস +- ম্যালওয়্যার ডোমেইন আপনি যদি চান আপনি নির্বাচন করার জন্য আরো তালিকা পাবেন: - ফ্যানবয়ের বর্ধিত অনুসরণকরণ তালিকা - ডেন পোলোকস-এর হোস্ট ফাইল -- এইচপিহোস্টস এর বিজ্ঞাপন এবং অনুসরণকরণ সার্ভারস -- এমভিপিএস হোস্টসমূহ +- এইচপিহোস্টসের বিজ্ঞাপন এবং অনুসরণকরণ সার্ভার +- MVPS হোস্টসমূহ - স্প্যাম৪০৪ -- এবং আরও কিছু +- এবং আরও অনেক কিছু -অবশ্যই, যতবেশি ফিল্টার সক্রিয় করবেন, মেমরি ব্যবহার ততবেশি হবে। এমনকি ফ্যানবয়ের -এর দুটি অতিরিক্ত তালিকা, এইচপিহোস্টস -এর বিজ্ঞাপন এবং ট্র্যাকিং সার্ভার যোগ করার পরেও uBlock অন্যান্য জনপ্রিয় ব্লকারের থেকে কম মেমরি ব্যবহার করে। +অবশ্যই, যতবেশি ফিল্টার সক্রিয় করবেন, মেমরি ব্যবহার ততবেশি হবে। এমনকি Fanboy-এর দুটি অতিরিক্ত তালিকা, hpHosts-এর বিজ্ঞাপন এবং ট্র্যাকিং সার্ভার যোগ করার পরেও uব্লক অন্যান্য খুব জনপ্রিয় ব্লকারের থেকে কম মেমরি পদচিহ্ন ব্যবহার করে। এছাড়াও, এই অতিরিক্ত তালিকা নির্বাচন কিছু ওয়েব সাইট বিগড়ে দেওয়ার সম্ভাবনা বাড়িয়ে দিতে পারে তাই সাবধান --- বিশেষ করে এই তালিকাগুলি যা সাধারণত হোস্ট ফাইল হিসেবে ব্যবহার করা হয়। *** -ফিল্টারের পূর্বনির্ধারিত তালিকা ছাড়া, এই এক্সটেনশনটি কিছুই না। তাই যদি কখনও আপনি সত্যিই কোনো অবদান রাখতে চান, আপনার ব্যবহার করা ফিল্টার তালিকা রক্ষণাবেক্ষণের জন্য কঠোর পরিশ্রম করা সেই সব মানুষের কথা চিন্তা করুন যারা এইগুলো বিনামূল্যে ব্যবহারের জন্য সহজলভ্য করেছে। +ফিল্টারের পূর্বনির্ধারিত তালিকা ছাড়া, এই এক্সটেনশনটি কিছুই না। তাই কখনও যদি আপনি সত্যিই কিছু অবদান রাখতে চান, আপনার ব্যবহার করা ফিল্টার তালিকা রক্ষণাবেক্ষণের জন্য কঠোর পরিশ্রম করা সেই সব মানুষের করা কথা চিন্তা করুন যারা এই সব বিনামূল্যে ব্যবহারের জন্য উপলব্ধ করেছেন। *** বিনামূল্যে। -ওপেন সোর্স এবং পাবলিক লাইসেন্স (GPLv3) -ব্যবহারকারীদের দ্বারা এবং ব্যবহারকারীদের জন্য। +পাবলিক লাইসেন্সসহ মুক্ত উৎসের (GPLv3) +ব্যবহারকারীদের দ্বারা ব্যবহারকারীদের জন্য। অবদানকারীগণ @ Github: https://github.com/gorhill/uBlock/graphs/contributors অবদানকারীগণ @ Crowdin: https://crowdin.net/project/ublock diff --git a/dist/description/description-ca.txt b/dist/description/description-ca.txt index 5966fd2b4bdad..6f18706c7a24d 100644 --- a/dist/description/description-ca.txt +++ b/dist/description/description-ca.txt @@ -1,8 +1,8 @@ -Un blocador eficient: Amb un consum discret de memòria i de processador, pot carregar i aplicar milers de filtres més que altres aplicacions semblants. +Un bloquejador eficient: amb un consum discret de memòria i de processador, pot carregar i aplicar milers de filtres més que altres aplicacions semblants. Gràfic de l'eficiència: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Ús: El gran botó d'engegada de la finestra emergent serveix per a desactivar/activar permanentment el uBlock per al lloc web actual. No és un botó d'engegada general de l'extensió. +Ús: el botó gran d'engegada de la finestra emergent serveix per a desactivar/activar permanentment l'uBlock per al lloc web actual. Només s'aplica al lloc web actual, no és un botó d'engegada global. *** @@ -22,11 +22,11 @@ Si voleu, podeu seleccionar altres llistes disponibles: - hpHosts’s Ad and tracking servers - MVPS HOSTS - Spam404 -- I altres +- I moltes més -Òbviament, com més filtres activeu, més gran serà el consum de memòria. Però fins i tot després d'afegir dues llistes extra de Fanboy, hpHosts’s Ad and tracking servers, el uBlock₀ encara té un consum de memòria inferior al d'altres bloquejadors coneguts. +Per descomptat, com més filtres activeu, més gran serà el consum de memòria. Però fins i tot després d'afegir les dues llistes extra de Fanboy, els servidors d'anuncis i rastreig d'hpHosts, l'uBlock encara té un consum de memòria inferior al d'altres bloquejadors coneguts. -També heu de ser conscient que seleccionant algunes d'aquestes llistes extra és més probable trobar-se amb llocs webs inservibles -- especialment aquelles llistes que s'utilitzen normalment com a fitxer de hosts. +Tingueu en compte també que és més probable trobar-se amb llocs web inservibles en seleccionar algunes d'aquestes llistes extra, especialment aquelles llistes que s'utilitzen normalment com a fitxer de hosts. *** diff --git a/dist/description/description-fr.txt b/dist/description/description-fr.txt index dc8a54cc7d44e..7467ce09f1be1 100644 --- a/dist/description/description-fr.txt +++ b/dist/description/description-fr.txt @@ -1,14 +1,14 @@ -uBlock₀ est une extension qui bloque les publicités et les pisteurs, légère en empreinte mémoire & en utilisation du processeur, capable pourtant d'utiliser & de traiter des milliers de filtres de plus que la plupart des autres bloqueurs disponibles. +uBlock₀ est un bloqueur efficace de publicités et de pisteurs; utilisant peu de mémoire vive & de ressources du processeur, il est pourtant capable de charger & d'appliquer des milliers de filtres de plus que d'autres bloqueurs populaires. Consultez cette page en Anglais pour avoir une vue d'ensemble illustrée de son efficacité : https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -Utilisation : Le gros bouton "Power" dans la fenêtre pop-up permet de désactiver/activer en permanence uBlock₀ pour le site Web en cours de consultation. Cela s'applique uniquement au site Web actuel, ce n'est pas un bouton "Power" qui affecte entièrement le fonctionnement de l'extension. +Utilisation : Le gros bouton "Power" dans la fenêtre pop-up permet de désactiver/activer en permanence uBlock₀ pour le site Web en cours de consultation. Cela s'applique uniquement au site Web actuel, ce n'est pas un bouton "Power" global. *** -Flexible, uBlock₀ ne prend pas en charge que les filtres de type Adblock, elle peut également lire et créer des filtres depuis des fichiers hosts. +Flexible, uBlock₀ n'est pas qu'un simple bloqueur de publicités, il peut également lire et créer des filtres depuis des fichiers hosts. -Par défaut, ces listes de filtrage sont chargées et traitées : +Par défaut, ces listes de filtrage sont chargées et appliquées : - EasyList (Liste anti-publicités maintenue fréquemment à jour par la communauté) - Peter Lowe’s Ad server list (Liste de serveurs publicitaires maintenue à jour par Peter Lowe) @@ -18,15 +18,15 @@ Par défaut, ces listes de filtrage sont chargées et traitées : Davantage de listes sont disponibles si vous souhaitez renforcer le blocage : - Fanboy’s Enhanced Tracking List (Liste de protection avancée contre le pistage maintenue à jour par Fanboy) -- Dan Pollock’s hosts file (Fichier Hosts bloquant publicités, domaines malveillants et autres pisteurs, maintenue fréquemment à jour par Dan Pollock) -- hpHosts’s Ad and tracking servers (Fichier Hosts bloquant des serveurs publicitaires & des serveurs de pistage, maintenue à jour par hpHosts) +- Dan Pollock’s hosts file (Fichier hosts bloquant publicités, domaines malveillants et autres pisteurs, maintenue fréquemment à jour par Dan Pollock) +- hpHosts’s Ad and tracking servers (Fichier hosts bloquant des serveurs publicitaires & des serveurs de pistage, maintenue à jour par hpHosts) - MVPS HOSTS (Fichier Hosts bloquant publicités, domaines malveillants et autres pisteurs, maintenue à jour par MVPS) - Spam404 (Liste de protection contre les spams, maintenue fréquemment à jour par la communauté) - Et de nombreuses autres -Bien évidemment, plus vous activez de filtres, plus l'empreinte mémoire augmentera. Pourtant, même après avoir ajouté deux listes supplémentaires crées par Fanboy et le fichier Hosts d'hpHosts, uBlock₀ utilise moins de mémoire vive que tous les autres bloqueurs populaires. +Bien évidemment, plus vous activez de filtres, plus l'empreinte mémoire augmentera. Pourtant, même après avoir ajouté deux listes supplémentaires crées par Fanboy et le fichier hosts d'hpHosts, uBlock₀ utilise moins de mémoire vive que tous les autres bloqueurs populaires. -Veuillez tout de même prendre en compte que le fait de choisir parmi ces listes supplémentaires peut conduire à quelques incompatibilités sur les sites Web que vous visitez, bien que ces listes soient maintenues à jour par leurs auteurs. +Veuillez tout de même prendre en compte qu'utiliser certaines listes supplémentaires peut conduire à quelques incompatibilités sur les sites Web que vous visitez - en particulier les fichiers hosts. *** @@ -35,8 +35,8 @@ Sans les listes prédéfinies de filtres, cette extension (comme d'autres) ne se *** Gratuit. -Source libre avec une licence publique GPLv3 -Fait par des utilisateurs pour des utilisateurs. +Source libre sous licence publique GPLv3 +Conçu par des utilisateurs pour des utilisateurs. Contributeurs sur Github: https://github.com/gorhill/uBlock/graphs/contributors Contributeurs sur Crowdin: https://crowdin.net/project/ublock diff --git a/dist/description/description-pl.txt b/dist/description/description-pl.txt index b4d97d43fed98..dff33db9bf74e 100644 --- a/dist/description/description-pl.txt +++ b/dist/description/description-pl.txt @@ -1,6 +1,6 @@ -Skutecznie blokuje reklamy, używa mało pamięci RAM i zasobów procesora, a przy tym może wczytywać i stosować o wiele więcej filtrów niż inne popularne rozszerzenia do blokowania reklam. +Skuteczny bloker, który używa mało pamięci RAM i zasobów procesora, a przy tym może wczytywać i stosować o wiele więcej filtrów niż inne popularne rozszerzenia do blokowania. -Ilustrowane porównanie z dodatkiem Adblock Plus: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared +Ilustrowany przegląd jego skuteczności: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-Efficiency-Compared Sposób użycia: Wyświetlany w panelu duży przycisk oznaczony symbolem zasilania służy do trwałego włączenia/wyłączenia uBlocka na bieżącej stronie internetowej. Działanie przycisku ma zastosowanie tylko na bieżącej witrynie – nie działa globalnie. @@ -10,27 +10,27 @@ Elastyczny. Jest czymś więcej niż „blokerem reklam”. Może czytać i twor Po zainstalowaniu są wczytywane i stosowane następujące listy filtrów: -- EasyList -- Lista serwerów reklam Petera Lowe'a -- EasyPrivacy -- Domeny malware +– EasyList +– Peter Lowe’s Ad server list +– EasyPrivacy +– Malware domains. Można wybrać więcej list filtrów: -- Rozszerzona lista śledzenia dla fanboyów -- Plik hosts Dana Pollocka -- Lista serwerów śledzących i reklamowych hpHosts -- MVPS HOSTS -- Spam404 -- I wiele innych +– Fanboy's Enhanced Tracking List +– Dan Pollock’s hosts file +– hpHosts’s Ad and tracking servers +– MVPS HOSTS +– Spam404 +– i wiele innych. -Im więcej filtrów jest włączonych, tym większe jest użycie pamięci RAM. Nawet po dodaniu dwóch dodatkowych list filtrów dla fanboyów – listy serwerów reklamowych i śledzących hpHosts – µBlock₀ używa mniej pamięci RAM niż inne popularne dodatki do blokowania reklam. +Oczywiście, im więcej filtrów jest włączonych, tym wyższe jest zużycie pamięci. Jednak nawet po dodaniu dwóch dodatkowych list filtrów Fanboya, oraz listy hpHosts’ Ad and tracking servers, uBlock ma nadal niższe zużycie pamięci niż inne bardzo popularne blokery. Należy pamiętać, że wybranie niektórych dodatkowych list może prowadzić do wzrostu prawdopodobieństwa uszkodzenia witryny internetowej – zwłaszcza tych list, które są zwykle używane jako plik hostów. *** -Bez ustawionej listy filtrów, to rozszerzenie jest bezużyteczne. Pomyśl zatem o osobach, które ciężko pracują, tworząc i utrzymując udostępniane za darmo używane przez ciebie listy filtrów. +Bez ustawionej listy filtrów, to rozszerzenie jest bezużyteczne. Więc jeśli rzeczywiście chciałbyś przekazać jakieś wsparcie, pomyśl o osobach, które ciężko pracują, tworząc i utrzymując udostępniane za darmo używane przez ciebie listy filtrów. *** diff --git a/dist/description/description-pt_BR.txt b/dist/description/description-pt_BR.txt index c9b644cc9991c..0b99e84a50fbf 100644 --- a/dist/description/description-pt_BR.txt +++ b/dist/description/description-pt_BR.txt @@ -1,4 +1,4 @@ -Um bloqueador eficiente: com baixo consumo de memória e cpu, e ainda pode carregar e aplicar milhares de filtros a mais do quê qualquer outro bloqueador popular por aí. +Um bloqueador eficiente: com baixo consumo de memória e CPU, e ainda pode carregar e aplicar milhares de filtros a mais do quê qualquer outro bloqueador popular por aí. Visão geral ilustrada de sua eficiência: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP :-Efficiency-compared @@ -6,7 +6,7 @@ Utilização: Use o botão de energia no pop-up para desativar/ativar o uBlock *** -Flexível, é mais do que um "ad blocker": também pode ler e criar filtros a partir de arquivos de hosts. +Flexível, é mais do que um "ad blocker": ele também pode ler e criar filtros a partir de arquivos de hosts. Por padrão, essas listas de filtros são carregadas e aplicadas: @@ -22,15 +22,15 @@ Mais listas estão disponíveis para você escolher, se desejar: - hpHosts’s Ad and tracking servers - MVPS HOSTS - Spam404 -- E varios outros +- E varias outras Claro, quanto mais filtros habilitados, maior o consumo de memória. Ainda, mesmo após a adição do Fanboy's duas listas extras, hpHosts’s e servidores de rastreamento, uBlock₀ ainda tem o consumo de memória menor do que outros bloqueadores populares lá fora. -Também, esteja ciente de que selecionar algumas dessas listas extras pode levar à maior probabilidade de quebra do layout do site, especialmente aquelas listas que são normalmente usadas como arquivo hosts. +Também, esteja ciente de que selecionar algumas dessas listas extras pode levar em uma maior probabilidade de quebrar o layout do site, especialmente aquelas listas que são normalmente usadas como arquivo hosts. *** -Sem as listas predefinidas de filtros, esta extensão não é nada. Por isso, se você nunca contribuiu com alguma coisa, pense nas pessoas que trabalham duro para manter as listas de filtro que você está usando, que foram disponibilizadas para usar tudo de graça. +Sem as listas predefinidas de filtros, esta extensão não é nada. Por isso, se você nunca contribuiu com alguma coisa, pense nas pessoas que trabalham duro para manter as listas de filtro que você está usando e que foram disponibilizadas para usar tudo de graça. *** diff --git a/dist/description/description-sr.txt b/dist/description/description-sr.txt index 0a201b0c38b8b..84f7c96bb1627 100644 --- a/dist/description/description-sr.txt +++ b/dist/description/description-sr.txt @@ -1,4 +1,4 @@ -Ефикасан блокатор: ниски процесорски и меморијски захтеви и може учитати и применити хиљаде филтера више него остали популарни блокатори. +Ефикасан блокатор: ниски процесорски и меморијски захтеви а може учитати и применити хиљаде филтера више него остали популарни блокатори. Илустровани преглед његове ефикасности: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared @@ -6,7 +6,7 @@ *** -Флексибилан је, више је од блокатора реклама: може читати и стварати филтере из хост датотека. +Флексибилан је, више је од блокатора реклама: може читати и креирати филтере из хост датотека. Одмах по инсталирању, следећи спискови филтера су учитани и спроведени: @@ -30,7 +30,7 @@ *** -Без предефинисаних спискова филтера, ово проширење је ништа. Тако да ако икад желите да допринесете нешто, размислите о људима који напорно раде одржавајући спискове филтера које користите и који су доступни за бесплатно коришћење свима. +Без предефинисаних спискова филтера, ово проширење је ништа. Тако да ако икад желите да допринесете нечим, размислите о људима који напорно раде одржавајући спискове филтера које користите и који су доступни за бесплатно коришћење свима. *** @@ -45,5 +45,5 @@ Ово је рана верзија, имајте то на уму када будете оцењивали. -Листа измена: +Евиденција промена: https://github.com/gorhill/uBlock/releases diff --git a/dist/description/description-zh_CN.txt b/dist/description/description-zh_CN.txt index 57be18bc53976..c52ca5e4afa9f 100644 --- a/dist/description/description-zh_CN.txt +++ b/dist/description/description-zh_CN.txt @@ -3,11 +3,11 @@ 效率概述说明: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared -用法:点击弹出窗口中的电源按钮,uBlock 将对当前网页永久禁用/启用过滤功能。 它只控制当前网页的请求过滤,而不是一个全局开关。 它只控制当前网页的请求过滤,而不是一个全局开关。 +用法:点击弹出窗口中的电源按钮,uBlock 将对当前网页永久禁用/启用过滤功能。 它只控制当前网页的请求过滤,而不是一个全局开关。 *** -它不只是一个广告拦截工具,它还可以从 hosts 文件里读取和创建过滤规则。 +它很灵活,它不只是一个广告拦截工具,它还可以从 hosts 文件里读取和创建过滤规则。 初始默认加载和执行下列过滤规则列表: @@ -25,13 +25,13 @@ https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared - Spam404 - 等等 -当然,启用越多的过滤规则就会产生越高的内存占用。 然而,即使再添加 Fanboy 额外的两个规则列表,如 hpHosts’s Ad 和 tracking servers,uBlock 的内存占用依然比其他常见的过滤工具要低的多。 +当然,启用越多的过滤规则就会产生越高的内存占用。 然而,即使再添加两个 Fanboy 规则列表,比如 hpHosts’s Ad 和 tracking servers,uBlock 的内存占用依然比其他常见的过滤工具要低得多。 -另外请注意,选择一些额外的列表可能会导致网页破损可能性增高 —— 尤其是那些通常被用作 hosts 文件的列表。 +另外请注意,启用一些额外的规则列表可能会增加网页显示错误的可能性 —— 尤其是那些通常被用作 hosts 文件的列表。 *** -没有这些过滤规则列表,这个扩展就没有了意义。 所以如果你真的想做点贡献,想想那些维护过滤规则的人们,是他们让所有人能够免费使用这一切变得可能。 +没有这些过滤规则列表,这个扩展就没有了意义。 所以如果你真的想做点贡献,想想那些努力维护过滤规则的人们,是他们让所有人能够免费使用这一切。 *** diff --git a/platform/chromium/is-webrtc-supported.html b/platform/chromium/is-webrtc-supported.html index 15c155583b91e..d30b674b1b38d 100644 --- a/platform/chromium/is-webrtc-supported.html +++ b/platform/chromium/is-webrtc-supported.html @@ -1,6 +1,7 @@ + diff --git a/platform/chromium/manifest.json b/platform/chromium/manifest.json index 4d272891e9b3f..b5f610a8aa44b 100644 --- a/platform/chromium/manifest.json +++ b/platform/chromium/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "uBlock Origin", - "version": "1.13.8", + "version": "1.14.22", "commands": { "launch-element-zapper": { @@ -38,19 +38,19 @@ "content_scripts": [ { "matches": ["http://*/*", "https://*/*"], - "js": ["js/vapi-client.js", "js/contentscript.js"], + "js": ["/js/vapi.js", "/js/vapi-client.js", "/js/contentscript.js"], "run_at": "document_start", "all_frames": true }, { "matches": ["http://*/*", "https://*/*"], - "js": ["js/scriptlets/subscriber.js"], + "js": ["/js/scriptlets/subscriber.js"], "run_at": "document_idle", "all_frames": false } ], "incognito": "split", - "minimum_chrome_version": "38.0", + "minimum_chrome_version": "45.0", "optional_permissions": [ "file:///*" ], "options_page": "dashboard.html", "options_ui": { diff --git a/platform/chromium/options_ui.html b/platform/chromium/options_ui.html index d94c001efb4b5..9b1d0e6d77bfa 100644 --- a/platform/chromium/options_ui.html +++ b/platform/chromium/options_ui.html @@ -1,6 +1,8 @@ + + diff --git a/platform/chromium/vapi-background.js b/platform/chromium/vapi-background.js index 34e8d1c1218e9..83bae3229e9f4 100644 --- a/platform/chromium/vapi-background.js +++ b/platform/chromium/vapi-background.js @@ -28,8 +28,7 @@ (function() { /******************************************************************************/ - -var vAPI = self.vAPI = self.vAPI || {}; +/******************************************************************************/ var chrome = self.chrome; var manifest = chrome.runtime.getManifest(); @@ -39,16 +38,35 @@ vAPI.chromiumVersion = (function(){ var matches = /\bChrom(?:e|ium)\/(\d+)\b/.exec(navigator.userAgent); return matches !== null ? parseInt(matches[1], 10) : NaN; })(); + vAPI.cantWebsocket = chrome.webRequest.ResourceType instanceof Object === false || chrome.webRequest.ResourceType.WEBSOCKET !== 'websocket'; +vAPI.webextFlavor = ''; +if ( + self.browser instanceof Object && + typeof self.browser.runtime.getBrowserInfo === 'function' +) { + self.browser.runtime.getBrowserInfo().then(function(info) { + vAPI.webextFlavor = info.vendor + '-' + info.name + '-' + info.version; + }); +} + +// https://issues.adblockplus.org/ticket/5695 +// - Good idea, adopted: cleaner way to detect user-stylesheet support. +vAPI.supportsUserStylesheets = + chrome.extensionTypes instanceof Object && + chrome.extensionTypes.CSSOrigin instanceof Object && + 'USER' in chrome.extensionTypes.CSSOrigin; +vAPI.insertCSS = chrome.tabs.insertCSS; + var noopFunc = function(){}; /******************************************************************************/ vAPI.app = { - name: manifest.name, + name: manifest.name.replace(' dev build', ''), version: manifest.version }; @@ -301,14 +319,19 @@ vAPI.tabs.registerListeners = function() { }; var onCreatedNavigationTarget = function(details) { - //console.debug('onCreatedNavigationTarget: popup candidate tab id %d = "%s"', details.tabId, details.url); + if ( typeof details.url !== 'string' ) { + details.url = ''; + } if ( reGoodForWebRequestAPI.test(details.url) === false ) { details.frameId = 0; details.url = sanitizeURL(details.url); onNavigationClient(details); } if ( typeof vAPI.tabs.onPopupCreated === 'function' ) { - vAPI.tabs.onPopupCreated(details.tabId.toString(), details.sourceTabId.toString()); + vAPI.tabs.onPopupCreated( + details.tabId.toString(), + details.sourceTabId.toString() + ); } }; @@ -327,10 +350,17 @@ vAPI.tabs.registerListeners = function() { }; var onActivated = function(details) { - vAPI.contextMenu.onMustUpdate(details.tabId); + if ( vAPI.contextMenu instanceof Object ) { + vAPI.contextMenu.onMustUpdate(details.tabId); + } }; + // https://github.com/gorhill/uBlock/issues/3073 + // - Fall back to `tab.url` when `changeInfo.url` is not set. var onUpdated = function(tabId, changeInfo, tab) { + if ( typeof changeInfo.url !== 'string' ) { + changeInfo.url = tab && tab.url; + } if ( changeInfo.url ) { changeInfo.url = sanitizeURL(changeInfo.url); } @@ -470,12 +500,19 @@ vAPI.tabs.open = function(details) { return; } + // https://github.com/gorhill/uBlock/issues/3053#issuecomment-332276818 + // - Do not try to lookup uBO's own pages with FF 55 or less. + if ( /^Mozilla-Firefox-5[2-5]\./.test(vAPI.webextFlavor) ) { + wrapper(); + return; + } + // https://developer.chrome.com/extensions/tabs#method-query // "Note that fragment identifiers are not matched." // It's a lie, fragment identifiers ARE matched. So we need to remove the // fragment. - var pos = targetURL.indexOf('#'); - var targetURLWithoutHash = pos === -1 ? targetURL : targetURL.slice(0, pos); + var pos = targetURL.indexOf('#'), + targetURLWithoutHash = pos === -1 ? targetURL : targetURL.slice(0, pos); chrome.tabs.query({ url: targetURLWithoutHash }, function(tabs) { if ( chrome.runtime.lastError ) { /* noop */ } @@ -608,38 +645,80 @@ vAPI.tabs.injectScript = function(tabId, details, callback) { // Since we may be called asynchronously, the tab id may not exist // anymore, so this ensures it does still exist. -vAPI.setIcon = function(tabId, iconStatus, badge) { - tabId = toChromiumTabId(tabId); - if ( tabId === 0 ) { - return; - } +// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/browserAction#Browser_compatibility +// Firefox for Android does no support browser.browserAction.setIcon(). - var onIconReady = function() { - if ( vAPI.lastError() ) { - return; +vAPI.setIcon = (function() { + var browserAction = chrome.browserAction, + titleTemplate = chrome.runtime.getManifest().name + ' ({badge})'; + var iconPaths = [ + { + '19': 'img/browsericons/icon19-off.png', + '38': 'img/browsericons/icon38-off.png' + }, + { + '19': 'img/browsericons/icon19.png', + '38': 'img/browsericons/icon38.png' } - chrome.browserAction.setBadgeText({ tabId: tabId, text: badge }); - if ( badge !== '' ) { - chrome.browserAction.setBadgeBackgroundColor({ - tabId: tabId, - color: '#666' + ]; + + var onTabReady = function(tab, status, badge) { + if ( vAPI.lastError() || !tab ) { return; } + + if ( browserAction.setIcon !== undefined ) { + browserAction.setIcon({ + tabId: tab.id, + path: iconPaths[status === 'on' ? 1 : 0] + }); + browserAction.setBadgeText({ + tabId: tab.id, + text: badge + }); + if ( badge !== '' ) { + browserAction.setBadgeBackgroundColor({ + tabId: tab.id, + color: '#666' + }); + } + } + + if ( browserAction.setTitle !== undefined ) { + browserAction.setTitle({ + tabId: tab.id, + title: titleTemplate.replace( + '{badge}', + status === 'on' ? (badge !== '' ? badge : '0') : 'off' + ) }); } }; - var iconPaths = iconStatus === 'on' ? - { '19': 'img/browsericons/icon19.png', '38': 'img/browsericons/icon38.png' } : - { '19': 'img/browsericons/icon19-off.png', '38': 'img/browsericons/icon38-off.png' }; + return function(tabId, iconStatus, badge) { + tabId = toChromiumTabId(tabId); + if ( tabId === 0 ) { return; } - chrome.browserAction.setIcon({ tabId: tabId, path: iconPaths }, onIconReady); - vAPI.contextMenu.onMustUpdate(tabId); -}; + chrome.tabs.get(tabId, function(tab) { + onTabReady(tab, iconStatus, badge); + }); + + if ( vAPI.contextMenu instanceof Object ) { + vAPI.contextMenu.onMustUpdate(tabId); + } + }; +})(); + +chrome.browserAction.onClicked.addListener(function(tab) { + vAPI.tabs.open({ + select: true, + url: 'popup.html?tabId=' + tab.id + '&mobile=1' + }); +}); /******************************************************************************/ /******************************************************************************/ vAPI.messaging = { - ports: {}, + ports: new Map(), listeners: {}, defaultHandler: null, NOOPFUNC: noopFunc, @@ -655,171 +734,180 @@ vAPI.messaging.listen = function(listenerName, callback) { /******************************************************************************/ vAPI.messaging.onPortMessage = (function() { - var messaging = vAPI.messaging; - var toAuxPending = {}; + var messaging = vAPI.messaging, + supportsUserStylesheets = vAPI.supportsUserStylesheets; // Use a wrapper to avoid closure and to allow reuse. - var CallbackWrapper = function(port, request, timeout) { + var CallbackWrapper = function(port, request) { this.callback = this.proxy.bind(this); // bind once - this.init(port, request, timeout); - }; - - CallbackWrapper.prototype.init = function(port, request, timeout) { - this.port = port; - this.request = request; - this.timerId = timeout !== undefined ? - vAPI.setTimeout(this.callback, timeout) : - null; - return this; + this.init(port, request); }; - CallbackWrapper.prototype.proxy = function(response) { - if ( this.timerId !== null ) { - clearTimeout(this.timerId); - delete toAuxPending[this.timerId]; - this.timerId = null; - } - // https://github.com/chrisaljoudi/uBlock/issues/383 - if ( messaging.ports.hasOwnProperty(this.port.name) ) { - this.port.postMessage({ - auxProcessId: this.request.auxProcessId, - channelName: this.request.channelName, - msg: response !== undefined ? response : null - }); + CallbackWrapper.prototype = { + init: function(port, request) { + this.port = port; + this.request = request; + return this; + }, + proxy: function(response) { + // https://github.com/chrisaljoudi/uBlock/issues/383 + if ( messaging.ports.has(this.port.name) ) { + this.port.postMessage({ + auxProcessId: this.request.auxProcessId, + channelName: this.request.channelName, + msg: response !== undefined ? response : null + }); + } + // Mark for reuse + this.port = this.request = null; + callbackWrapperJunkyard.push(this); } - // Mark for reuse - this.port = this.request = null; - callbackWrapperJunkyard.push(this); }; var callbackWrapperJunkyard = []; - var callbackWrapperFactory = function(port, request, timeout) { + var callbackWrapperFactory = function(port, request) { var wrapper = callbackWrapperJunkyard.pop(); if ( wrapper ) { - return wrapper.init(port, request, timeout); + return wrapper.init(port, request); } - return new CallbackWrapper(port, request, timeout); + return new CallbackWrapper(port, request); }; - var toAux = function(details, portFrom) { - var port, portTo; - var chromiumTabId = toChromiumTabId(details.toTabId); - - // TODO: This could be an issue with a lot of tabs: easy to address - // with a port name to tab id map. - for ( var portName in messaging.ports ) { - if ( messaging.ports.hasOwnProperty(portName) === false ) { - continue; + var toFramework = function(request, port, callback) { + var sender = port && port.sender; + if ( !sender ) { return; } + var tabId = sender.tab && sender.tab.id; + if ( !tabId ) { return; } + var msg = request.msg, + toPort; + switch ( msg.what ) { + case 'connectionAccepted': + case 'connectionRefused': + toPort = messaging.ports.get(msg.fromToken); + if ( toPort !== undefined ) { + msg.tabId = tabId.toString(); + toPort.postMessage(request); + } else { + msg.what = 'connectionBroken'; + port.postMessage(request); } - // When sending to an auxiliary process, the target is always the - // port associated with the root frame. - port = messaging.ports[portName]; - if ( port.sender.frameId === 0 && port.sender.tab.id === chromiumTabId ) { - portTo = port; - break; + break; + case 'connectionRequested': + msg.tabId = '' + tabId.toString(); + for ( toPort of messaging.ports.values() ) { + toPort.postMessage(request); } - } - - var wrapper; - if ( details.auxProcessId !== undefined ) { - wrapper = callbackWrapperFactory(portFrom, details, 1023); - } - - // Destination not found: - if ( portTo === undefined ) { - if ( wrapper !== undefined ) { - wrapper.callback(); + break; + case 'connectionBroken': + case 'connectionCheck': + case 'connectionMessage': + toPort = messaging.ports.get( + port.name === msg.fromToken ? msg.toToken : msg.fromToken + ); + if ( toPort !== undefined ) { + msg.tabId = tabId.toString(); + toPort.postMessage(request); + } else { + msg.what = 'connectionBroken'; + port.postMessage(request); } - return; - } - - // As per HTML5, timer id is always an integer, thus suitable to be - // used as a key, and which value is safe to use across process - // boundaries. - if ( wrapper !== undefined ) { - toAuxPending[wrapper.timerId] = wrapper; + break; + case 'userCSS': + var details = { + code: undefined, + frameId: sender.frameId, + matchAboutBlank: true + }; + if ( supportsUserStylesheets ) { + details.cssOrigin = 'user'; + } + if ( msg.add ) { + details.runAt = 'document_start'; + } + var cssText; + const cssPromises = []; + for ( cssText of msg.add ) { + details.code = cssText; + cssPromises.push(chrome.tabs.insertCSS(tabId, details)); + } + for ( cssText of msg.remove ) { + details.code = cssText; + cssPromises.push(chrome.tabs.removeCSS(tabId, details)); + } + if ( typeof callback === 'function' ) { + Promise.all(cssPromises).then(() => { + callback(); + }, null); + } + break; } - - portTo.postMessage({ - mainProcessId: wrapper && wrapper.timerId, - channelName: details.toChannel, - msg: details.msg - }); }; - var toAuxResponse = function(details) { - var mainProcessId = details.mainProcessId; - if ( mainProcessId === undefined ) { - return; - } - if ( toAuxPending.hasOwnProperty(mainProcessId) === false ) { - return; + // https://bugzilla.mozilla.org/show_bug.cgi?id=1392067 + // Workaround: manually remove ports matching removed tab. + chrome.tabs.onRemoved.addListener(function(tabId) { + for ( var port of messaging.ports.values() ) { + var tab = port.sender && port.sender.tab; + if ( !tab ) { continue; } + if ( tab.id === tabId ) { + vAPI.messaging.onPortDisconnect(port); + } } - var wrapper = toAuxPending[mainProcessId]; - delete toAuxPending[mainProcessId]; - wrapper.callback(details.msg); - }; + }); return function(request, port) { - // Auxiliary process to auxiliary process - if ( request.toTabId !== undefined ) { - toAux(request, port); - return; + // prepare response + var callback = this.NOOPFUNC; + if ( request.auxProcessId !== undefined ) { + callback = callbackWrapperFactory(port, request).callback; } - // Auxiliary process to auxiliary process: response - if ( request.mainProcessId !== undefined ) { - toAuxResponse(request); + // Content process to main process: framework handler. + if ( request.channelName === 'vapi' ) { + toFramework(request, port, callback); return; } - // Auxiliary process to main process: prepare response - var callback = messaging.NOOPFUNC; - if ( request.auxProcessId !== undefined ) { - callback = callbackWrapperFactory(port, request).callback; - } - // Auxiliary process to main process: specific handler - var r = messaging.UNHANDLED; - var listener = messaging.listeners[request.channelName]; + var r = this.UNHANDLED, + listener = this.listeners[request.channelName]; if ( typeof listener === 'function' ) { r = listener(request.msg, port.sender, callback); } - if ( r !== messaging.UNHANDLED ) { - return; - } + if ( r !== this.UNHANDLED ) { return; } // Auxiliary process to main process: default handler - r = messaging.defaultHandler(request.msg, port.sender, callback); - if ( r !== messaging.UNHANDLED ) { - return; - } + r = this.defaultHandler(request.msg, port.sender, callback); + if ( r !== this.UNHANDLED ) { return; } // Auxiliary process to main process: no handler - console.error('uBlock> messaging > unknown request: %o', request); + console.error( + 'vAPI.messaging.onPortMessage > unhandled request: %o', + request + ); // Need to callback anyways in case caller expected an answer, or // else there is a memory leak on caller's side callback(); - }; + }.bind(vAPI.messaging); })(); /******************************************************************************/ vAPI.messaging.onPortDisconnect = function(port) { - port.onDisconnect.removeListener(vAPI.messaging.onPortDisconnect); - port.onMessage.removeListener(vAPI.messaging.onPortMessage); - delete vAPI.messaging.ports[port.name]; -}; + port.onDisconnect.removeListener(this.onPortDisconnect); + port.onMessage.removeListener(this.onPortMessage); + this.ports.delete(port.name); +}.bind(vAPI.messaging); /******************************************************************************/ vAPI.messaging.onPortConnect = function(port) { - port.onDisconnect.addListener(vAPI.messaging.onPortDisconnect); - port.onMessage.addListener(vAPI.messaging.onPortMessage); - vAPI.messaging.ports[port.name] = port; -}; + port.onDisconnect.addListener(this.onPortDisconnect); + port.onMessage.addListener(this.onPortMessage); + this.ports.set(port.name, port); +}.bind(vAPI.messaging); /******************************************************************************/ @@ -844,308 +932,18 @@ vAPI.messaging.broadcast = function(message) { broadcast: true, msg: message }; - - for ( var portName in this.ports ) { - if ( this.ports.hasOwnProperty(portName) === false ) { - continue; - } - this.ports[portName].postMessage(messageWrapper); + for ( var port of this.ports.values() ) { + port.postMessage(messageWrapper); } }; /******************************************************************************/ /******************************************************************************/ -vAPI.net = {}; - -/******************************************************************************/ - -vAPI.net.registerListeners = function() { - var µb = µBlock, - µburi = µb.URI, - wrApi = chrome.webRequest; - - // https://bugs.chromium.org/p/chromium/issues/detail?id=410382 - // Between Chromium 38-48, plug-ins' network requests were reported as - // type "other" instead of "object". - var is_v38_48 = /\bChrom[a-z]+\/(?:3[89]|4[0-8])\.[\d.]+\b/.test(navigator.userAgent); - - // legacy Chromium understands only these network request types. - var validTypes = { - main_frame: true, - sub_frame: true, - stylesheet: true, - script: true, - image: true, - object: true, - xmlhttprequest: true, - other: true - }; - // modern Chromium/WebExtensions: more types available. - if ( wrApi.ResourceType ) { - (function() { - for ( var typeKey in wrApi.ResourceType ) { - if ( wrApi.ResourceType.hasOwnProperty(typeKey) ) { - validTypes[wrApi.ResourceType[typeKey]] = true; - } - } - })(); - } +// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/contextMenus#Browser_compatibility +// Firefox for Android does no support browser.contextMenus. - var 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'] - ]); - - var denormalizeTypes = function(aa) { - if ( aa.length === 0 ) { - return Object.keys(validTypes); - } - var out = []; - var i = aa.length, - type, - needOther = true; - while ( i-- ) { - type = aa[i]; - if ( validTypes[type] ) { - out.push(type); - } - if ( type === 'other' ) { - needOther = false; - } - } - if ( needOther ) { - out.push('other'); - } - return out; - }; - - var headerValue = function(headers, name) { - var i = headers.length; - while ( i-- ) { - if ( headers[i].name.toLowerCase() === name ) { - return headers[i].value.trim(); - } - } - return ''; - }; - - var normalizeRequestDetails = function(details) { - details.tabId = details.tabId.toString(); - - var type = details.type; - - // https://github.com/gorhill/uBlock/issues/1493 - // Chromium 49+/WebExtensions support a new request type: `ping`, - // which is fired as a result of using `navigator.sendBeacon`. - if ( type === 'ping' ) { - details.type = 'beacon'; - return; - } - - 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. - var path = µburi.pathFromURI(details.url), - 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://github.com/chrisaljoudi/uBlock/issues/862 - // If no transposition possible, transpose to `object` as per - // Chromium bug 410382 - // https://code.google.com/p/chromium/issues/detail?id=410382 - if ( is_v38_48 ) { - details.type = 'object'; - } - }; - - // https://bugs.chromium.org/p/chromium/issues/detail?id=129353 - // https://github.com/gorhill/uBlock/issues/1497 - // Expose websocket-based network requests to uBO's filtering engine, - // logger, etc. - // Counterpart of following block of code is found in "vapi-client.js" -- - // search for "https://github.com/gorhill/uBlock/issues/1497". - // - // Once uBO 1.11.1 and uBO-Extra 2.12 are widespread, the image-based - // handling code can be removed. - var onBeforeWebsocketRequest = function(details) { - if ( (details.type !== 'image') && - (details.method !== 'HEAD' || details.type !== 'xmlhttprequest') - ) { - return; - } - var requestURL = details.url, - matches = /[?&]u(?:rl)?=([^&]+)/.exec(requestURL); - if ( matches === null ) { return; } - details.type = 'websocket'; - details.url = decodeURIComponent(matches[1]); - var r = onBeforeRequestClient(details); - if ( r && r.cancel ) { return r; } - // Redirect to the provided URL, or a 1x1 data: URI if none provided. - matches = /[?&]r=([^&]+)/.exec(requestURL); - return { - redirectUrl: matches !== null ? - decodeURIComponent(matches[1]) : - 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' - }; - }; - - var onBeforeRequestClient = this.onBeforeRequest.callback; - var onBeforeRequest = validTypes.websocket - // modern Chromium/WebExtensions: type 'websocket' is supported - ? function(details) { - normalizeRequestDetails(details); - return onBeforeRequestClient(details); - } - // legacy Chromium - : function(details) { - // https://github.com/gorhill/uBlock/issues/1497 - if ( details.url.endsWith('ubofix=f41665f3028c7fd10eecf573336216d3') ) { - var r = onBeforeWebsocketRequest(details); - if ( r !== undefined ) { return r; } - } - normalizeRequestDetails(details); - return onBeforeRequestClient(details); - }; - - // This is needed for Chromium 49-55. - var onBeforeSendHeaders = validTypes.csp_report - // modern Chromium/WebExtensions: type 'csp_report' is supported - ? null - // legacy Chromium - : function(details) { - if ( details.type !== 'ping' || details.method !== 'POST' ) { return; } - var type = headerValue(details.requestHeaders, 'content-type'); - if ( type === '' ) { return; } - if ( type.endsWith('/csp-report') ) { - details.type = 'csp_report'; - return onBeforeRequestClient(details); - } - }; - - var onHeadersReceivedClient = this.onHeadersReceived.callback, - onHeadersReceivedClientTypes = this.onHeadersReceived.types.slice(0), - onHeadersReceivedTypes = denormalizeTypes(onHeadersReceivedClientTypes); - var onHeadersReceived = validTypes.font - // modern Chromium/WebExtensions: type 'font' is supported - ? function(details) { - normalizeRequestDetails(details); - if ( - onHeadersReceivedClientTypes.length !== 0 && - onHeadersReceivedClientTypes.indexOf(details.type) === -1 - ) { - return; - } - return onHeadersReceivedClient(details); - } - // legacy Chromium - : function(details) { - normalizeRequestDetails(details); - // Hack to work around Chromium API limitations, where requests of - // type `font` are returned as `other`. For example, our normalization - // fail at transposing `other` into `font` for URLs which are outside - // what is expected. At least when headers are received we can check - // for content type `font/*`. Blocking at onHeadersReceived time is - // less worse than not blocking at all. Also, due to Chromium bug, - // `other` always becomes `object` when it can't be normalized into - // something else. Test case for "unfriendly" font URLs: - // https://www.google.com/fonts - if ( details.type === 'font' ) { - var r = onBeforeRequestClient(details); - if ( typeof r === 'object' && r.cancel === true ) { - return { cancel: true }; - } - } - if ( - onHeadersReceivedClientTypes.length !== 0 && - onHeadersReceivedClientTypes.indexOf(details.type) === -1 - ) { - return; - } - return onHeadersReceivedClient(details); - }; - - var urls, types; - - if ( onBeforeRequest ) { - urls = this.onBeforeRequest.urls || ['']; - types = this.onBeforeRequest.types || undefined; - if ( - (validTypes.websocket) && - (types === undefined || types.indexOf('websocket') !== -1) && - (urls.indexOf('') === -1) - ) { - if ( urls.indexOf('ws://*/*') === -1 ) { - urls.push('ws://*/*'); - } - if ( urls.indexOf('wss://*/*') === -1 ) { - urls.push('wss://*/*'); - } - } - wrApi.onBeforeRequest.addListener( - onBeforeRequest, - { urls: urls, types: types }, - this.onBeforeRequest.extra - ); - } - - // Chromium 48 and lower does not support `ping` type. - // Chromium 56 and higher does support `csp_report` stype. - if ( onBeforeSendHeaders ) { - wrApi.onBeforeSendHeaders.addListener( - onBeforeSendHeaders, - { - 'urls': [ '' ], - 'types': [ 'ping' ] - }, - [ 'blocking', 'requestHeaders' ] - ); - } - - if ( onHeadersReceived ) { - urls = this.onHeadersReceived.urls || ['']; - types = onHeadersReceivedTypes; - wrApi.onHeadersReceived.addListener( - onHeadersReceived, - { urls: urls, types: types }, - this.onHeadersReceived.extra - ); - } -}; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.contextMenu = { +vAPI.contextMenu = chrome.contextMenus && { _callback: null, _entries: [], _createEntry: function(entry) { @@ -1213,20 +1011,21 @@ vAPI.onLoadAllCompleted = function() { // http://code.google.com/p/chromium/issues/detail?id=410868#c11 // Need to be sure to access `vAPI.lastError()` to prevent // spurious warnings in the console. - var scriptDone = function() { + var onScriptInjected = function() { vAPI.lastError(); }; var scriptStart = function(tabId) { - vAPI.tabs.injectScript(tabId, { - file: 'js/vapi-client.js', - allFrames: true, - runAt: 'document_idle' - }, function(){ }); - vAPI.tabs.injectScript(tabId, { - file: 'js/contentscript.js', - allFrames: true, - runAt: 'document_idle' - }, scriptDone); + var manifest = chrome.runtime.getManifest(); + if ( manifest instanceof Object === false ) { return; } + for ( var contentScript of manifest.content_scripts ) { + for ( var file of contentScript.js ) { + vAPI.tabs.injectScript(tabId, { + file: file, + allFrames: contentScript.all_frames, + runAt: contentScript.run_at + }, onScriptInjected); + } + } }; var bindToTabs = function(tabs) { var µb = µBlock; @@ -1271,7 +1070,7 @@ vAPI.punycodeURL = function(url) { // https://github.com/gorhill/uBlock/issues/900 // Also, UC Browser: http://www.upsieutoc.com/image/WXuH -vAPI.adminStorage = { +vAPI.adminStorage = chrome.storage.managed && { getItem: function(key, callback) { var onRead = function(store) { var data; @@ -1307,7 +1106,7 @@ vAPI.cloud = (function() { var maxChunkCountPerItem = Math.floor(512 * 0.75) & ~(chunkCountPerFetch - 1); // Mind chrome.storage.sync.QUOTA_BYTES_PER_ITEM (8192 at time of writing) - var maxChunkSize = Math.floor(chrome.storage.sync.QUOTA_BYTES_PER_ITEM * 0.75 || 6144); + var maxChunkSize = chrome.storage.sync.QUOTA_BYTES_PER_ITEM || 8192; // Mind chrome.storage.sync.QUOTA_BYTES (128 kB at time of writing) // Firefox: @@ -1315,9 +1114,22 @@ vAPI.cloud = (function() { // > You can store up to 100KB of data using this API/ var maxStorageSize = chrome.storage.sync.QUOTA_BYTES || 102400; + // Flavor-specific handling needs to be done here. Reason: to allow time + // for vAPI.webextFlavor to be properly set. + // https://github.com/gorhill/uBlock/issues/3006 + // For Firefox, we will use a lower ratio to allow for more overhead for + // the infrastructure. Unfortunately this leads to less usable space for + // actual data, but all of this is provided for free by browser vendors, + // so we need to accept and deal with these limitations. + var initialize = function() { + var ratio = vAPI.webextFlavor.startsWith('Mozilla-Firefox-') ? 0.6 : 0.75; + maxChunkSize = Math.floor(maxChunkSize * ratio); + initialize = function(){}; + }; + var options = { defaultDeviceName: window.navigator.platform, - deviceName: window.localStorage.getItem('deviceName') || '' + deviceName: vAPI.localStorage.getItem('deviceName') || '' }; // This is used to find out a rough count of how many chunks exists: @@ -1364,13 +1176,17 @@ vAPI.cloud = (function() { for ( var i = start; i < n; i++ ) { keys.push(dataKey + i.toString()); } - chrome.storage.sync.remove(keys); + if ( keys.length !== 0 ) { + chrome.storage.sync.remove(keys); + } }; var start = function(/* dataKeys */) { }; var push = function(dataKey, data, callback) { + initialize(); + var bin = { 'source': options.deviceName || options.defaultDeviceName, 'tstamp': Date.now(), @@ -1396,6 +1212,15 @@ vAPI.cloud = (function() { var errorStr; if ( chrome.runtime.lastError ) { errorStr = chrome.runtime.lastError.message; + // https://github.com/gorhill/uBlock/issues/3006#issuecomment-332597677 + // - Delete all that was pushed in case of failure. + // - It's unknown whether such issue applies only to Firefox: + // until such cases are reported for other browsers, we will + // reset the (now corrupted) content of the cloud storage + // only on Firefox. + if ( vAPI.webextFlavor.startsWith('Mozilla-Firefox-') ) { + chunkCount = 0; + } } callback(errorStr); @@ -1405,6 +1230,8 @@ vAPI.cloud = (function() { }; var pull = function(dataKey, callback) { + initialize(); + var assembleChunks = function(bin) { if ( chrome.runtime.lastError ) { callback(null, chrome.runtime.lastError.message); @@ -1461,7 +1288,7 @@ vAPI.cloud = (function() { } if ( typeof details.deviceName === 'string' ) { - window.localStorage.setItem('deviceName', details.deviceName); + vAPI.localStorage.setItem('deviceName', details.deviceName); options.deviceName = details.deviceName; } diff --git a/platform/chromium/vapi-client.js b/platform/chromium/vapi-client.js index 39768c15f582c..0dfbd0dacf9ab 100644 --- a/platform/chromium/vapi-client.js +++ b/platform/chromium/vapi-client.js @@ -19,123 +19,22 @@ Home: https://github.com/gorhill/uBlock */ -/* global HTMLDocument, XMLDocument */ +// For non-background page 'use strict'; -// For non background pages - -/******************************************************************************/ - -(function(self) { - -/******************************************************************************/ -/******************************************************************************/ - -// https://github.com/chrisaljoudi/uBlock/issues/464 -if ( document instanceof HTMLDocument === false ) { - // https://github.com/chrisaljoudi/uBlock/issues/1528 - // A XMLDocument can be a valid HTML document. - if ( - document instanceof XMLDocument === false || - document.createElement('div') instanceof HTMLDivElement === false - ) { - return; - } -} - -// https://github.com/gorhill/uBlock/issues/1124 -// Looks like `contentType` is on track to be standardized: -// https://dom.spec.whatwg.org/#concept-document-content-type -// https://forums.lanik.us/viewtopic.php?f=64&t=31522 -// Skip text/plain documents. -var contentType = document.contentType || ''; -if ( /^image\/|^text\/plain/.test(contentType) ) { - return; -} - /******************************************************************************/ -// https://bugs.chromium.org/p/project-zero/issues/detail?id=1225&desc=6#c10 -if ( !self.vAPI || self.vAPI.uBO !== true ) { - self.vAPI = { uBO: true }; -} - -var vAPI = self.vAPI; -var chrome = self.chrome; - // https://github.com/chrisaljoudi/uBlock/issues/456 -// Already injected? -if ( vAPI.sessionId ) { - return; -} - -/******************************************************************************/ - -var referenceCounter = 0; +// Skip if already injected. -vAPI.lock = function() { - referenceCounter += 1; -}; - -vAPI.unlock = function() { - referenceCounter -= 1; - if ( referenceCounter === 0 ) { - // Eventually there will be code here to flush the javascript code - // from this file out of memory when it ends up unused. - - } -}; +if ( typeof vAPI === 'object' && !vAPI.clientScript ) { // >>>>>>>> start of HUGE-IF-BLOCK /******************************************************************************/ - -vAPI.executionCost = { - start: function(){}, - stop: function(){} -}; -/* -vAPI.executionCost = { - tcost: 0, - tstart: 0, - nstart: 0, - level: 1, - start: function() { - if ( this.nstart === 0 ) { - this.tstart = window.performance.now(); - } - this.nstart += 1; - }, - stop: function(mark) { - this.nstart -= 1; - if ( this.nstart !== 0 ) { - return; - } - var tcost = window.performance.now() - this.tstart; - this.tcost += tcost; - if ( mark === undefined ) { - return; - } - var top = window === window.top; - if ( !top && this.level < 2 ) { - return; - } - var context = window === window.top ? ' top' : 'frame'; - var percent = this.tcost / window.performance.now() * 100; - console.log( - 'uBO cost (%s): %sms/%s%% (%s: %sms)', - context, - this.tcost.toFixed(1), - percent.toFixed(1), - mark, - tcost.toFixed(2) - ); - } -}; -*/ -vAPI.executionCost.start(); - /******************************************************************************/ +vAPI.clientScript = true; + vAPI.randomToken = function() { return String.fromCharCode(Date.now() % 26 + 97) + Math.floor(Math.random() * 982451653 + 982451653).toString(36); @@ -166,20 +65,41 @@ vAPI.shutdown = { } }; -/******************************************************************************/ /******************************************************************************/ vAPI.messaging = { port: null, portTimer: null, portTimerDelay: 10000, - channels: Object.create(null), - channelCount: 0, - pending: Object.create(null), - pendingCount: 0, + channels: new Map(), + connections: new Map(), + pending: new Map(), auxProcessId: 1, shuttingDown: false, + Connection: function(handler, details) { + var messaging = vAPI.messaging; + this.messaging = 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.checkBound = this.check.bind(this); + this.checkTimer = undefined; + // On Firefox it appears ports are not automatically disconnected when + // navigating to another page. + if ( messaging.Connection.pagehide !== undefined ) { return; } + messaging.Connection.pagehide = function() { + for ( var connection of this.connections.values() ) { + connection.disconnect(); + connection.handler(connection.toDetails('connectionBroken')); + } + }.bind(messaging); + window.addEventListener('pagehide', messaging.Connection.pagehide); + }, + shutdown: function() { this.shuttingDown = true; this.destroyPort(); @@ -189,62 +109,83 @@ vAPI.messaging = { this.port = null; vAPI.shutdown.exec(); }, - disconnectListenerCallback: null, + disconnectListenerBound: null, messageListener: function(details) { - if ( !details ) { - return; - } + if ( !details ) { return; } // Sent to all channels - if ( details.broadcast === true && !details.channelName ) { - for ( var channelName in this.channels ) { + if ( details.broadcast ) { + for ( var channelName of this.channels.keys() ) { this.sendToChannelListeners(channelName, details.msg); } return; } // Response to specific message previously sent + var listener; if ( details.auxProcessId ) { - var listener = this.pending[details.auxProcessId]; - delete this.pending[details.auxProcessId]; - delete details.auxProcessId; // TODO: why? - if ( listener ) { - this.pendingCount -= 1; + listener = this.pending.get(details.auxProcessId); + if ( listener !== undefined ) { + this.pending.delete(details.auxProcessId); listener(details.msg); return; } } - // Sent to a specific channel - var response = this.sendToChannelListeners(details.channelName, details.msg); - - // Respond back if required - if ( details.mainProcessId === undefined ) { - return; - } - var port = this.connect(); - if ( port !== null ) { - port.postMessage({ - mainProcessId: details.mainProcessId, - msg: response - }); + if ( details.channelName !== 'vapi' ) { return; } + + // Internal handler + var connection; + + switch ( details.msg.what ) { + case 'connectionAccepted': + case 'connectionBroken': + case 'connectionCheck': + case 'connectionMessage': + case 'connectionRefused': + connection = this.connections.get(details.msg.id); + if ( connection === undefined ) { return; } + connection.receive(details.msg); + break; + case 'connectionRequested': + var listeners = this.channels.get(details.msg.to); + if ( listeners === undefined ) { return; } + var port = this.getPort(); + if ( port === null ) { return; } + for ( listener of listeners ) { + if ( listener(details.msg) !== true ) { continue; } + details.msg.what = 'connectionAccepted'; + details.msg.toToken = port.name; + connection = new this.Connection(listener, details.msg); + this.connections.set(connection.id, connection); + break; + } + if ( details.msg.what !== 'connectionAccepted' ) { + details.msg.what = 'connectionRefused'; + } + port.postMessage(details); + break; + default: + break; } }, messageListenerCallback: null, portPoller: function() { this.portTimer = null; - if ( this.port !== null ) { - if ( this.channelCount !== 0 || this.pendingCount !== 0 ) { - this.portTimer = vAPI.setTimeout(this.portPollerCallback, this.portTimerDelay); - this.portTimerDelay = Math.min(this.portTimerDelay * 2, 60 * 60 * 1000); - return; - } - } - this.destroyPort(); + if ( + this.port !== null && + this.channels.size === 0 && + this.connections.size === 0 && + this.pending.size === 0 + ) { + return this.destroyPort(); + } + this.portTimer = vAPI.setTimeout(this.portPollerBound, this.portTimerDelay); + this.portTimerDelay = Math.min(this.portTimerDelay * 2, 60 * 60 * 1000); }, - portPollerCallback: null, + portPollerBound: null, destroyPort: function() { if ( this.portTimer !== null ) { @@ -255,20 +196,21 @@ vAPI.messaging = { if ( port !== null ) { port.disconnect(); port.onMessage.removeListener(this.messageListenerCallback); - port.onDisconnect.removeListener(this.disconnectListenerCallback); + port.onDisconnect.removeListener(this.disconnectListenerBound); this.port = null; } - if ( this.channelCount !== 0 ) { - this.channels = Object.create(null); - this.channelCount = 0; + this.channels.clear(); + if ( this.connections.size !== 0 ) { + for ( var connection of this.connections.values() ) { + connection.receive({ what: 'connectionBroken' }); + } + this.connections.clear(); } // service pending callbacks - if ( this.pendingCount !== 0 ) { - var pending = this.pending, callback; - this.pending = Object.create(null); - this.pendingCount = 0; - for ( var auxId in pending ) { - callback = pending[auxId]; + if ( this.pending.size !== 0 ) { + var pending = this.pending; + this.pending = new Map(); + for ( var callback of pending.values() ) { if ( typeof callback === 'function' ) { callback(null); } @@ -277,13 +219,11 @@ vAPI.messaging = { }, createPort: function() { - if ( this.shuttingDown ) { - return null; - } + if ( this.shuttingDown ) { return null; } if ( this.messageListenerCallback === null ) { this.messageListenerCallback = this.messageListener.bind(this); - this.disconnectListenerCallback = this.disconnectListener.bind(this); - this.portPollerCallback = this.portPoller.bind(this); + this.disconnectListenerBound = this.disconnectListener.bind(this); + this.portPollerBound = this.portPoller.bind(this); } try { this.port = chrome.runtime.connect({name: vAPI.sessionId}) || null; @@ -292,111 +232,115 @@ vAPI.messaging = { } if ( this.port !== null ) { this.port.onMessage.addListener(this.messageListenerCallback); - this.port.onDisconnect.addListener(this.disconnectListenerCallback); - } - this.portTimerDelay = 10000; - if ( this.portTimer === null ) { - this.portTimer = vAPI.setTimeout(this.portPollerCallback, this.portTimerDelay); + this.port.onDisconnect.addListener(this.disconnectListenerBound); + this.portTimerDelay = 10000; + if ( this.portTimer === null ) { + this.portTimer = vAPI.setTimeout( + this.portPollerBound, + this.portTimerDelay + ); + } } return this.port; }, - connect: function() { + getPort: function() { return this.port !== null ? this.port : this.createPort(); }, send: function(channelName, message, callback) { - this.sendTo(channelName, message, undefined, undefined, callback); - }, - - sendTo: function(channelName, message, toTabId, toChannel, callback) { // Too large a gap between the last request and the last response means // the main process is no longer reachable: memory leaks and bad // performance become a risk -- especially for long-lived, dynamic // pages. Guard against this. - if ( this.pendingCount > 25 ) { + if ( this.pending.size > 25 ) { vAPI.shutdown.exec(); } - var port = this.connect(); + var port = this.getPort(); if ( port === null ) { - if ( typeof callback === 'function' ) { - callback(); - } + if ( typeof callback === 'function' ) { callback(); } return; } var auxProcessId; if ( callback ) { auxProcessId = this.auxProcessId++; - this.pending[auxProcessId] = callback; - this.pendingCount += 1; + this.pending.set(auxProcessId, callback); } port.postMessage({ channelName: channelName, auxProcessId: auxProcessId, - toTabId: toTabId, - toChannel: toChannel, msg: message }); }, - addChannelListener: function(channelName, callback) { - if ( typeof callback !== 'function' ) { - return; - } - var listeners = this.channels[channelName]; - if ( listeners !== undefined && listeners.indexOf(callback) !== -1 ) { - console.error('Duplicate listener on channel "%s"', channelName); - return; - } - if ( listeners === undefined ) { - this.channels[channelName] = [callback]; - this.channelCount += 1; - } else { - listeners.push(callback); - } - this.connect(); + connectTo: function(from, to, handler) { + var port = this.getPort(); + if ( port === null ) { return; } + var connection = new this.Connection(handler, { + id: from + '-' + to + '-' + vAPI.sessionId, + to: to, + from: from, + fromToken: port.name + }); + this.connections.set(connection.id, connection); + port.postMessage({ + channelName: 'vapi', + msg: { + what: 'connectionRequested', + id: connection.id, + from: from, + fromToken: port.name, + to: to + } + }); + return connection.id; }, - removeChannelListener: function(channelName, callback) { - if ( typeof callback !== 'function' ) { - return; - } - var listeners = this.channels[channelName]; + disconnectFrom: function(connectionId) { + var connection = this.connections.get(connectionId); + if ( connection === undefined ) { return; } + connection.disconnect(); + }, + + sendTo: function(connectionId, payload) { + var connection = this.connections.get(connectionId); + if ( connection === undefined ) { return; } + connection.send(payload); + }, + + addChannelListener: function(channelName, listener) { + var listeners = this.channels.get(channelName); if ( listeners === undefined ) { - return; - } - var pos = listeners.indexOf(callback); - if ( pos === -1 ) { - console.error('Listener not found on channel "%s"', channelName); - return; + this.channels.set(channelName, [ listener ]); + } else if ( listeners.indexOf(listener) === -1 ) { + listeners.push(listener); } + this.getPort(); + }, + + removeChannelListener: function(channelName, listener) { + var listeners = this.channels.get(channelName); + if ( listeners === undefined ) { return; } + var pos = listeners.indexOf(listener); + if ( pos === -1 ) { return; } listeners.splice(pos, 1); if ( listeners.length === 0 ) { - delete this.channels[channelName]; - this.channelCount -= 1; + this.channels.delete(channelName); } }, removeAllChannelListeners: function(channelName) { - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } - delete this.channels[channelName]; - this.channelCount -= 1; + this.channels.delete(channelName); }, sendToChannelListeners: function(channelName, msg) { - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } + var listeners = this.channels.get(channelName); + if ( listeners === undefined ) { return; } + listeners = listeners.slice(0); var response; - for ( var i = 0, n = listeners.length; i < n; i++ ) { - response = listeners[i](msg); - if ( response !== undefined ) { - break; - } + for ( var listener of listeners ) { + response = listener(msg); + if ( response !== undefined ) { break; } } return response; } @@ -404,19 +348,100 @@ vAPI.messaging = { /******************************************************************************/ +vAPI.messaging.Connection.prototype = { + toDetails: function(what, payload) { + return { + what: what, + id: this.id, + from: this.from, + fromToken: this.fromToken, + to: this.to, + toToken: this.toToken, + payload: payload + }; + }, + disconnect: function() { + if ( this.checkTimer !== undefined ) { + clearTimeout(this.checkTimer); + this.checkTimer = undefined; + } + this.messaging.connections.delete(this.id); + var port = this.messaging.getPort(); + if ( port === null ) { return; } + port.postMessage({ + channelName: 'vapi', + msg: this.toDetails('connectionBroken') + }); + }, + checkAsync: function() { + if ( this.checkTimer !== undefined ) { + clearTimeout(this.checkTimer); + } + this.checkTimer = vAPI.setTimeout(this.checkBound, 499); + }, + check: function() { + this.checkTimer = undefined; + if ( this.messaging.connections.has(this.id) === false ) { return; } + var port = this.messaging.getPort(); + if ( port === null ) { return; } + port.postMessage({ + channelName: 'vapi', + msg: this.toDetails('connectionCheck') + }); + this.checkAsync(); + }, + receive: function(details) { + switch ( details.what ) { + case 'connectionAccepted': + this.toToken = details.toToken; + this.handler(details); + this.checkAsync(); + break; + case 'connectionBroken': + this.messaging.connections.delete(this.id); + this.handler(details); + break; + case 'connectionMessage': + this.handler(details); + this.checkAsync(); + break; + case 'connectionCheck': + var port = this.messaging.getPort(); + if ( port === null ) { return; } + if ( this.messaging.connections.has(this.id) ) { + this.checkAsync(); + } else { + details.what = 'connectionBroken'; + port.postMessage({ channelName: 'vapi', msg: details }); + } + break; + case 'connectionRefused': + this.messaging.connections.delete(this.id); + this.handler(details); + break; + } + }, + send: function(payload) { + var port = this.messaging.getPort(); + if ( port === null ) { return; } + port.postMessage({ + channelName: 'vapi', + msg: this.toDetails('connectionMessage', payload) + }); + } +}; + +/******************************************************************************/ + vAPI.shutdown.add(function() { vAPI.messaging.shutdown(); - delete window.vAPI; + window.vAPI = undefined; }); // https://www.youtube.com/watch?v=rT5zCHn0tsg // https://www.youtube.com/watch?v=E-jS4e3zacI -vAPI.executionCost.stop('vapi-client.js'); - /******************************************************************************/ /******************************************************************************/ -})(this); - -/******************************************************************************/ +} // <<<<<<<< end of HUGE-IF-BLOCK diff --git a/platform/chromium/vapi-common.js b/platform/chromium/vapi-common.js index 5a2c2799394b1..007313deaac09 100644 --- a/platform/chromium/vapi-common.js +++ b/platform/chromium/vapi-common.js @@ -28,12 +28,6 @@ (function(self) { -// https://bugs.chromium.org/p/project-zero/issues/detail?id=1225&desc=6#c10 -if ( !self.vAPI || self.vAPI.uBO !== true ) { - self.vAPI = { uBO: true }; -} - -var vAPI = self.vAPI; var chrome = self.chrome; /******************************************************************************/ @@ -67,12 +61,6 @@ vAPI.download = function(details) { /******************************************************************************/ -vAPI.insertHTML = function(node, html) { - node.innerHTML = html; -}; - -/******************************************************************************/ - vAPI.getURL = chrome.runtime.getURL; /******************************************************************************/ @@ -83,8 +71,23 @@ setScriptDirection(vAPI.i18n('@@ui_locale')); /******************************************************************************/ +// https://github.com/gorhill/uBlock/issues/3057 +// - webNavigation.onCreatedNavigationTarget become broken on Firefox when we +// try to make the popup panel close itself using the original +// `window.open('', '_self').close()`. + vAPI.closePopup = function() { - window.open('','_self').close(); + if ( + self.browser instanceof Object && + typeof self.browser.runtime.getBrowserInfo === 'function' + ) { + 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(); }; /******************************************************************************/ @@ -94,11 +97,39 @@ vAPI.closePopup = function() { // This storage is optional, but it is nice to have, for a more polished user // experience. -// This can throw in some contexts (like in devtool). -try { - vAPI.localStorage = window.localStorage; -} catch (ex) { -} +// 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) { + } + } +}; /******************************************************************************/ diff --git a/platform/chromium/vapi-usercss.js b/platform/chromium/vapi-usercss.js new file mode 100644 index 0000000000000..df050cc97e32c --- /dev/null +++ b/platform/chromium/vapi-usercss.js @@ -0,0 +1,546 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2017 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'; + +// For content pages + +// Abort execution if our global vAPI object does not exist. +// https://github.com/chrisaljoudi/uBlock/issues/456 +// https://github.com/gorhill/uBlock/issues/2029 + +if ( typeof vAPI === 'object' ) { // >>>>>>>> start of HUGE-IF-BLOCK + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.userStylesheet = { + style: null, + styleFixCount: 0, + css: new Map(), + disabled: false, + apply: function() { + }, + inject: function() { + this.style = document.createElement('style'); + this.style.disabled = this.disabled; + var parent = document.head || document.documentElement; + if ( parent === null ) { return; } + parent.appendChild(this.style); + var observer = new MutationObserver(function() { + if ( this.style === null ) { return; } + if ( this.style.sheet !== null ) { return; } + this.styleFixCount += 1; + if ( this.styleFixCount < 32 ) { + parent.appendChild(this.style); + } else { + observer.disconnect(); + } + }.bind(this)); + observer.observe(parent, { childList: true }); + }, + add: function(cssText) { + if ( cssText === '' || this.css.has(cssText) ) { return; } + if ( this.style === null ) { this.inject(); } + var sheet = this.style.sheet; + if ( !sheet ) { return; } + var i = sheet.cssRules.length; + sheet.insertRule(cssText, i); + this.css.set(cssText, sheet.cssRules[i]); + }, + remove: function(cssText) { + if ( cssText === '' ) { return; } + var cssRule = this.css.get(cssText); + if ( cssRule === undefined ) { return; } + this.css.delete(cssText); + if ( this.style === null ) { return; } + var sheet = this.style.sheet; + if ( !sheet ) { return; } + var rules = sheet.cssRules, + i = rules.length; + while ( i-- ) { + if ( rules[i] !== cssRule ) { continue; } + sheet.deleteRule(i); + break; + } + if ( rules.length !== 0 ) { return; } + var style = this.style; + this.style = null; + var parent = style.parentNode; + if ( parent !== null ) { + parent.removeChild(style); + } + }, + toggle: function(state) { + if ( state === undefined ) { state = this.disabled; } + if ( state !== this.disabled ) { return; } + this.disabled = !state; + if ( this.style !== null ) { + this.style.disabled = this.disabled; + } + } +}; + +/******************************************************************************/ + +vAPI.DOMFilterer = function() { + this.commitTimer = new vAPI.SafeAnimationFrame(this.commitNow.bind(this)); + this.domIsReady = document.readyState !== 'loading'; + this.listeners = []; + this.excludedNodeSet = new WeakSet(); + this.addedNodes = new Set(); + this.removedNodes = false; + + this.specificSimpleHide = new Set(); + this.specificSimpleHideAggregated = undefined; + this.addedSpecificSimpleHide = []; + this.specificComplexHide = new Set(); + this.specificComplexHideAggregated = undefined; + this.addedSpecificComplexHide = []; + this.specificOthers = []; + this.genericSimpleHide = new Set(); + this.genericComplexHide = new Set(); + + this.hideNodeExpando = undefined; + this.hideNodeBatchProcessTimer = undefined; + this.hiddenNodeObserver = undefined; + this.hiddenNodesetToProcess = new Set(); + this.hiddenNodeset = new WeakSet(); + + if ( vAPI.domWatcher instanceof Object ) { + vAPI.domWatcher.addListener(this); + } +}; + +vAPI.DOMFilterer.prototype = { + // https://www.w3.org/community/webed/wiki/CSS/Selectors#Combinators + reCSSCombinators: /[ >+~]/, + + commitNow: function() { + this.commitTimer.clear(); + + if ( this.domIsReady !== true || vAPI.userStylesheet.disabled ) { + return; + } + + var nodes, node; + + // Filterset changed. + + if ( this.addedSpecificSimpleHide.length !== 0 ) { + //console.time('specific simple filterset changed'); + //console.log('added %d specific simple selectors', this.addedSpecificSimpleHide.length); + nodes = document.querySelectorAll(this.addedSpecificSimpleHide.join(',')); + for ( node of nodes ) { + this.hideNode(node); + } + this.addedSpecificSimpleHide = []; + this.specificSimpleHideAggregated = undefined; + //console.timeEnd('specific simple filterset changed'); + } + + if ( this.addedSpecificComplexHide.length !== 0 ) { + //console.time('specific complex filterset changed'); + //console.log('added %d specific complex selectors', this.addedSpecificComplexHide.length); + nodes = document.querySelectorAll(this.addedSpecificComplexHide.join(',')); + for ( node of nodes ) { + this.hideNode(node); + } + this.addedSpecificComplexHide = []; + this.specificComplexHideAggregated = undefined; + //console.timeEnd('specific complex filterset changed'); + } + + // DOM layout changed. + + var domNodesAdded = this.addedNodes.size !== 0, + domLayoutChanged = domNodesAdded || this.removedNodes; + + if ( domNodesAdded === false || domLayoutChanged === false ) { + return; + } + + //console.log('%d nodes added', this.addedNodes.size); + + if ( this.specificSimpleHide.size !== 0 && domNodesAdded ) { + //console.time('dom layout changed/specific simple selectors'); + if ( this.specificSimpleHideAggregated === undefined ) { + this.specificSimpleHideAggregated = + Array.from(this.specificSimpleHide).join(',\n'); + } + for ( node of this.addedNodes ) { + if ( node[vAPI.matchesProp](this.specificSimpleHideAggregated) ) { + this.hideNode(node); + } + nodes = node.querySelectorAll(this.specificSimpleHideAggregated); + for ( node of nodes ) { + this.hideNode(node); + } + } + //console.timeEnd('dom layout changed/specific simple selectors'); + } + + if ( this.specificComplexHide.size !== 0 && domLayoutChanged ) { + //console.time('dom layout changed/specific complex selectors'); + if ( this.specificComplexHideAggregated === undefined ) { + this.specificComplexHideAggregated = + Array.from(this.specificComplexHide).join(',\n'); + } + nodes = document.querySelectorAll(this.specificComplexHideAggregated); + for ( node of nodes ) { + this.hideNode(node); + } + //console.timeEnd('dom layout changed/specific complex selectors'); + } + + this.addedNodes.clear(); + this.removedNodes = false; + }, + + commit: function(now) { + if ( now ) { + this.commitTimer.clear(); + this.commitNow(); + } else { + this.commitTimer.start(); + } + }, + + addCSSRule: function(selectors, declarations, details) { + if ( selectors === undefined ) { return; } + + if ( details === undefined ) { details = {}; } + + var selectorsStr = Array.isArray(selectors) ? + selectors.join(',\n') : + selectors; + if ( selectorsStr.length === 0 ) { return; } + + vAPI.userStylesheet.add(selectorsStr + '\n{' + declarations + '}'); + this.commit(); + if ( this.hasListeners() ) { + this.triggerListeners({ + declarative: [ [ selectorsStr, declarations ] ] + }); + } + + if ( declarations !== 'display:none!important;' ) { + this.specificOthers.push({ + selectors: selectorsStr, + declarations: declarations + }); + return; + } + + // Do not strongly enforce internal CSS rules. + if ( details.internal ) { return; } + + var isGeneric= details.lazy === true, + isSimple = details.type === 'simple', + isComplex = details.type === 'complex', + selector; + + if ( isGeneric ) { + if ( isSimple ) { + this.genericSimpleHide.add(selectorsStr); + return; + } + if ( isComplex ) { + this.genericComplexHide.add(selectorsStr); + return; + } + } + + var selectorsArr = Array.isArray(selectors) ? + selectors : + selectors.split(',\n'); + + if ( isGeneric ) { + for ( selector of selectorsArr ) { + if ( this.reCSSCombinators.test(selector) ) { + this.genericComplexHide.add(selector); + } else { + this.genericSimpleHide.add(selector); + } + } + return; + } + + // Specific cosmetic filters. + for ( selector of selectorsArr ) { + if ( + isComplex || + isSimple === false && this.reCSSCombinators.test(selector) + ) { + if ( this.specificComplexHide.has(selector) === false ) { + this.specificComplexHide.add(selector); + this.addedSpecificComplexHide.push(selector); + } + } else if ( this.specificSimpleHide.has(selector) === false ) { + this.specificSimpleHide.add(selector); + this.addedSpecificSimpleHide.push(selector); + } + } + }, + + onDOMCreated: function() { + this.domIsReady = true; + this.addedNodes.clear(); + this.removedNodes = false; + this.commit(); + }, + + onDOMChanged: function(addedNodes, removedNodes) { + for ( var node of addedNodes ) { + this.addedNodes.add(node); + } + this.removedNodes = this.removedNodes || removedNodes; + this.commit(); + }, + + addListener: function(listener) { + if ( this.listeners.indexOf(listener) !== -1 ) { return; } + this.listeners.push(listener); + }, + + removeListener: function(listener) { + var pos = this.listeners.indexOf(listener); + if ( pos === -1 ) { return; } + this.listeners.splice(pos, 1); + }, + + hasListeners: function() { + return this.listeners.length !== 0; + }, + + triggerListeners: function(changes) { + var i = this.listeners.length; + while ( i-- ) { + this.listeners[i].onFiltersetChanged(changes); + } + }, + + // https://jsperf.com/clientheight-and-clientwidth-vs-getcomputedstyle + // Avoid getComputedStyle(), detecting whether a node is visible can be + // achieved with clientWidth/clientHeight. + // https://gist.github.com/paulirish/5d52fb081b3570c81e3a + // Do not interleave read-from/write-to the DOM. Write-to DOM + // operations would cause the first read-from to be expensive, and + // interleaving means that potentially all single read-from operation + // would be expensive rather than just the 1st one. + // Benchmarking toggling off/on cosmetic filtering confirms quite an + // improvement when: + // - batching as much as possible handling of all nodes; + // - avoiding to interleave read-from/write-to operations. + // However, toggling off/on cosmetic filtering repeatedly is not + // a real use case, but this shows this will help performance + // on sites which try to use inline styles to bypass blockers. + hideNodeBatchProcess: function() { + this.hideNodeBatchProcessTimer.clear(); + var expando = this.hideNodeExpando; + for ( var node of this.hiddenNodesetToProcess ) { + if ( + this.hiddenNodeset.has(node) === false || + node[expando] === undefined || + node.clientHeight === 0 || node.clientWidth === 0 + ) { + continue; + } + var attr = node.getAttribute('style'); + if ( attr === null ) { + attr = ''; + } else if ( + attr.length !== 0 && + attr.charCodeAt(attr.length - 1) !== 0x3B /* ';' */ + ) { + attr += ';'; + } + node.setAttribute('style', attr + 'display:none!important;'); + } + this.hiddenNodesetToProcess.clear(); + }, + + hideNodeObserverHandler: function(mutations) { + if ( vAPI.userStylesheet.disabled ) { return; } + var i = mutations.length, + stagedNodes = this.hiddenNodesetToProcess; + while ( i-- ) { + stagedNodes.add(mutations[i].target); + } + this.hideNodeBatchProcessTimer.start(); + }, + + hiddenNodeObserverOptions: { + attributes: true, + attributeFilter: [ 'style' ] + }, + + hideNodeInit: function() { + this.hideNodeExpando = vAPI.randomToken(); + this.hideNodeBatchProcessTimer = + new vAPI.SafeAnimationFrame(this.hideNodeBatchProcess.bind(this)); + this.hiddenNodeObserver = + new MutationObserver(this.hideNodeObserverHandler.bind(this)); + if ( this.hideNodeStyleSheetInjected === false ) { + this.hideNodeStyleSheetInjected = true; + vAPI.userStylesheet.add( + '[' + this.hideNodeAttr + ']\n{display:none!important;}' + ); + } + }, + + excludeNode: function(node) { + this.excludedNodeSet.add(node); + this.unhideNode(node); + }, + + unexcludeNode: function(node) { + this.excludedNodeSet.delete(node); + }, + + hideNode: function(node) { + if ( this.excludedNodeSet.has(node) ) { return; } + if ( this.hideNodeAttr === undefined ) { return; } + if ( this.hiddenNodeset.has(node) ) { return; } + node.hidden = true; + this.hiddenNodeset.add(node); + if ( this.hideNodeExpando === undefined ) { this.hideNodeInit(); } + node.setAttribute(this.hideNodeAttr, ''); + if ( node[this.hideNodeExpando] === undefined ) { + node[this.hideNodeExpando] = + node.hasAttribute('style') && + (node.getAttribute('style') || ''); + } + this.hiddenNodesetToProcess.add(node); + this.hideNodeBatchProcessTimer.start(); + this.hiddenNodeObserver.observe(node, this.hiddenNodeObserverOptions); + }, + + unhideNode: function(node) { + if ( this.hiddenNodeset.has(node) === false ) { return; } + node.hidden = false; + node.removeAttribute(this.hideNodeAttr); + this.hiddenNodesetToProcess.delete(node); + if ( this.hideNodeExpando === undefined ) { return; } + var attr = node[this.hideNodeExpando]; + if ( attr === false ) { + node.removeAttribute('style'); + } else if ( typeof attr === 'string' ) { + node.setAttribute('style', attr); + } + node[this.hideNodeExpando] = undefined; + this.hiddenNodeset.delete(node); + }, + + showNode: function(node) { + node.hidden = false; + var attr = node[this.hideNodeExpando]; + if ( attr === false ) { + node.removeAttribute('style'); + } else if ( typeof attr === 'string' ) { + node.setAttribute('style', attr); + } + }, + + unshowNode: function(node) { + node.hidden = true; + this.hiddenNodesetToProcess.add(node); + }, + + toggle: function(state, callback) { + vAPI.userStylesheet.toggle(state); + var disabled = vAPI.userStylesheet.disabled, + nodes = document.querySelectorAll('[' + this.hideNodeAttr + ']'); + for ( var node of nodes ) { + if ( disabled ) { + this.showNode(node); + } else { + this.unshowNode(node); + } + } + if ( disabled === false && this.hideNodeExpando !== undefined ) { + this.hideNodeBatchProcessTimer.start(); + } + if ( typeof callback === 'function' ) { + callback(); + } + }, + + getAllSelectors_: function(all) { + var out = { + declarative: [] + }; + if ( this.specificSimpleHide.size !== 0 ) { + out.declarative.push([ + Array.from(this.specificSimpleHide).join(',\n'), + 'display:none!important;' + ]); + } + if ( this.specificComplexHide.size !== 0 ) { + out.declarative.push([ + Array.from(this.specificComplexHide).join(',\n'), + 'display:none!important;' + ]); + } + if ( this.genericSimpleHide.size !== 0 ) { + out.declarative.push([ + Array.from(this.genericSimpleHide).join(',\n'), + 'display:none!important;' + ]); + } + if ( this.genericComplexHide.size !== 0 ) { + out.declarative.push([ + Array.from(this.genericComplexHide).join(',\n'), + 'display:none!important;' + ]); + } + if ( all ) { + out.declarative.push([ + '[' + this.hideNodeAttr + ']', + 'display:none!important;' + ]); + } + for ( var entry of this.specificOthers ) { + out.declarative.push([ entry.selectors, entry.declarations ]); + } + return out; + }, + + getFilteredElementCount: function() { + var details = this.getAllSelectors_(true); + if ( Array.isArray(details.declarative) === false ) { return 0; } + var selectors = details.declarative.reduce(function(acc, entry) { + acc.push(entry[0]); + return acc; + }, []); + if ( selectors.length === 0 ) { return 0; } + return document.querySelectorAll(selectors.join(',\n')).length; + }, + + getAllSelectors: function() { + return this.getAllSelectors_(false); + } +}; + +/******************************************************************************/ +/******************************************************************************/ + +} // <<<<<<<< end of HUGE-IF-BLOCK diff --git a/platform/chromium/vapi-webrequest.js b/platform/chromium/vapi-webrequest.js new file mode 100644 index 0000000000000..49a87e3e24411 --- /dev/null +++ b/platform/chromium/vapi-webrequest.js @@ -0,0 +1,334 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2017 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +// For background page + +'use strict'; + +/******************************************************************************/ + +vAPI.net = { + onBeforeRequest: {}, + onBeforeMaybeSpuriousCSPReport: {}, + onHeadersReceived: {}, + nativeCSPReportFiltering: false +}; + +vAPI.net.registerListeners = function() { + + var µb = µBlock, + µburi = µb.URI, + wrApi = chrome.webRequest; + + // https://bugs.chromium.org/p/chromium/issues/detail?id=410382 + // Between Chromium 38-48, plug-ins' network requests were reported as + // type "other" instead of "object". + var is_v38_48 = /\bChrom[a-z]+\/(?:3[89]|4[0-8])\.[\d.]+\b/.test(navigator.userAgent); + + // legacy Chromium understands only these network request types. + var validTypes = { + main_frame: true, + sub_frame: true, + stylesheet: true, + script: true, + image: true, + object: true, + xmlhttprequest: true, + other: true + }; + // modern Chromium/WebExtensions: more types available. + if ( wrApi.ResourceType ) { + (function() { + for ( var typeKey in wrApi.ResourceType ) { + if ( wrApi.ResourceType.hasOwnProperty(typeKey) ) { + validTypes[wrApi.ResourceType[typeKey]] = true; + } + } + })(); + } + + var 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'] + ]); + + var denormalizeTypes = function(aa) { + if ( aa.length === 0 ) { + return Object.keys(validTypes); + } + var out = []; + var i = aa.length, + type, + needOther = true; + while ( i-- ) { + type = aa[i]; + if ( validTypes[type] ) { + out.push(type); + } + if ( type === 'other' ) { + needOther = false; + } + } + if ( needOther ) { + out.push('other'); + } + return out; + }; + + var headerValue = function(headers, name) { + var i = headers.length; + while ( i-- ) { + if ( headers[i].name.toLowerCase() === name ) { + return headers[i].value.trim(); + } + } + return ''; + }; + + var normalizeRequestDetails = function(details) { + details.tabId = details.tabId.toString(); + + var type = details.type; + + // https://github.com/gorhill/uBlock/issues/1493 + // Chromium 49+/WebExtensions support a new request type: `ping`, + // which is fired as a result of using `navigator.sendBeacon`. + if ( type === 'ping' ) { + details.type = 'beacon'; + return; + } + + 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. + var path = µburi.pathFromURI(details.url), + 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://github.com/chrisaljoudi/uBlock/issues/862 + // If no transposition possible, transpose to `object` as per + // Chromium bug 410382 + // https://code.google.com/p/chromium/issues/detail?id=410382 + if ( is_v38_48 ) { + details.type = 'object'; + } + }; + + // https://bugs.chromium.org/p/chromium/issues/detail?id=129353 + // https://github.com/gorhill/uBlock/issues/1497 + // Expose websocket-based network requests to uBO's filtering engine, + // logger, etc. + // Counterpart of following block of code is found in "vapi-client.js" -- + // search for "https://github.com/gorhill/uBlock/issues/1497". + // + // Once uBO 1.11.1 and uBO-Extra 2.12 are widespread, the image-based + // handling code can be removed. + var onBeforeWebsocketRequest = function(details) { + if ( (details.type !== 'image') && + (details.method !== 'HEAD' || details.type !== 'xmlhttprequest') + ) { + return; + } + var requestURL = details.url, + matches = /[?&]u(?:rl)?=([^&]+)/.exec(requestURL); + if ( matches === null ) { return; } + details.type = 'websocket'; + details.url = decodeURIComponent(matches[1]); + var r = onBeforeRequestClient(details); + if ( r && r.cancel ) { return r; } + // Redirect to the provided URL, or a 1x1 data: URI if none provided. + matches = /[?&]r=([^&]+)/.exec(requestURL); + return { + redirectUrl: matches !== null ? + decodeURIComponent(matches[1]) : + 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' + }; + }; + + var onBeforeRequestClient = this.onBeforeRequest.callback; + var onBeforeRequest = validTypes.websocket + // modern Chromium/WebExtensions: type 'websocket' is supported + ? function(details) { + normalizeRequestDetails(details); + return onBeforeRequestClient(details); + } + // legacy Chromium + : function(details) { + // https://github.com/gorhill/uBlock/issues/1497 + if ( details.url.endsWith('ubofix=f41665f3028c7fd10eecf573336216d3') ) { + var r = onBeforeWebsocketRequest(details); + if ( r !== undefined ) { return r; } + } + normalizeRequestDetails(details); + return onBeforeRequestClient(details); + }; + + // This is needed for Chromium 49-55. + var onBeforeSendHeaders = validTypes.csp_report + // modern Chromium/WebExtensions: type 'csp_report' is supported + ? null + // legacy Chromium + : function(details) { + if ( details.type !== 'ping' || details.method !== 'POST' ) { return; } + var type = headerValue(details.requestHeaders, 'content-type'); + if ( type === '' ) { return; } + if ( type.endsWith('/csp-report') ) { + details.type = 'csp_report'; + return onBeforeRequestClient(details); + } + }; + + var onHeadersReceivedClient = this.onHeadersReceived.callback, + onHeadersReceivedClientTypes = this.onHeadersReceived.types.slice(0), + onHeadersReceivedTypes = denormalizeTypes(onHeadersReceivedClientTypes); + var onHeadersReceived = validTypes.font + // modern Chromium/WebExtensions: type 'font' is supported + ? function(details) { + normalizeRequestDetails(details); + if ( + onHeadersReceivedClientTypes.length !== 0 && + onHeadersReceivedClientTypes.indexOf(details.type) === -1 + ) { + return; + } + return onHeadersReceivedClient(details); + } + // legacy Chromium + : function(details) { + normalizeRequestDetails(details); + // Hack to work around Chromium API limitations, where requests of + // type `font` are returned as `other`. For example, our normalization + // fail at transposing `other` into `font` for URLs which are outside + // what is expected. At least when headers are received we can check + // for content type `font/*`. Blocking at onHeadersReceived time is + // less worse than not blocking at all. Also, due to Chromium bug, + // `other` always becomes `object` when it can't be normalized into + // something else. Test case for "unfriendly" font URLs: + // https://www.google.com/fonts + if ( details.type === 'font' ) { + var r = onBeforeRequestClient(details); + if ( typeof r === 'object' && r.cancel === true ) { + return { cancel: true }; + } + } + if ( + onHeadersReceivedClientTypes.length !== 0 && + onHeadersReceivedClientTypes.indexOf(details.type) === -1 + ) { + return; + } + return onHeadersReceivedClient(details); + }; + + var urls, types; + + if ( onBeforeRequest ) { + urls = this.onBeforeRequest.urls || ['']; + types = this.onBeforeRequest.types || undefined; + if ( + (validTypes.websocket) && + (types === undefined || types.indexOf('websocket') !== -1) && + (urls.indexOf('') === -1) + ) { + if ( urls.indexOf('ws://*/*') === -1 ) { + urls.push('ws://*/*'); + } + if ( urls.indexOf('wss://*/*') === -1 ) { + urls.push('wss://*/*'); + } + } + wrApi.onBeforeRequest.addListener( + onBeforeRequest, + { urls: urls, types: types }, + this.onBeforeRequest.extra + ); + } + + // https://github.com/gorhill/uBlock/issues/3140 + this.nativeCSPReportFiltering = validTypes.csp_report; + if ( + this.nativeCSPReportFiltering && + typeof this.onBeforeMaybeSpuriousCSPReport.callback === 'function' + ) { + wrApi.onBeforeRequest.addListener( + this.onBeforeMaybeSpuriousCSPReport.callback, + { + urls: [ 'http://*/*', 'https://*/*' ], + types: [ 'csp_report' ] + }, + [ 'blocking', 'requestBody' ] + ); + } + + // Chromium 48 and lower does not support `ping` type. + // Chromium 56 and higher does support `csp_report` stype. + if ( onBeforeSendHeaders ) { + wrApi.onBeforeSendHeaders.addListener( + onBeforeSendHeaders, + { + 'urls': [ '' ], + 'types': [ 'ping' ] + }, + [ 'blocking', 'requestHeaders' ] + ); + } + + if ( onHeadersReceived ) { + urls = this.onHeadersReceived.urls || ['']; + types = onHeadersReceivedTypes; + wrApi.onHeadersReceived.addListener( + onHeadersReceived, + { urls: urls, types: types }, + this.onHeadersReceived.extra + ); + } +}; + +/******************************************************************************/ diff --git a/platform/chromium/vapi.js b/platform/chromium/vapi.js new file mode 100644 index 0000000000000..f622940412751 --- /dev/null +++ b/platform/chromium/vapi.js @@ -0,0 +1,56 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2017 The uBlock Origin authors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +'use strict'; + +/* global HTMLDocument, XMLDocument */ + +// For background page, auxiliary pages, and content scripts. + +/******************************************************************************/ + +// https://bugzilla.mozilla.org/show_bug.cgi?id=1408996#c9 +var vAPI = window.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) +) { + vAPI = window.vAPI = vAPI instanceof Object && vAPI.uBO === true + ? vAPI + : { uBO: true }; +} + +/******************************************************************************/ diff --git a/platform/edge/cloud-ui.js b/platform/edge/cloud-ui.js new file mode 100644 index 0000000000000..4b1a0ba885aa0 --- /dev/null +++ b/platform/edge/cloud-ui.js @@ -0,0 +1,243 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2015-2017 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* global uDom */ + +/******************************************************************************/ + +(function() { + +'use strict'; + +/******************************************************************************/ + +self.cloud = { + options: {}, + datakey: '', + data: undefined, + onPush: null, + onPull: null +}; + +/******************************************************************************/ + +var widget = uDom.nodeFromId('cloudWidget'); +if ( widget === null ) { + return; +} + +self.cloud.datakey = widget.getAttribute('data-cloud-entry') || ''; +if ( self.cloud.datakey === '' ) { + return; +} + +var messaging = vAPI.messaging; + +/******************************************************************************/ + +var onCloudDataReceived = function(entry) { + // Edge syncs data in the background, so this callback is very fast. It's + // often faster than initialisation, meaning there's a race condition + // where the UI is not always ready for the assumptions this function makes. + + function waitForWidgetToBeReady() { + if ( uDom.nodeFromId('cloudPull') ) { + updateWidget(); + } else { + window.setTimeout(waitForWidgetToBeReady, 100); + } + } + + function updateWidget() { + if ( entry instanceof Object === false ) { + return; + } + + self.cloud.data = entry.data; + + uDom.nodeFromId('cloudPull').removeAttribute('disabled'); + uDom.nodeFromId('cloudPullAndMerge').removeAttribute('disabled'); + + var timeOptions = { + weekday: 'short', + year: 'numeric', + month: 'short', + day: 'numeric', + hour: 'numeric', + minute: 'numeric', + second: 'numeric', + timeZoneName: 'short' + }; + + var time = new Date(entry.tstamp); + widget.querySelector('span').textContent = + entry.source + '\n' + + time.toLocaleString('fullwide', timeOptions); + } + + waitForWidgetToBeReady(); +}; + +/******************************************************************************/ + +var fetchCloudData = function() { + messaging.send( + 'cloudWidget', + { + what: 'cloudPull', + datakey: self.cloud.datakey + }, + onCloudDataReceived + ); +}; + +/******************************************************************************/ + +var pushData = function() { + if ( typeof self.cloud.onPush !== 'function' ) { + return; + } + messaging.send( + 'cloudWidget', + { + what: 'cloudPush', + datakey: self.cloud.datakey, + data: self.cloud.onPush() + }, + function(error) { + var failed = typeof error === 'string'; + document.getElementById('cloudPush') + .classList + .toggle('error', failed); + document.querySelector('#cloudError > span') + .textContent = failed ? error : ''; + fetchCloudData(); + } + ); +}; + +/******************************************************************************/ + +var pullData = function() { + if ( typeof self.cloud.onPull === 'function' ) { + self.cloud.onPull(self.cloud.data, false); + } +}; + +/******************************************************************************/ + +var pullAndMergeData = function() { + if ( typeof self.cloud.onPull === 'function' ) { + self.cloud.onPull(self.cloud.data, true); + } +}; + +/******************************************************************************/ + +var openOptions = function() { + var input = uDom.nodeFromId('cloudDeviceName'); + input.value = self.cloud.options.deviceName; + input.setAttribute('placeholder', self.cloud.options.defaultDeviceName); + uDom.nodeFromId('cloudOptions').classList.add('show'); +}; + +/******************************************************************************/ + +var closeOptions = function(ev) { + var root = uDom.nodeFromId('cloudOptions'); + if ( ev.target !== root ) { + return; + } + root.classList.remove('show'); +}; + +/******************************************************************************/ + +var submitOptions = function() { + var onOptions = function(options) { + if ( options instanceof Object === false ) { + return; + } + self.cloud.options = options; + }; + + messaging.send( + 'cloudWidget', + { + what: 'cloudSetOptions', + options: { + deviceName: uDom.nodeFromId('cloudDeviceName').value + } + }, + onOptions + ); + uDom.nodeFromId('cloudOptions').classList.remove('show'); +}; + +/******************************************************************************/ + +var onInitialize = function(options) { + if ( typeof options !== 'object' || options === null ) { + return; + } + + if ( !options.enabled ) { + return; + } + self.cloud.options = options; + + fetchCloudData(); + + var xhr = new XMLHttpRequest(); + xhr.open('GET', 'cloud-ui.html', true); + xhr.overrideMimeType('text/html;charset=utf-8'); + xhr.responseType = 'text'; + xhr.onload = function() { + this.onload = null; + var parser = new DOMParser(), + parsed = parser.parseFromString(this.responseText, 'text/html'), + fromParent = parsed.body; + while ( fromParent.firstElementChild !== null ) { + widget.appendChild( + document.adoptNode(fromParent.firstElementChild) + ); + } + + vAPI.i18n.render(widget); + widget.classList.remove('hide'); + + uDom('#cloudPush').on('click', pushData); + uDom('#cloudPull').on('click', pullData); + uDom('#cloudPullAndMerge').on('click', pullAndMergeData); + uDom('#cloudCog').on('click', openOptions); + uDom('#cloudOptions').on('click', closeOptions); + uDom('#cloudOptionsSubmit').on('click', submitOptions); + }; + xhr.send(); +}; + +messaging.send('cloudWidget', { what: 'cloudGetOptions' }, onInitialize); + +/******************************************************************************/ + +// https://www.youtube.com/watch?v=aQFp67VoiDA + +})(); diff --git a/platform/edge/is-webrtc-supported.html b/platform/edge/is-webrtc-supported.html index 15c155583b91e..d30b674b1b38d 100644 --- a/platform/edge/is-webrtc-supported.html +++ b/platform/edge/is-webrtc-supported.html @@ -1,6 +1,7 @@ + diff --git a/platform/edge/manifest.json b/platform/edge/manifest.json index 2ac2082008321..007871d248321 100644 --- a/platform/edge/manifest.json +++ b/platform/edge/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "uBlock Origin", - "version": "1.13.8", + "version": "1.14.22", "commands": { "launch-element-zapper": { @@ -40,7 +40,7 @@ "content_scripts": [ { "matches": ["http://*/*", "https://*/*"], - "js": ["js/vapi-client.js", "js/contentscript.js"], + "js": ["js/vapi.js", "js/vapi-client.js", "js/contentscript.js"], "run_at": "document_start", "all_frames": true }, diff --git a/platform/edge/options_ui.html b/platform/edge/options_ui.html index d94c001efb4b5..9b1d0e6d77bfa 100644 --- a/platform/edge/options_ui.html +++ b/platform/edge/options_ui.html @@ -1,6 +1,8 @@ + + diff --git a/platform/edge/vapi-background.js b/platform/edge/vapi-background.js index 5d3e0f71d1acd..eccfdf479d79e 100644 --- a/platform/edge/vapi-background.js +++ b/platform/edge/vapi-background.js @@ -27,6 +27,7 @@ (function() { +/******************************************************************************/ /******************************************************************************/ var vAPI = self.vAPI = self.vAPI || {}; @@ -39,16 +40,35 @@ vAPI.edgeVersion = (function(){ var matches = /\bEdge\/(\d+\.\d+)\b/.exec(navigator.userAgent); return matches !== null ? parseInt(matches[1], 10) : NaN; })(); + vAPI.cantWebsocket = browser.webRequest.ResourceType instanceof Object === false || browser.webRequest.ResourceType.WEBSOCKET !== 'websocket'; +vAPI.webextFlavor = ''; +if ( + self.browser instanceof Object && + typeof self.browser.runtime.getBrowserInfo === 'function' +) { + self.browser.runtime.getBrowserInfo().then(function(info) { + vAPI.webextFlavor = info.vendor + '-' + info.name + '-' + info.version; + }); +} + +// https://issues.adblockplus.org/ticket/5695 +// - Good idea, adopted: cleaner way to detect user-stylesheet support. +vAPI.supportsUserStylesheets = + browser.extensionTypes instanceof Object && + browser.extensionTypes.CSSOrigin instanceof Object && + 'USER' in browser.extensionTypes.CSSOrigin; +vAPI.insertCSS = browser.tabs.insertCSS; + var noopFunc = function(){}; /******************************************************************************/ vAPI.app = { - name: manifest.name, + name: manifest.name.replace(' dev build', ''), version: manifest.version }; @@ -451,14 +471,19 @@ vAPI.tabs.registerListeners = function() { }; var onCreatedNavigationTarget = function(details) { - //console.debug('onCreatedNavigationTarget: popup candidate tab id %d = "%s"', details.tabId, details.url); + if ( typeof details.url !== 'string' ) { + details.url = ''; + } if ( reGoodForWebRequestAPI.test(details.url) === false ) { details.frameId = 0; details.url = sanitizeURL(details.url); onNavigationClient(details); } if ( typeof vAPI.tabs.onPopupCreated === 'function' ) { - vAPI.tabs.onPopupCreated(details.tabId.toString(), details.sourceTabId.toString()); + vAPI.tabs.onPopupCreated( + details.tabId.toString(), + details.sourceTabId.toString() + ); } }; @@ -477,10 +502,17 @@ vAPI.tabs.registerListeners = function() { }; var onActivated = function(details) { - vAPI.contextMenu.onMustUpdate(details.tabId); + if ( vAPI.contextMenu instanceof Object ) { + vAPI.contextMenu.onMustUpdate(details.tabId); + } }; + // https://github.com/gorhill/uBlock/issues/3073 + // - Fall back to `tab.url` when `changeInfo.url` is not set. var onUpdated = function(tabId, changeInfo, tab) { + if ( typeof changeInfo.url !== 'string' ) { + changeInfo.url = tab && tab.url; + } if ( changeInfo.url ) { changeInfo.url = sanitizeURL(changeInfo.url); } @@ -620,12 +652,19 @@ vAPI.tabs.open = function(details) { return; } + // https://github.com/gorhill/uBlock/issues/3053#issuecomment-332276818 + // - Do not try to lookup uBO's own pages with FF 55 or less. + if ( /^Mozilla-Firefox-5[2-5]\./.test(vAPI.webextFlavor) ) { + wrapper(); + return; + } + // https://developer.chrome.com/extensions/tabs#method-query // "Note that fragment identifiers are not matched." // It's a lie, fragment identifiers ARE matched. So we need to remove the // fragment. - var pos = targetURL.indexOf('#'); - var targetURLWithoutHash = pos === -1 ? targetURL : targetURL.slice(0, pos); + var pos = targetURL.indexOf('#'), + targetURLWithoutHash = pos === -1 ? targetURL : targetURL.slice(0, pos); browser.tabs.query({ url: targetURLWithoutHash }, function(tabs) { if ( browser.runtime.lastError ) { /* noop */ } @@ -760,38 +799,84 @@ vAPI.tabs.injectScript = function(tabId, details, callback) { // Since we may be called asynchronously, the tab id may not exist // anymore, so this ensures it does still exist. -vAPI.setIcon = function(tabId, iconStatus, badge) { - tabId = toEdgeTabId(tabId); - if ( tabId === 0 ) { - return; - } +// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/browserAction#Browser_compatibility +// Firefox for Android does no support browser.browserAction.setIcon(). - var onIconReady = function() { - if ( vAPI.lastError() ) { - return; +vAPI.setIcon = (function() { + var browserAction = browser.browserAction, + titleTemplate = browser.runtime.getManifest().name + ' ({badge})'; + var iconPaths = [ + { + '19': 'img/browsericons/icon19-off.png', + '38': 'img/browsericons/icon38-off.png' + }, + { + '19': 'img/browsericons/icon19.png', + '38': 'img/browsericons/icon38.png' } - browser.browserAction.setBadgeText({ tabId: tabId, text: badge }); - if ( badge !== '' ) { - browser.browserAction.setBadgeBackgroundColor({ - tabId: tabId, - color: '#666' + ]; + + var onTabReady = function(tab, status, badge) { + if ( vAPI.lastError() || !tab ) { return; } + + if ( browserAction.setIcon !== undefined ) { + // Somewhere (quite possibly in Edge's engine itself) the tabId property + // is being assigned to the object passed to path. If we pass by reference + // then it gets passed in future calls, and then Edge complains about the + // unsupported tabId property. Cloning solves this issue. + browserAction.setIcon({ + tabId: tab.id, + path: Object.assign({}, iconPaths[status === 'on' ? 1 : 0]) + }); + browserAction.setBadgeText({ + tabId: tab.id, + text: badge + }); + if ( badge !== '' ) { + browserAction.setBadgeBackgroundColor({ + tabId: tab.id, + color: '#666' + }); + } + } + + if ( browserAction.setTitle !== undefined ) { + browserAction.setTitle({ + tabId: tab.id, + title: titleTemplate.replace( + '{badge}', + status === 'on' ? (badge !== '' ? badge : '0') : 'off' + ) }); } }; - var iconPaths = iconStatus === 'on' ? - { '19': 'img/browsericons/icon19.png', '38': 'img/browsericons/icon38.png' } : - { '19': 'img/browsericons/icon19-off.png', '38': 'img/browsericons/icon38-off.png' }; + return function(tabId, iconStatus, badge) { + tabId = toEdgeTabId(tabId); + if ( tabId === 0 ) { return; } + + browser.tabs.get(tabId, function(tab) { + onTabReady(tab, iconStatus, badge); + }); - browser.browserAction.setIcon({ tabId: tabId, path: iconPaths }, onIconReady); - vAPI.contextMenu.onMustUpdate(tabId); -}; + if ( vAPI.contextMenu instanceof Object ) { + vAPI.contextMenu.onMustUpdate(tabId); + } + }; +})(); + +browser.browserAction.onClicked.addListener(function(tab) { + vAPI.tabs.open({ + select: true, + url: 'popup.html?tabId=' + tab.id + '&mobile=1' + }); +}); /******************************************************************************/ /******************************************************************************/ vAPI.messaging = { - ports: {}, + ports: new Map(), listeners: {}, defaultHandler: null, NOOPFUNC: noopFunc, @@ -807,171 +892,180 @@ vAPI.messaging.listen = function(listenerName, callback) { /******************************************************************************/ vAPI.messaging.onPortMessage = (function() { - var messaging = vAPI.messaging; - var toAuxPending = {}; + var messaging = vAPI.messaging, + supportsUserStylesheets = vAPI.supportsUserStylesheets; // Use a wrapper to avoid closure and to allow reuse. - var CallbackWrapper = function(port, request, timeout) { + var CallbackWrapper = function(port, request) { this.callback = this.proxy.bind(this); // bind once - this.init(port, request, timeout); + this.init(port, request); }; - CallbackWrapper.prototype.init = function(port, request, timeout) { - this.port = port; - this.request = request; - this.timerId = timeout !== undefined ? - vAPI.setTimeout(this.callback, timeout) : - null; - return this; - }; - - CallbackWrapper.prototype.proxy = function(response) { - if ( this.timerId !== null ) { - clearTimeout(this.timerId); - delete toAuxPending[this.timerId]; - this.timerId = null; - } - // https://github.com/chrisaljoudi/uBlock/issues/383 - if ( messaging.ports.hasOwnProperty(this.port.name) ) { - this.port.postMessage({ - auxProcessId: this.request.auxProcessId, - channelName: this.request.channelName, - msg: response !== undefined ? response : null - }); + CallbackWrapper.prototype = { + init: function(port, request) { + this.port = port; + this.request = request; + return this; + }, + proxy: function(response) { + // https://github.com/chrisaljoudi/uBlock/issues/383 + if ( messaging.ports.has(this.port.name) ) { + this.port.postMessage({ + auxProcessId: this.request.auxProcessId, + channelName: this.request.channelName, + msg: response !== undefined ? response : null + }); + } + // Mark for reuse + this.port = this.request = null; + callbackWrapperJunkyard.push(this); } - // Mark for reuse - this.port = this.request = null; - callbackWrapperJunkyard.push(this); }; var callbackWrapperJunkyard = []; - var callbackWrapperFactory = function(port, request, timeout) { + var callbackWrapperFactory = function(port, request) { var wrapper = callbackWrapperJunkyard.pop(); if ( wrapper ) { - return wrapper.init(port, request, timeout); + return wrapper.init(port, request); } - return new CallbackWrapper(port, request, timeout); + return new CallbackWrapper(port, request); }; - var toAux = function(details, portFrom) { - var port, portTo; - var edgeTabId = toEdgeTabId(details.toTabId); - - // TODO: This could be an issue with a lot of tabs: easy to address - // with a port name to tab id map. - for ( var portName in messaging.ports ) { - if ( messaging.ports.hasOwnProperty(portName) === false ) { - continue; - } - // When sending to an auxiliary process, the target is always the - // port associated with the root frame. - port = messaging.ports[portName]; - if ( port.sender && port.sender.tab.id === edgeTabId ) { - portTo = port; + var toFramework = function(request, port, callback) { + var sender = port && port.sender; + if ( !sender ) { return; } + var tabId = sender.tab && sender.tab.id; + if ( !tabId ) { return; } + var msg = request.msg, + toPort; + switch ( msg.what ) { + case 'connectionAccepted': + case 'connectionRefused': + toPort = messaging.ports.get(msg.fromToken); + if ( toPort !== undefined ) { + msg.tabId = tabId.toString(); + toPort.postMessage(request); + } else { + msg.what = 'connectionBroken'; + port.postMessage(request); + } + break; + case 'connectionRequested': + msg.tabId = '' + tabId.toString(); + for ( toPort of messaging.ports.values() ) { + toPort.postMessage(request); + } + break; + case 'connectionBroken': + case 'connectionCheck': + case 'connectionMessage': + toPort = messaging.ports.get( + port.name === msg.fromToken ? msg.toToken : msg.fromToken + ); + if ( toPort !== undefined ) { + msg.tabId = tabId.toString(); + toPort.postMessage(request); + } else { + msg.what = 'connectionBroken'; + port.postMessage(request); + } + break; + case 'userCSS': + var details = { + code: undefined, + frameId: sender.frameId, + matchAboutBlank: true + }; + if ( supportsUserStylesheets ) { + details.cssOrigin = 'user'; + } + if ( msg.add ) { + details.runAt = 'document_start'; + } + var cssText; + const cssPromises = []; + for ( cssText of msg.add ) { + details.code = cssText; + cssPromises.push(browser.tabs.insertCSS(tabId, details)); + } + for ( cssText of msg.remove ) { + details.code = cssText; + cssPromises.push(browser.tabs.removeCSS(tabId, details)); + } + if ( typeof callback === 'function' ) { + Promise.all(cssPromises).then(() => { + callback(); + }, null); + } break; - } - } - - var wrapper; - if ( details.auxProcessId !== undefined ) { - wrapper = callbackWrapperFactory(portFrom, details, 1023); - } - - // Destination not found: - if ( portTo === undefined ) { - if ( wrapper !== undefined ) { - wrapper.callback(); - } - return; - } - - // As per HTML5, timer id is always an integer, thus suitable to be - // used as a key, and which value is safe to use across process - // boundaries. - if ( wrapper !== undefined ) { - toAuxPending[wrapper.timerId] = wrapper; } - - portTo.postMessage({ - mainProcessId: wrapper && wrapper.timerId, - channelName: details.toChannel, - msg: details.msg - }); }; - var toAuxResponse = function(details) { - var mainProcessId = details.mainProcessId; - if ( mainProcessId === undefined ) { - return; - } - if ( toAuxPending.hasOwnProperty(mainProcessId) === false ) { - return; + // https://bugzilla.mozilla.org/show_bug.cgi?id=1392067 + // Workaround: manually remove ports matching removed tab. + browser.tabs.onRemoved.addListener(function(tabId) { + for ( var port of messaging.ports.values() ) { + var tab = port.sender && port.sender.tab; + if ( !tab ) { continue; } + if ( tab.id === tabId ) { + vAPI.messaging.onPortDisconnect(port); + } } - var wrapper = toAuxPending[mainProcessId]; - delete toAuxPending[mainProcessId]; - wrapper.callback(details.msg); - }; + }); return function(request, port) { - // Auxiliary process to auxiliary process - if ( request.toTabId !== undefined ) { - toAux(request, port); - return; + // prepare response + var callback = this.NOOPFUNC; + if ( request.auxProcessId !== undefined ) { + callback = callbackWrapperFactory(port, request).callback; } - // Auxiliary process to auxiliary process: response - if ( request.mainProcessId !== undefined ) { - toAuxResponse(request); + // Content process to main process: framework handler. + if ( request.channelName === 'vapi' ) { + toFramework(request, port, callback); return; } - // Auxiliary process to main process: prepare response - var callback = messaging.NOOPFUNC; - if ( request.auxProcessId !== undefined ) { - callback = callbackWrapperFactory(port, request).callback; - } - // Auxiliary process to main process: specific handler - var r = messaging.UNHANDLED; - var listener = messaging.listeners[request.channelName]; + var r = this.UNHANDLED, + listener = this.listeners[request.channelName]; if ( typeof listener === 'function' ) { r = listener(request.msg, port.sender, callback); } - if ( r !== messaging.UNHANDLED ) { - return; - } + if ( r !== this.UNHANDLED ) { return; } // Auxiliary process to main process: default handler - r = messaging.defaultHandler(request.msg, port.sender, callback); - if ( r !== messaging.UNHANDLED ) { - return; - } + r = this.defaultHandler(request.msg, port.sender, callback); + if ( r !== this.UNHANDLED ) { return; } // Auxiliary process to main process: no handler - console.error('uBlock> messaging > unknown request: %o', request); + console.error( + 'vAPI.messaging.onPortMessage > unhandled request: %o', + request + ); // Need to callback anyways in case caller expected an answer, or // else there is a memory leak on caller's side callback(); - }; + }.bind(vAPI.messaging); })(); /******************************************************************************/ vAPI.messaging.onPortDisconnect = function(port) { - port.onDisconnect.removeListener(vAPI.messaging.onPortDisconnect); - port.onMessage.removeListener(vAPI.messaging.onPortMessage); - delete vAPI.messaging.ports[port.name]; -}; + port.onDisconnect.removeListener(this.onPortDisconnect); + port.onMessage.removeListener(this.onPortMessage); + this.ports.delete(port.name); +}.bind(vAPI.messaging); /******************************************************************************/ vAPI.messaging.onPortConnect = function(port) { - port.onDisconnect.addListener(vAPI.messaging.onPortDisconnect); - port.onMessage.addListener(vAPI.messaging.onPortMessage); - vAPI.messaging.ports[port.name] = port; -}; + port.onDisconnect.addListener(this.onPortDisconnect); + port.onMessage.addListener(this.onPortMessage); + this.ports.set(port.name, port); +}.bind(vAPI.messaging); /******************************************************************************/ @@ -996,312 +1090,18 @@ vAPI.messaging.broadcast = function(message) { broadcast: true, msg: message }; - - for ( var portName in this.ports ) { - if ( this.ports.hasOwnProperty(portName) === false ) { - continue; - } - // Do not stop broadcasting upon errors, - // workaround for Edge 'handle is invalid' error - try { - this.ports[portName].postMessage(messageWrapper); - } catch(e) { - } + for ( var port of this.ports.values() ) { + port.postMessage(messageWrapper); } }; /******************************************************************************/ /******************************************************************************/ -vAPI.net = {}; - -/******************************************************************************/ - -vAPI.net.registerListeners = function() { - var µb = µBlock, - µburi = µb.URI, - wrApi = browser.webRequest; - - // https://bugs.chromium.org/p/chromium/issues/detail?id=410382 - // Between Chromium 38-48, plug-ins' network requests were reported as - // type "other" instead of "object". - var is_v38_48 = /\bChrom[a-z]+\/(?:3[89]|4[0-8])\.[\d.]+\b/.test(navigator.userAgent); - - // legacy Chromium understands only these network request types. - var validTypes = { - main_frame: true, - sub_frame: true, - stylesheet: true, - script: true, - image: true, - object: true, - xmlhttprequest: true, - other: true - }; - // modern Chromium/WebExtensions: more types available. - if ( wrApi.ResourceType ) { - (function() { - for ( var typeKey in wrApi.ResourceType ) { - if ( wrApi.ResourceType.hasOwnProperty(typeKey) ) { - validTypes[wrApi.ResourceType[typeKey]] = true; - } - } - })(); - } - - var 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'] - ]); - - var denormalizeTypes = function(aa) { - if ( aa.length === 0 ) { - return Object.keys(validTypes); - } - var out = []; - var i = aa.length, - type, - needOther = true; - while ( i-- ) { - type = aa[i]; - if ( validTypes[type] ) { - out.push(type); - } - if ( type === 'other' ) { - needOther = false; - } - } - if ( needOther ) { - out.push('other'); - } - return out; - }; - - var headerValue = function(headers, name) { - var i = headers.length; - while ( i-- ) { - if ( headers[i].name.toLowerCase() === name ) { - return headers[i].value.trim(); - } - } - return ''; - }; - - var normalizeRequestDetails = function(details) { - details.tabId = details.tabId.toString(); +// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/contextMenus#Browser_compatibility +// Firefox for Android does no support browser.contextMenus. - var type = details.type; - - // https://github.com/gorhill/uBlock/issues/1493 - // Chromium 49+/WebExtensions support a new request type: `ping`, - // which is fired as a result of using `navigator.sendBeacon`. - if ( type === 'ping' ) { - details.type = 'beacon'; - return; - } - - 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. - var path = µburi.pathFromURI(details.url), - 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://github.com/chrisaljoudi/uBlock/issues/862 - // If no transposition possible, transpose to `object` as per - // Chromium bug 410382 - // https://code.google.com/p/chromium/issues/detail?id=410382 - if ( is_v38_48 ) { - details.type = 'object'; - } - }; - - // https://bugs.chromium.org/p/chromium/issues/detail?id=129353 - // https://github.com/gorhill/uBlock/issues/1497 - // Expose websocket-based network requests to uBO's filtering engine, - // logger, etc. - // Counterpart of following block of code is found in "vapi-client.js" -- - // search for "https://github.com/gorhill/uBlock/issues/1497". - // - // Once uBO 1.11.1 and uBO-Extra 2.12 are widespread, the image-based - // handling code can be removed. - var onBeforeWebsocketRequest = function(details) { - if ( (details.type !== 'image') && - (details.method !== 'HEAD' || details.type !== 'xmlhttprequest') - ) { - return; - } - var requestURL = details.url, - matches = /[?&]u(?:rl)?=([^&]+)/.exec(requestURL); - if ( matches === null ) { return; } - details.type = 'websocket'; - details.url = decodeURIComponent(matches[1]); - var r = onBeforeRequestClient(details); - if ( r && r.cancel ) { return r; } - // Redirect to the provided URL, or a 1x1 data: URI if none provided. - matches = /[?&]r=([^&]+)/.exec(requestURL); - return { - redirectUrl: matches !== null ? - decodeURIComponent(matches[1]) : - 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' - }; - }; - - var onBeforeRequestClient = this.onBeforeRequest.callback; - var onBeforeRequest = validTypes.websocket - // modern Chromium/WebExtensions: type 'websocket' is supported - ? function(details) { - normalizeRequestDetails(details); - return onBeforeRequestClient(details); - } - // legacy Chromium - : function(details) { - // https://github.com/gorhill/uBlock/issues/1497 - if ( details.url.endsWith('ubofix=f41665f3028c7fd10eecf573336216d3') ) { - var r = onBeforeWebsocketRequest(details); - if ( r !== undefined ) { return r; } - } - normalizeRequestDetails(details); - return onBeforeRequestClient(details); - }; - - // This is needed for Chromium 49-55. - var onBeforeSendHeaders = validTypes.csp_report - // modern Chromium/WebExtensions: type 'csp_report' is supported - ? null - // legacy Chromium - : function(details) { - if ( details.type !== 'ping' || details.method !== 'POST' ) { return; } - var type = headerValue(details.requestHeaders, 'content-type'); - if ( type === '' ) { return; } - if ( type.endsWith('/csp-report') ) { - details.type = 'csp_report'; - return onBeforeRequestClient(details); - } - }; - - var onHeadersReceivedClient = this.onHeadersReceived.callback, - onHeadersReceivedClientTypes = this.onHeadersReceived.types.slice(0), - onHeadersReceivedTypes = denormalizeTypes(onHeadersReceivedClientTypes); - var onHeadersReceived = validTypes.font - // modern Chromium/WebExtensions: type 'font' is supported - ? function(details) { - normalizeRequestDetails(details); - if ( - onHeadersReceivedClientTypes.length !== 0 && - onHeadersReceivedClientTypes.indexOf(details.type) === -1 - ) { - return; - } - return onHeadersReceivedClient(details); - } - // legacy Chromium - : function(details) { - normalizeRequestDetails(details); - // Hack to work around Chromium API limitations, where requests of - // type `font` are returned as `other`. For example, our normalization - // fail at transposing `other` into `font` for URLs which are outside - // what is expected. At least when headers are received we can check - // for content type `font/*`. Blocking at onHeadersReceived time is - // less worse than not blocking at all. Also, due to Chromium bug, - // `other` always becomes `object` when it can't be normalized into - // something else. Test case for "unfriendly" font URLs: - // https://www.google.com/fonts - if ( details.type === 'font' ) { - var r = onBeforeRequestClient(details); - if ( typeof r === 'object' && r.cancel === true ) { - return { cancel: true }; - } - } - if ( - onHeadersReceivedClientTypes.length !== 0 && - onHeadersReceivedClientTypes.indexOf(details.type) === -1 - ) { - return; - } - return onHeadersReceivedClient(details); - }; - - var urls, types; - - if ( onBeforeRequest ) { - urls = this.onBeforeRequest.urls || ['']; - types = this.onBeforeRequest.types || undefined; - if ( - (validTypes.websocket) && - (types === undefined || types.indexOf('websocket') !== -1) && - (urls.indexOf('') === -1) - ) { - if ( urls.indexOf('ws://*/*') === -1 ) { - urls.push('ws://*/*'); - } - if ( urls.indexOf('wss://*/*') === -1 ) { - urls.push('wss://*/*'); - } - } - wrApi.onBeforeRequest.addListener( - onBeforeRequest, - { urls: urls, types: types }, - this.onBeforeRequest.extra - ); - } - - // Edge doesn't support the 'ping' type yet - /*if ( onBeforeSendHeaders ) { - wrApi.onBeforeSendHeaders.addListener( - onBeforeSendHeaders, - { - 'urls': [ '' ], - 'types': [ 'ping' ] - }, - [ 'blocking', 'requestHeaders' ] - ); - }*/ - - if ( onHeadersReceived ) { - urls = this.onHeadersReceived.urls || ['']; - types = onHeadersReceivedTypes; - wrApi.onHeadersReceived.addListener( - onHeadersReceived, - { urls: urls, types: types }, - this.onHeadersReceived.extra - ); - } - }; - -/******************************************************************************/ -/******************************************************************************/ - -vAPI.contextMenu = { +vAPI.contextMenu = browser.contextMenus && { _callback: null, _entries: [], _createEntry: function(entry) { @@ -1369,20 +1169,21 @@ vAPI.onLoadAllCompleted = function() { // http://code.google.com/p/chromium/issues/detail?id=410868#c11 // Need to be sure to access `vAPI.lastError()` to prevent // spurious warnings in the console. - var scriptDone = function() { + var onScriptInjected = function() { vAPI.lastError(); }; var scriptStart = function(tabId) { - vAPI.tabs.injectScript(tabId, { - file: 'js/vapi-client.js', - allFrames: true, - runAt: 'document_idle' - }, function(){ }); - vAPI.tabs.injectScript(tabId, { - file: 'js/contentscript.js', - allFrames: true, - runAt: 'document_idle' - }, scriptDone); + var manifest = browser.runtime.getManifest(); + if ( manifest instanceof Object === false ) { return; } + for ( var contentScript of manifest.content_scripts ) { + for ( var file of contentScript.js ) { + vAPI.tabs.injectScript(tabId, { + file: file, + allFrames: contentScript.all_frames, + runAt: contentScript.run_at + }, onScriptInjected); + } + } }; var bindToTabs = function(tabs) { var µb = µBlock; @@ -1427,7 +1228,7 @@ vAPI.punycodeURL = function(url) { // https://github.com/gorhill/uBlock/issues/900 // Also, UC Browser: http://www.upsieutoc.com/image/WXuH -vAPI.adminStorage = { +vAPI.adminStorage = browser.storage.managed && { getItem: function(key, callback) { var onRead = function(store) { var data; @@ -1458,17 +1259,24 @@ vAPI.cloud = browser.storage.sync instanceof Object && (function() { var maxChunkCountPerItem = Math.floor(512 * 0.75) & ~(chunkCountPerFetch - 1); // Mind browser.storage.sync.QUOTA_BYTES_PER_ITEM (8192 at time of writing) - var maxChunkSize = Math.floor(browser.storage.sync.QUOTA_BYTES_PER_ITEM * 0.75 || 6144); - - // Mind browser.storage.sync.QUOTA_BYTES (128 kB at time of writing) - // Firefox: - // https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/sync - // > You can store up to 100KB of data using this API/ - var maxStorageSize = browser.storage.sync.QUOTA_BYTES || 102400; + var maxChunkSize = browser.storage.sync.QUOTA_BYTES_PER_ITEM || 8192; + + // Flavor-specific handling needs to be done here. Reason: to allow time + // for vAPI.webextFlavor to be properly set. + // https://github.com/gorhill/uBlock/issues/3006 + // For Firefox, we will use a lower ratio to allow for more overhead for + // the infrastructure. Unfortunately this leads to less usable space for + // actual data, but all of this is provided for free by browser vendors, + // so we need to accept and deal with these limitations. + var initialize = function() { + var ratio = vAPI.webextFlavor.startsWith('Mozilla-Firefox-') ? 0.6 : 0.75; + maxChunkSize = Math.floor(maxChunkSize * ratio); + initialize = function(){}; + }; var options = { defaultDeviceName: window.navigator.platform, - deviceName: window.localStorage.getItem('deviceName') || '' + deviceName: vAPI.localStorage.getItem('deviceName') || '' }; // This is used to find out a rough count of how many chunks exists: @@ -1515,13 +1323,17 @@ vAPI.cloud = browser.storage.sync instanceof Object && (function() { for ( var i = start; i < n; i++ ) { keys.push(dataKey + i.toString()); } - browser.storage.sync.remove(keys); + if ( keys.length !== 0 ) { + browser.storage.sync.remove(keys); + } }; var start = function(/* dataKeys */) { }; var push = function(dataKey, data, callback) { + initialize(); + var bin = { 'source': options.deviceName || options.defaultDeviceName, 'tstamp': Date.now(), @@ -1547,6 +1359,15 @@ vAPI.cloud = browser.storage.sync instanceof Object && (function() { var errorStr; if ( browser.runtime.lastError ) { errorStr = browser.runtime.lastError.message; + // https://github.com/gorhill/uBlock/issues/3006#issuecomment-332597677 + // - Delete all that was pushed in case of failure. + // - It's unknown whether such issue applies only to Firefox: + // until such cases are reported for other browsers, we will + // reset the (now corrupted) content of the cloud storage + // only on Firefox. + if ( vAPI.webextFlavor.startsWith('Mozilla-Firefox-') ) { + chunkCount = 0; + } } callback(errorStr); @@ -1556,6 +1377,8 @@ vAPI.cloud = browser.storage.sync instanceof Object && (function() { }; var pull = function(dataKey, callback) { + initialize(); + var assembleChunks = function(bin) { if ( browser.runtime.lastError ) { callback(null, browser.runtime.lastError.message); @@ -1612,7 +1435,7 @@ vAPI.cloud = browser.storage.sync instanceof Object && (function() { } if ( typeof details.deviceName === 'string' ) { - window.localStorage.setItem('deviceName', details.deviceName); + vAPI.localStorage.setItem('deviceName', details.deviceName); options.deviceName = details.deviceName; } diff --git a/platform/edge/vapi-client.js b/platform/edge/vapi-client.js index 0e4e266b92f57..75945d8a54e4d 100644 --- a/platform/edge/vapi-client.js +++ b/platform/edge/vapi-client.js @@ -19,122 +19,21 @@ Home: https://github.com/gorhill/uBlock */ -/* global HTMLDocument, XMLDocument */ +// For non-background page 'use strict'; -// For non background pages - /******************************************************************************/ -(function(self) { - -/******************************************************************************/ -/******************************************************************************/ +// https://github.com/chrisaljoudi/uBlock/issues/456 +// Skip if already injected. -// https://github.com/chrisaljoudi/uBlock/issues/464 -if ( document instanceof HTMLDocument === false ) { - // https://github.com/chrisaljoudi/uBlock/issues/1528 - // A XMLDocument can be a valid HTML document. - if ( - document instanceof XMLDocument === false || - document.createElement('div') instanceof HTMLDivElement === false - ) { - return; - } -} - -// https://github.com/gorhill/uBlock/issues/1124 -// Looks like `contentType` is on track to be standardized: -// https://dom.spec.whatwg.org/#concept-document-content-type -// https://forums.lanik.us/viewtopic.php?f=64&t=31522 -// Skip text/plain documents. -var contentType = document.contentType || ''; -if ( /^image\/|^text\/plain/.test(contentType) ) { - return; -} +if ( typeof vAPI === 'object' && !vAPI.clientScript ) { // >>>>>>>> start of HUGE-IF-BLOCK /******************************************************************************/ - -// https://bugs.chromium.org/p/project-zero/issues/detail?id=1225&desc=6#c10 -if ( !self.vAPI || self.vAPI.uBO !== true ) { - self.vAPI = { uBO: true }; -} - -var vAPI = self.vAPI; -var browser = self.browser; - -// https://github.com/chrisaljoudi/uBlock/issues/456 -// Already injected? -if ( vAPI.sessionId ) { - return; -} - /******************************************************************************/ -var referenceCounter = 0; - -vAPI.lock = function() { - referenceCounter += 1; -}; - -vAPI.unlock = function() { - referenceCounter -= 1; - if ( referenceCounter === 0 ) { - // Eventually there will be code here to flush the javascript code - // from this file out of memory when it ends up unused. - - } -}; - -/******************************************************************************/ - -vAPI.executionCost = { - start: function(){}, - stop: function(){} -}; -/* -vAPI.executionCost = { - tcost: 0, - tstart: 0, - nstart: 0, - level: 1, - start: function() { - if ( this.nstart === 0 ) { - this.tstart = window.performance.now(); - } - this.nstart += 1; - }, - stop: function(mark) { - this.nstart -= 1; - if ( this.nstart !== 0 ) { - return; - } - var tcost = window.performance.now() - this.tstart; - this.tcost += tcost; - if ( mark === undefined ) { - return; - } - var top = window === window.top; - if ( !top && this.level < 2 ) { - return; - } - var context = window === window.top ? ' top' : 'frame'; - var percent = this.tcost / window.performance.now() * 100; - console.log( - 'uBO cost (%s): %sms/%s%% (%s: %sms)', - context, - this.tcost.toFixed(1), - percent.toFixed(1), - mark, - tcost.toFixed(2) - ); - } -}; -*/ -vAPI.executionCost.start(); - -/******************************************************************************/ +vAPI.clientScript = true; vAPI.randomToken = function() { return String.fromCharCode(Date.now() % 26 + 97) + @@ -166,20 +65,41 @@ vAPI.shutdown = { } }; -/******************************************************************************/ /******************************************************************************/ vAPI.messaging = { port: null, portTimer: null, portTimerDelay: 10000, - channels: Object.create(null), - channelCount: 0, - pending: Object.create(null), - pendingCount: 0, + channels: new Map(), + connections: new Map(), + pending: new Map(), auxProcessId: 1, shuttingDown: false, + Connection: function(handler, details) { + var messaging = vAPI.messaging; + this.messaging = 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.checkBound = this.check.bind(this); + this.checkTimer = undefined; + // On Firefox it appears ports are not automatically disconnected when + // navigating to another page. + if ( messaging.Connection.pagehide !== undefined ) { return; } + messaging.Connection.pagehide = function() { + for ( var connection of this.connections.values() ) { + connection.disconnect(); + connection.handler(connection.toDetails('connectionBroken')); + } + }.bind(messaging); + window.addEventListener('pagehide', messaging.Connection.pagehide); + }, + shutdown: function() { this.shuttingDown = true; this.destroyPort(); @@ -189,62 +109,84 @@ vAPI.messaging = { this.port = null; vAPI.shutdown.exec(); }, - disconnectListenerCallback: null, + disconnectListenerBound: null, messageListener: function(details) { - if ( !details ) { - return; - } + if ( !details ) { return; } // Sent to all channels - if ( details.broadcast === true && !details.channelName ) { - for ( var channelName in this.channels ) { + if ( details.broadcast ) { + for ( var channelName of this.channels.keys() ) { this.sendToChannelListeners(channelName, details.msg); } return; } // Response to specific message previously sent + var listener; + if ( details.auxProcessId ) { - var listener = this.pending[details.auxProcessId]; - delete this.pending[details.auxProcessId]; - delete details.auxProcessId; // TODO: why? - if ( listener ) { - this.pendingCount -= 1; + listener = this.pending.get(details.auxProcessId); + if ( listener !== undefined ) { + this.pending.delete(details.auxProcessId); listener(details.msg); return; } } - // Sent to a specific channel - var response = this.sendToChannelListeners(details.channelName, details.msg); - - // Respond back if required - if ( details.mainProcessId === undefined ) { - return; - } - var port = this.connect(); - if ( port !== null ) { - port.postMessage({ - mainProcessId: details.mainProcessId, - msg: response - }); + if ( details.channelName !== 'vapi' ) { return; } + + // Internal handler + var connection; + + switch ( details.msg.what ) { + case 'connectionAccepted': + case 'connectionBroken': + case 'connectionCheck': + case 'connectionMessage': + case 'connectionRefused': + connection = this.connections.get(details.msg.id); + if ( connection === undefined ) { return; } + connection.receive(details.msg); + break; + case 'connectionRequested': + var listeners = this.channels.get(details.msg.to); + if ( listeners === undefined ) { return; } + var port = this.getPort(); + if ( port === null ) { return; } + for ( listener of listeners ) { + if ( listener(details.msg) !== true ) { continue; } + details.msg.what = 'connectionAccepted'; + details.msg.toToken = port.name; + connection = new this.Connection(listener, details.msg); + this.connections.set(connection.id, connection); + break; + } + if ( details.msg.what !== 'connectionAccepted' ) { + details.msg.what = 'connectionRefused'; + } + port.postMessage(details); + break; + default: + break; } }, messageListenerCallback: null, portPoller: function() { this.portTimer = null; - if ( this.port !== null ) { - if ( this.channelCount !== 0 || this.pendingCount !== 0 ) { - this.portTimer = vAPI.setTimeout(this.portPollerCallback, this.portTimerDelay); - this.portTimerDelay = Math.min(this.portTimerDelay * 2, 60 * 60 * 1000); - return; - } - } - this.destroyPort(); + if ( + this.port !== null && + this.channels.size === 0 && + this.connections.size === 0 && + this.pending.size === 0 + ) { + return this.destroyPort(); + } + this.portTimer = vAPI.setTimeout(this.portPollerBound, this.portTimerDelay); + this.portTimerDelay = Math.min(this.portTimerDelay * 2, 60 * 60 * 1000); }, - portPollerCallback: null, + portPollerBound: null, destroyPort: function() { if ( this.portTimer !== null ) { @@ -255,20 +197,21 @@ vAPI.messaging = { if ( port !== null ) { port.disconnect(); port.onMessage.removeListener(this.messageListenerCallback); - port.onDisconnect.removeListener(this.disconnectListenerCallback); + port.onDisconnect.removeListener(this.disconnectListenerBound); this.port = null; } - if ( this.channelCount !== 0 ) { - this.channels = Object.create(null); - this.channelCount = 0; + this.channels.clear(); + if ( this.connections.size !== 0 ) { + for ( var connection of this.connections.values() ) { + connection.receive({ what: 'connectionBroken' }); + } + this.connections.clear(); } // service pending callbacks - if ( this.pendingCount !== 0 ) { - var pending = this.pending, callback; - this.pending = Object.create(null); - this.pendingCount = 0; - for ( var auxId in pending ) { - callback = pending[auxId]; + if ( this.pending.size !== 0 ) { + var pending = this.pending; + this.pending = new Map(); + for ( var callback of pending.values() ) { if ( typeof callback === 'function' ) { callback(null); } @@ -277,13 +220,11 @@ vAPI.messaging = { }, createPort: function() { - if ( this.shuttingDown ) { - return null; - } + if ( this.shuttingDown ) { return null; } if ( this.messageListenerCallback === null ) { this.messageListenerCallback = this.messageListener.bind(this); - this.disconnectListenerCallback = this.disconnectListener.bind(this); - this.portPollerCallback = this.portPoller.bind(this); + this.disconnectListenerBound = this.disconnectListener.bind(this); + this.portPollerBound = this.portPoller.bind(this); } try { this.port = browser.runtime.connect({name: vAPI.sessionId}) || null; @@ -292,116 +233,203 @@ vAPI.messaging = { } if ( this.port !== null ) { this.port.onMessage.addListener(this.messageListenerCallback); - this.port.onDisconnect.addListener(this.disconnectListenerCallback); - } - this.portTimerDelay = 10000; - if ( this.portTimer === null ) { - this.portTimer = vAPI.setTimeout(this.portPollerCallback, this.portTimerDelay); + this.port.onDisconnect.addListener(this.disconnectListenerBound); + this.portTimerDelay = 10000; + if ( this.portTimer === null ) { + this.portTimer = vAPI.setTimeout( + this.portPollerBound, + this.portTimerDelay + ); + } } return this.port; }, - connect: function() { + getPort: function() { return this.port !== null ? this.port : this.createPort(); }, send: function(channelName, message, callback) { - this.sendTo(channelName, message, undefined, undefined, callback); - }, - - sendTo: function(channelName, message, toTabId, toChannel, callback) { // Too large a gap between the last request and the last response means // the main process is no longer reachable: memory leaks and bad // performance become a risk -- especially for long-lived, dynamic // pages. Guard against this. - if ( this.pendingCount > 25 ) { + if ( this.pending.size > 25 ) { vAPI.shutdown.exec(); } - var port = this.connect(); + var port = this.getPort(); if ( port === null ) { - if ( typeof callback === 'function' ) { - callback(); - } + if ( typeof callback === 'function' ) { callback(); } return; } var auxProcessId; if ( callback ) { auxProcessId = this.auxProcessId++; - this.pending[auxProcessId] = callback; - this.pendingCount += 1; + this.pending.set(auxProcessId, callback); } port.postMessage({ channelName: channelName, auxProcessId: auxProcessId, - toTabId: toTabId, - toChannel: toChannel, msg: message }); }, - addChannelListener: function(channelName, callback) { - if ( typeof callback !== 'function' ) { - return; - } - var listeners = this.channels[channelName]; - if ( listeners !== undefined && listeners.indexOf(callback) !== -1 ) { - console.error('Duplicate listener on channel "%s"', channelName); - return; - } - if ( listeners === undefined ) { - this.channels[channelName] = [callback]; - this.channelCount += 1; - } else { - listeners.push(callback); - } - this.connect(); + connectTo: function(from, to, handler) { + var port = this.getPort(); + if ( port === null ) { return; } + var connection = new this.Connection(handler, { + id: from + '-' + to + '-' + vAPI.sessionId, + to: to, + from: from, + fromToken: port.name + }); + this.connections.set(connection.id, connection); + port.postMessage({ + channelName: 'vapi', + msg: { + what: 'connectionRequested', + id: connection.id, + from: from, + fromToken: port.name, + to: to + } + }); + return connection.id; }, - removeChannelListener: function(channelName, callback) { - if ( typeof callback !== 'function' ) { - return; - } - var listeners = this.channels[channelName]; + disconnectFrom: function(connectionId) { + var connection = this.connections.get(connectionId); + if ( connection === undefined ) { return; } + connection.disconnect(); + }, + + sendTo: function(connectionId, payload) { + var connection = this.connections.get(connectionId); + if ( connection === undefined ) { return; } + connection.send(payload); + }, + + addChannelListener: function(channelName, listener) { + var listeners = this.channels.get(channelName); if ( listeners === undefined ) { - return; - } - var pos = listeners.indexOf(callback); - if ( pos === -1 ) { - console.error('Listener not found on channel "%s"', channelName); - return; + this.channels.set(channelName, [ listener ]); + } else if ( listeners.indexOf(listener) === -1 ) { + listeners.push(listener); } + this.getPort(); + }, + + removeChannelListener: function(channelName, listener) { + var listeners = this.channels.get(channelName); + if ( listeners === undefined ) { return; } + var pos = listeners.indexOf(listener); + if ( pos === -1 ) { return; } listeners.splice(pos, 1); if ( listeners.length === 0 ) { - delete this.channels[channelName]; - this.channelCount -= 1; + this.channels.delete(channelName); } }, removeAllChannelListeners: function(channelName) { - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } - delete this.channels[channelName]; - this.channelCount -= 1; + this.channels.delete(channelName); }, sendToChannelListeners: function(channelName, msg) { - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } + var listeners = this.channels.get(channelName); + if ( listeners === undefined ) { return; } + listeners = listeners.slice(0); var response; - for ( var i = 0, n = listeners.length; i < n; i++ ) { - response = listeners[i](msg); - if ( response !== undefined ) { - break; - } + for ( var listener of listeners ) { + response = listener(msg); + if ( response !== undefined ) { break; } } return response; } }; +vAPI.messaging.Connection.prototype = { + toDetails: function(what, payload) { + return { + what: what, + id: this.id, + from: this.from, + fromToken: this.fromToken, + to: this.to, + toToken: this.toToken, + payload: payload + }; + }, + disconnect: function() { + if ( this.checkTimer !== undefined ) { + clearTimeout(this.checkTimer); + this.checkTimer = undefined; + } + this.messaging.connections.delete(this.id); + var port = this.messaging.getPort(); + if ( port === null ) { return; } + port.postMessage({ + channelName: 'vapi', + msg: this.toDetails('connectionBroken') + }); + }, + checkAsync: function() { + if ( this.checkTimer !== undefined ) { + clearTimeout(this.checkTimer); + } + this.checkTimer = vAPI.setTimeout(this.checkBound, 499); + }, + check: function() { + this.checkTimer = undefined; + if ( this.messaging.connections.has(this.id) === false ) { return; } + var port = this.messaging.getPort(); + if ( port === null ) { return; } + port.postMessage({ + channelName: 'vapi', + msg: this.toDetails('connectionCheck') + }); + this.checkAsync(); + }, + receive: function(details) { + switch ( details.what ) { + case 'connectionAccepted': + this.toToken = details.toToken; + this.handler(details); + this.checkAsync(); + break; + case 'connectionBroken': + this.messaging.connections.delete(this.id); + this.handler(details); + break; + case 'connectionMessage': + this.handler(details); + this.checkAsync(); + break; + case 'connectionCheck': + var port = this.messaging.getPort(); + if ( port === null ) { return; } + if ( this.messaging.connections.has(this.id) ) { + this.checkAsync(); + } else { + details.what = 'connectionBroken'; + port.postMessage({ channelName: 'vapi', msg: details }); + } + break; + case 'connectionRefused': + this.messaging.connections.delete(this.id); + this.handler(details); + break; + } + }, + send: function(payload) { + var port = this.messaging.getPort(); + if ( port === null ) { return; } + port.postMessage({ + channelName: 'vapi', + msg: this.toDetails('connectionMessage', payload) + }); + } +}; + // Downloads don't currently work from background pages // so we listen for forwarded downloads here vAPI.messaging.addChannelListener('foregroundDownload', (message) => { @@ -414,17 +442,13 @@ vAPI.messaging.addChannelListener('foregroundDownload', (message) => { vAPI.shutdown.add(function() { vAPI.messaging.shutdown(); - delete window.vAPI; + window.vAPI = undefined; }); // https://www.youtube.com/watch?v=rT5zCHn0tsg // https://www.youtube.com/watch?v=E-jS4e3zacI -vAPI.executionCost.stop('vapi-client.js'); - /******************************************************************************/ /******************************************************************************/ -})(this); - -/******************************************************************************/ +} // <<<<<<<< end of HUGE-IF-BLOCK diff --git a/platform/edge/vapi-common.js b/platform/edge/vapi-common.js index 126ae0934aa8c..c8d581e62eb80 100644 --- a/platform/edge/vapi-common.js +++ b/platform/edge/vapi-common.js @@ -1,23 +1,23 @@ /******************************************************************************* - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2017 The uBlock Origin authors + uBlock Origin - a browser extension to block requests. + Copyright (C) 2014-2017 The uBlock Origin authors - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. + This program is 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. + 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/}. + 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 -*/ + Home: https://github.com/gorhill/uBlock + */ // For background page or non-background pages @@ -28,12 +28,6 @@ (function(self) { -// https://bugs.chromium.org/p/project-zero/issues/detail?id=1225&desc=6#c10 -if ( !self.vAPI || self.vAPI.uBO !== true ) { - self.vAPI = { uBO: true }; -} - -var vAPI = self.vAPI; var browser = self.browser; /******************************************************************************/ @@ -79,12 +73,6 @@ vAPI.download = function(details) { /******************************************************************************/ -vAPI.insertHTML = function(node, html) { - node.innerHTML = html; -}; - -/******************************************************************************/ - vAPI.getURL = browser.runtime.getURL; /******************************************************************************/ @@ -95,8 +83,23 @@ setScriptDirection(vAPI.i18n('@@ui_locale')); /******************************************************************************/ +// https://github.com/gorhill/uBlock/issues/3057 +// - webNavigation.onCreatedNavigationTarget become broken on Firefox when we +// try to make the popup panel close itself using the original +// `window.open('', '_self').close()`. + vAPI.closePopup = function() { - window.open('','_self').close(); + if ( + self.browser instanceof Object && + typeof self.browser.runtime.getBrowserInfo === 'function' + ) { + 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(); }; /******************************************************************************/ @@ -106,11 +109,39 @@ vAPI.closePopup = function() { // This storage is optional, but it is nice to have, for a more polished user // experience. -// This can throw in some contexts (like in devtool). -try { - vAPI.localStorage = window.localStorage; -} catch (ex) { -} +// 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) { + } + } +}; /******************************************************************************/ diff --git a/platform/edge/vapi-usercss.js b/platform/edge/vapi-usercss.js new file mode 100644 index 0000000000000..df050cc97e32c --- /dev/null +++ b/platform/edge/vapi-usercss.js @@ -0,0 +1,546 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2017 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'; + +// For content pages + +// Abort execution if our global vAPI object does not exist. +// https://github.com/chrisaljoudi/uBlock/issues/456 +// https://github.com/gorhill/uBlock/issues/2029 + +if ( typeof vAPI === 'object' ) { // >>>>>>>> start of HUGE-IF-BLOCK + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.userStylesheet = { + style: null, + styleFixCount: 0, + css: new Map(), + disabled: false, + apply: function() { + }, + inject: function() { + this.style = document.createElement('style'); + this.style.disabled = this.disabled; + var parent = document.head || document.documentElement; + if ( parent === null ) { return; } + parent.appendChild(this.style); + var observer = new MutationObserver(function() { + if ( this.style === null ) { return; } + if ( this.style.sheet !== null ) { return; } + this.styleFixCount += 1; + if ( this.styleFixCount < 32 ) { + parent.appendChild(this.style); + } else { + observer.disconnect(); + } + }.bind(this)); + observer.observe(parent, { childList: true }); + }, + add: function(cssText) { + if ( cssText === '' || this.css.has(cssText) ) { return; } + if ( this.style === null ) { this.inject(); } + var sheet = this.style.sheet; + if ( !sheet ) { return; } + var i = sheet.cssRules.length; + sheet.insertRule(cssText, i); + this.css.set(cssText, sheet.cssRules[i]); + }, + remove: function(cssText) { + if ( cssText === '' ) { return; } + var cssRule = this.css.get(cssText); + if ( cssRule === undefined ) { return; } + this.css.delete(cssText); + if ( this.style === null ) { return; } + var sheet = this.style.sheet; + if ( !sheet ) { return; } + var rules = sheet.cssRules, + i = rules.length; + while ( i-- ) { + if ( rules[i] !== cssRule ) { continue; } + sheet.deleteRule(i); + break; + } + if ( rules.length !== 0 ) { return; } + var style = this.style; + this.style = null; + var parent = style.parentNode; + if ( parent !== null ) { + parent.removeChild(style); + } + }, + toggle: function(state) { + if ( state === undefined ) { state = this.disabled; } + if ( state !== this.disabled ) { return; } + this.disabled = !state; + if ( this.style !== null ) { + this.style.disabled = this.disabled; + } + } +}; + +/******************************************************************************/ + +vAPI.DOMFilterer = function() { + this.commitTimer = new vAPI.SafeAnimationFrame(this.commitNow.bind(this)); + this.domIsReady = document.readyState !== 'loading'; + this.listeners = []; + this.excludedNodeSet = new WeakSet(); + this.addedNodes = new Set(); + this.removedNodes = false; + + this.specificSimpleHide = new Set(); + this.specificSimpleHideAggregated = undefined; + this.addedSpecificSimpleHide = []; + this.specificComplexHide = new Set(); + this.specificComplexHideAggregated = undefined; + this.addedSpecificComplexHide = []; + this.specificOthers = []; + this.genericSimpleHide = new Set(); + this.genericComplexHide = new Set(); + + this.hideNodeExpando = undefined; + this.hideNodeBatchProcessTimer = undefined; + this.hiddenNodeObserver = undefined; + this.hiddenNodesetToProcess = new Set(); + this.hiddenNodeset = new WeakSet(); + + if ( vAPI.domWatcher instanceof Object ) { + vAPI.domWatcher.addListener(this); + } +}; + +vAPI.DOMFilterer.prototype = { + // https://www.w3.org/community/webed/wiki/CSS/Selectors#Combinators + reCSSCombinators: /[ >+~]/, + + commitNow: function() { + this.commitTimer.clear(); + + if ( this.domIsReady !== true || vAPI.userStylesheet.disabled ) { + return; + } + + var nodes, node; + + // Filterset changed. + + if ( this.addedSpecificSimpleHide.length !== 0 ) { + //console.time('specific simple filterset changed'); + //console.log('added %d specific simple selectors', this.addedSpecificSimpleHide.length); + nodes = document.querySelectorAll(this.addedSpecificSimpleHide.join(',')); + for ( node of nodes ) { + this.hideNode(node); + } + this.addedSpecificSimpleHide = []; + this.specificSimpleHideAggregated = undefined; + //console.timeEnd('specific simple filterset changed'); + } + + if ( this.addedSpecificComplexHide.length !== 0 ) { + //console.time('specific complex filterset changed'); + //console.log('added %d specific complex selectors', this.addedSpecificComplexHide.length); + nodes = document.querySelectorAll(this.addedSpecificComplexHide.join(',')); + for ( node of nodes ) { + this.hideNode(node); + } + this.addedSpecificComplexHide = []; + this.specificComplexHideAggregated = undefined; + //console.timeEnd('specific complex filterset changed'); + } + + // DOM layout changed. + + var domNodesAdded = this.addedNodes.size !== 0, + domLayoutChanged = domNodesAdded || this.removedNodes; + + if ( domNodesAdded === false || domLayoutChanged === false ) { + return; + } + + //console.log('%d nodes added', this.addedNodes.size); + + if ( this.specificSimpleHide.size !== 0 && domNodesAdded ) { + //console.time('dom layout changed/specific simple selectors'); + if ( this.specificSimpleHideAggregated === undefined ) { + this.specificSimpleHideAggregated = + Array.from(this.specificSimpleHide).join(',\n'); + } + for ( node of this.addedNodes ) { + if ( node[vAPI.matchesProp](this.specificSimpleHideAggregated) ) { + this.hideNode(node); + } + nodes = node.querySelectorAll(this.specificSimpleHideAggregated); + for ( node of nodes ) { + this.hideNode(node); + } + } + //console.timeEnd('dom layout changed/specific simple selectors'); + } + + if ( this.specificComplexHide.size !== 0 && domLayoutChanged ) { + //console.time('dom layout changed/specific complex selectors'); + if ( this.specificComplexHideAggregated === undefined ) { + this.specificComplexHideAggregated = + Array.from(this.specificComplexHide).join(',\n'); + } + nodes = document.querySelectorAll(this.specificComplexHideAggregated); + for ( node of nodes ) { + this.hideNode(node); + } + //console.timeEnd('dom layout changed/specific complex selectors'); + } + + this.addedNodes.clear(); + this.removedNodes = false; + }, + + commit: function(now) { + if ( now ) { + this.commitTimer.clear(); + this.commitNow(); + } else { + this.commitTimer.start(); + } + }, + + addCSSRule: function(selectors, declarations, details) { + if ( selectors === undefined ) { return; } + + if ( details === undefined ) { details = {}; } + + var selectorsStr = Array.isArray(selectors) ? + selectors.join(',\n') : + selectors; + if ( selectorsStr.length === 0 ) { return; } + + vAPI.userStylesheet.add(selectorsStr + '\n{' + declarations + '}'); + this.commit(); + if ( this.hasListeners() ) { + this.triggerListeners({ + declarative: [ [ selectorsStr, declarations ] ] + }); + } + + if ( declarations !== 'display:none!important;' ) { + this.specificOthers.push({ + selectors: selectorsStr, + declarations: declarations + }); + return; + } + + // Do not strongly enforce internal CSS rules. + if ( details.internal ) { return; } + + var isGeneric= details.lazy === true, + isSimple = details.type === 'simple', + isComplex = details.type === 'complex', + selector; + + if ( isGeneric ) { + if ( isSimple ) { + this.genericSimpleHide.add(selectorsStr); + return; + } + if ( isComplex ) { + this.genericComplexHide.add(selectorsStr); + return; + } + } + + var selectorsArr = Array.isArray(selectors) ? + selectors : + selectors.split(',\n'); + + if ( isGeneric ) { + for ( selector of selectorsArr ) { + if ( this.reCSSCombinators.test(selector) ) { + this.genericComplexHide.add(selector); + } else { + this.genericSimpleHide.add(selector); + } + } + return; + } + + // Specific cosmetic filters. + for ( selector of selectorsArr ) { + if ( + isComplex || + isSimple === false && this.reCSSCombinators.test(selector) + ) { + if ( this.specificComplexHide.has(selector) === false ) { + this.specificComplexHide.add(selector); + this.addedSpecificComplexHide.push(selector); + } + } else if ( this.specificSimpleHide.has(selector) === false ) { + this.specificSimpleHide.add(selector); + this.addedSpecificSimpleHide.push(selector); + } + } + }, + + onDOMCreated: function() { + this.domIsReady = true; + this.addedNodes.clear(); + this.removedNodes = false; + this.commit(); + }, + + onDOMChanged: function(addedNodes, removedNodes) { + for ( var node of addedNodes ) { + this.addedNodes.add(node); + } + this.removedNodes = this.removedNodes || removedNodes; + this.commit(); + }, + + addListener: function(listener) { + if ( this.listeners.indexOf(listener) !== -1 ) { return; } + this.listeners.push(listener); + }, + + removeListener: function(listener) { + var pos = this.listeners.indexOf(listener); + if ( pos === -1 ) { return; } + this.listeners.splice(pos, 1); + }, + + hasListeners: function() { + return this.listeners.length !== 0; + }, + + triggerListeners: function(changes) { + var i = this.listeners.length; + while ( i-- ) { + this.listeners[i].onFiltersetChanged(changes); + } + }, + + // https://jsperf.com/clientheight-and-clientwidth-vs-getcomputedstyle + // Avoid getComputedStyle(), detecting whether a node is visible can be + // achieved with clientWidth/clientHeight. + // https://gist.github.com/paulirish/5d52fb081b3570c81e3a + // Do not interleave read-from/write-to the DOM. Write-to DOM + // operations would cause the first read-from to be expensive, and + // interleaving means that potentially all single read-from operation + // would be expensive rather than just the 1st one. + // Benchmarking toggling off/on cosmetic filtering confirms quite an + // improvement when: + // - batching as much as possible handling of all nodes; + // - avoiding to interleave read-from/write-to operations. + // However, toggling off/on cosmetic filtering repeatedly is not + // a real use case, but this shows this will help performance + // on sites which try to use inline styles to bypass blockers. + hideNodeBatchProcess: function() { + this.hideNodeBatchProcessTimer.clear(); + var expando = this.hideNodeExpando; + for ( var node of this.hiddenNodesetToProcess ) { + if ( + this.hiddenNodeset.has(node) === false || + node[expando] === undefined || + node.clientHeight === 0 || node.clientWidth === 0 + ) { + continue; + } + var attr = node.getAttribute('style'); + if ( attr === null ) { + attr = ''; + } else if ( + attr.length !== 0 && + attr.charCodeAt(attr.length - 1) !== 0x3B /* ';' */ + ) { + attr += ';'; + } + node.setAttribute('style', attr + 'display:none!important;'); + } + this.hiddenNodesetToProcess.clear(); + }, + + hideNodeObserverHandler: function(mutations) { + if ( vAPI.userStylesheet.disabled ) { return; } + var i = mutations.length, + stagedNodes = this.hiddenNodesetToProcess; + while ( i-- ) { + stagedNodes.add(mutations[i].target); + } + this.hideNodeBatchProcessTimer.start(); + }, + + hiddenNodeObserverOptions: { + attributes: true, + attributeFilter: [ 'style' ] + }, + + hideNodeInit: function() { + this.hideNodeExpando = vAPI.randomToken(); + this.hideNodeBatchProcessTimer = + new vAPI.SafeAnimationFrame(this.hideNodeBatchProcess.bind(this)); + this.hiddenNodeObserver = + new MutationObserver(this.hideNodeObserverHandler.bind(this)); + if ( this.hideNodeStyleSheetInjected === false ) { + this.hideNodeStyleSheetInjected = true; + vAPI.userStylesheet.add( + '[' + this.hideNodeAttr + ']\n{display:none!important;}' + ); + } + }, + + excludeNode: function(node) { + this.excludedNodeSet.add(node); + this.unhideNode(node); + }, + + unexcludeNode: function(node) { + this.excludedNodeSet.delete(node); + }, + + hideNode: function(node) { + if ( this.excludedNodeSet.has(node) ) { return; } + if ( this.hideNodeAttr === undefined ) { return; } + if ( this.hiddenNodeset.has(node) ) { return; } + node.hidden = true; + this.hiddenNodeset.add(node); + if ( this.hideNodeExpando === undefined ) { this.hideNodeInit(); } + node.setAttribute(this.hideNodeAttr, ''); + if ( node[this.hideNodeExpando] === undefined ) { + node[this.hideNodeExpando] = + node.hasAttribute('style') && + (node.getAttribute('style') || ''); + } + this.hiddenNodesetToProcess.add(node); + this.hideNodeBatchProcessTimer.start(); + this.hiddenNodeObserver.observe(node, this.hiddenNodeObserverOptions); + }, + + unhideNode: function(node) { + if ( this.hiddenNodeset.has(node) === false ) { return; } + node.hidden = false; + node.removeAttribute(this.hideNodeAttr); + this.hiddenNodesetToProcess.delete(node); + if ( this.hideNodeExpando === undefined ) { return; } + var attr = node[this.hideNodeExpando]; + if ( attr === false ) { + node.removeAttribute('style'); + } else if ( typeof attr === 'string' ) { + node.setAttribute('style', attr); + } + node[this.hideNodeExpando] = undefined; + this.hiddenNodeset.delete(node); + }, + + showNode: function(node) { + node.hidden = false; + var attr = node[this.hideNodeExpando]; + if ( attr === false ) { + node.removeAttribute('style'); + } else if ( typeof attr === 'string' ) { + node.setAttribute('style', attr); + } + }, + + unshowNode: function(node) { + node.hidden = true; + this.hiddenNodesetToProcess.add(node); + }, + + toggle: function(state, callback) { + vAPI.userStylesheet.toggle(state); + var disabled = vAPI.userStylesheet.disabled, + nodes = document.querySelectorAll('[' + this.hideNodeAttr + ']'); + for ( var node of nodes ) { + if ( disabled ) { + this.showNode(node); + } else { + this.unshowNode(node); + } + } + if ( disabled === false && this.hideNodeExpando !== undefined ) { + this.hideNodeBatchProcessTimer.start(); + } + if ( typeof callback === 'function' ) { + callback(); + } + }, + + getAllSelectors_: function(all) { + var out = { + declarative: [] + }; + if ( this.specificSimpleHide.size !== 0 ) { + out.declarative.push([ + Array.from(this.specificSimpleHide).join(',\n'), + 'display:none!important;' + ]); + } + if ( this.specificComplexHide.size !== 0 ) { + out.declarative.push([ + Array.from(this.specificComplexHide).join(',\n'), + 'display:none!important;' + ]); + } + if ( this.genericSimpleHide.size !== 0 ) { + out.declarative.push([ + Array.from(this.genericSimpleHide).join(',\n'), + 'display:none!important;' + ]); + } + if ( this.genericComplexHide.size !== 0 ) { + out.declarative.push([ + Array.from(this.genericComplexHide).join(',\n'), + 'display:none!important;' + ]); + } + if ( all ) { + out.declarative.push([ + '[' + this.hideNodeAttr + ']', + 'display:none!important;' + ]); + } + for ( var entry of this.specificOthers ) { + out.declarative.push([ entry.selectors, entry.declarations ]); + } + return out; + }, + + getFilteredElementCount: function() { + var details = this.getAllSelectors_(true); + if ( Array.isArray(details.declarative) === false ) { return 0; } + var selectors = details.declarative.reduce(function(acc, entry) { + acc.push(entry[0]); + return acc; + }, []); + if ( selectors.length === 0 ) { return 0; } + return document.querySelectorAll(selectors.join(',\n')).length; + }, + + getAllSelectors: function() { + return this.getAllSelectors_(false); + } +}; + +/******************************************************************************/ +/******************************************************************************/ + +} // <<<<<<<< end of HUGE-IF-BLOCK diff --git a/platform/edge/vapi-webrequest.js b/platform/edge/vapi-webrequest.js new file mode 100644 index 0000000000000..5def017d7feb6 --- /dev/null +++ b/platform/edge/vapi-webrequest.js @@ -0,0 +1,334 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2017 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +// For background page + +'use strict'; + +/******************************************************************************/ + +vAPI.net = { + onBeforeRequest: {}, + onBeforeMaybeSpuriousCSPReport: {}, + onHeadersReceived: {}, + nativeCSPReportFiltering: false +}; + +vAPI.net.registerListeners = function() { + + var µb = µBlock, + µburi = µb.URI, + wrApi = browser.webRequest; + + // https://bugs.chromium.org/p/chromium/issues/detail?id=410382 + // Between Chromium 38-48, plug-ins' network requests were reported as + // type "other" instead of "object". + var is_v38_48 = /\bChrom[a-z]+\/(?:3[89]|4[0-8])\.[\d.]+\b/.test(navigator.userAgent); + + // legacy Chromium understands only these network request types. + var validTypes = { + main_frame: true, + sub_frame: true, + stylesheet: true, + script: true, + image: true, + object: true, + xmlhttprequest: true, + other: true + }; + // modern Chromium/WebExtensions: more types available. + if ( wrApi.ResourceType ) { + (function() { + for ( var typeKey in wrApi.ResourceType ) { + if ( wrApi.ResourceType.hasOwnProperty(typeKey) ) { + validTypes[wrApi.ResourceType[typeKey]] = true; + } + } + })(); + } + + var 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'] + ]); + + var denormalizeTypes = function(aa) { + if ( aa.length === 0 ) { + return Object.keys(validTypes); + } + var out = []; + var i = aa.length, + type, + needOther = true; + while ( i-- ) { + type = aa[i]; + if ( validTypes[type] ) { + out.push(type); + } + if ( type === 'other' ) { + needOther = false; + } + } + if ( needOther ) { + out.push('other'); + } + return out; + }; + + var headerValue = function(headers, name) { + var i = headers.length; + while ( i-- ) { + if ( headers[i].name.toLowerCase() === name ) { + return headers[i].value.trim(); + } + } + return ''; + }; + + var normalizeRequestDetails = function(details) { + details.tabId = details.tabId.toString(); + + var type = details.type; + + // https://github.com/gorhill/uBlock/issues/1493 + // Chromium 49+/WebExtensions support a new request type: `ping`, + // which is fired as a result of using `navigator.sendBeacon`. + if ( type === 'ping' ) { + details.type = 'beacon'; + return; + } + + 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. + var path = µburi.pathFromURI(details.url), + 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://github.com/chrisaljoudi/uBlock/issues/862 + // If no transposition possible, transpose to `object` as per + // Chromium bug 410382 + // https://code.google.com/p/chromium/issues/detail?id=410382 + if ( is_v38_48 ) { + details.type = 'object'; + } + }; + + // https://bugs.chromium.org/p/chromium/issues/detail?id=129353 + // https://github.com/gorhill/uBlock/issues/1497 + // Expose websocket-based network requests to uBO's filtering engine, + // logger, etc. + // Counterpart of following block of code is found in "vapi-client.js" -- + // search for "https://github.com/gorhill/uBlock/issues/1497". + // + // Once uBO 1.11.1 and uBO-Extra 2.12 are widespread, the image-based + // handling code can be removed. + var onBeforeWebsocketRequest = function(details) { + if ( (details.type !== 'image') && + (details.method !== 'HEAD' || details.type !== 'xmlhttprequest') + ) { + return; + } + var requestURL = details.url, + matches = /[?&]u(?:rl)?=([^&]+)/.exec(requestURL); + if ( matches === null ) { return; } + details.type = 'websocket'; + details.url = decodeURIComponent(matches[1]); + var r = onBeforeRequestClient(details); + if ( r && r.cancel ) { return r; } + // Redirect to the provided URL, or a 1x1 data: URI if none provided. + matches = /[?&]r=([^&]+)/.exec(requestURL); + return { + redirectUrl: matches !== null ? + decodeURIComponent(matches[1]) : + 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==' + }; + }; + + var onBeforeRequestClient = this.onBeforeRequest.callback; + var onBeforeRequest = validTypes.websocket + // modern Chromium/WebExtensions: type 'websocket' is supported + ? function(details) { + normalizeRequestDetails(details); + return onBeforeRequestClient(details); + } + // legacy Chromium + : function(details) { + // https://github.com/gorhill/uBlock/issues/1497 + if ( details.url.endsWith('ubofix=f41665f3028c7fd10eecf573336216d3') ) { + var r = onBeforeWebsocketRequest(details); + if ( r !== undefined ) { return r; } + } + normalizeRequestDetails(details); + return onBeforeRequestClient(details); + }; + + // This is needed for Chromium 49-55. + var onBeforeSendHeaders = validTypes.csp_report + // modern Chromium/WebExtensions: type 'csp_report' is supported + ? null + // legacy Chromium + : function(details) { + if ( details.type !== 'ping' || details.method !== 'POST' ) { return; } + var type = headerValue(details.requestHeaders, 'content-type'); + if ( type === '' ) { return; } + if ( type.endsWith('/csp-report') ) { + details.type = 'csp_report'; + return onBeforeRequestClient(details); + } + }; + + var onHeadersReceivedClient = this.onHeadersReceived.callback, + onHeadersReceivedClientTypes = this.onHeadersReceived.types.slice(0), + onHeadersReceivedTypes = denormalizeTypes(onHeadersReceivedClientTypes); + var onHeadersReceived = validTypes.font + // modern Chromium/WebExtensions: type 'font' is supported + ? function(details) { + normalizeRequestDetails(details); + if ( + onHeadersReceivedClientTypes.length !== 0 && + onHeadersReceivedClientTypes.indexOf(details.type) === -1 + ) { + return; + } + return onHeadersReceivedClient(details); + } + // legacy Chromium + : function(details) { + normalizeRequestDetails(details); + // Hack to work around Chromium API limitations, where requests of + // type `font` are returned as `other`. For example, our normalization + // fail at transposing `other` into `font` for URLs which are outside + // what is expected. At least when headers are received we can check + // for content type `font/*`. Blocking at onHeadersReceived time is + // less worse than not blocking at all. Also, due to Chromium bug, + // `other` always becomes `object` when it can't be normalized into + // something else. Test case for "unfriendly" font URLs: + // https://www.google.com/fonts + if ( details.type === 'font' ) { + var r = onBeforeRequestClient(details); + if ( typeof r === 'object' && r.cancel === true ) { + return { cancel: true }; + } + } + if ( + onHeadersReceivedClientTypes.length !== 0 && + onHeadersReceivedClientTypes.indexOf(details.type) === -1 + ) { + return; + } + return onHeadersReceivedClient(details); + }; + + var urls, types; + + if ( onBeforeRequest ) { + urls = this.onBeforeRequest.urls || ['']; + types = this.onBeforeRequest.types || undefined; + if ( + (validTypes.websocket) && + (types === undefined || types.indexOf('websocket') !== -1) && + (urls.indexOf('') === -1) + ) { + if ( urls.indexOf('ws://*/*') === -1 ) { + urls.push('ws://*/*'); + } + if ( urls.indexOf('wss://*/*') === -1 ) { + urls.push('wss://*/*'); + } + } + wrApi.onBeforeRequest.addListener( + onBeforeRequest, + { urls: urls, types: types }, + this.onBeforeRequest.extra + ); + } + + // https://github.com/gorhill/uBlock/issues/3140 + this.nativeCSPReportFiltering = validTypes.csp_report; + if ( + this.nativeCSPReportFiltering && + typeof this.onBeforeMaybeSpuriousCSPReport.callback === 'function' + ) { + wrApi.onBeforeRequest.addListener( + this.onBeforeMaybeSpuriousCSPReport.callback, + { + urls: [ 'http://*/*', 'https://*/*' ], + types: [ 'csp_report' ] + }, + [ 'blocking', 'requestBody' ] + ); + } + + // Chromium 48 and lower does not support `ping` type. + // Chromium 56 and higher does support `csp_report` stype. + if ( onBeforeSendHeaders ) { + wrApi.onBeforeSendHeaders.addListener( + onBeforeSendHeaders, + { + 'urls': [ '' ], + 'types': [ 'ping' ] + }, + [ 'blocking', 'requestHeaders' ] + ); + } + + if ( onHeadersReceived ) { + urls = this.onHeadersReceived.urls || ['']; + types = onHeadersReceivedTypes; + wrApi.onHeadersReceived.addListener( + onHeadersReceived, + { urls: urls, types: types }, + this.onHeadersReceived.extra + ); + } +}; + +/******************************************************************************/ diff --git a/platform/edge/vapi.js b/platform/edge/vapi.js new file mode 100644 index 0000000000000..f622940412751 --- /dev/null +++ b/platform/edge/vapi.js @@ -0,0 +1,56 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2017 The uBlock Origin authors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +'use strict'; + +/* global HTMLDocument, XMLDocument */ + +// For background page, auxiliary pages, and content scripts. + +/******************************************************************************/ + +// https://bugzilla.mozilla.org/show_bug.cgi?id=1408996#c9 +var vAPI = window.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) +) { + vAPI = window.vAPI = vAPI instanceof Object && vAPI.uBO === true + ? vAPI + : { uBO: true }; +} + +/******************************************************************************/ diff --git a/platform/firefox/install.rdf b/platform/firefox/install.rdf index 8ead1412962b9..e478a268a1b68 100644 --- a/platform/firefox/install.rdf +++ b/platform/firefox/install.rdf @@ -20,8 +20,8 @@ {{ec8030f7-c20a-464f-9b0e-13a3a9e97384}} - 24.0 - * + 32.0 + 56.0a1 @@ -29,8 +29,8 @@ {{aa3c5121-dab2-40e2-81ca-7ea25febc110}} - 27.0 - * + 32.0 + 56.0a1 diff --git a/platform/firefox/vapi-background.js b/platform/firefox/vapi-background.js index 7a85730ff6e4f..c3579826e72df 100644 --- a/platform/firefox/vapi-background.js +++ b/platform/firefox/vapi-background.js @@ -680,6 +680,12 @@ var winWatcher = (function() { if ( !win || windowToIdMap.delete(win) !== true ) { return; } + // https://github.com/uBlockOrigin/uAssets/issues/567 + // We need to cleanup if and only if the window being closed is + // the actual top window. + if ( win.gBrowser && win.gBrowser.ownerGlobal !== win ) { + return; + } if ( typeof api.onCloseWindow === 'function' ) { api.onCloseWindow(win); } @@ -1566,31 +1572,22 @@ vAPI.messaging.listen = function(listenerName, callback) { vAPI.messaging.onMessage = (function() { var messaging = vAPI.messaging; - var toAuxPending = {}; // Use a wrapper to avoid closure and to allow reuse. - var CallbackWrapper = function(messageManager, listenerId, channelName, auxProcessId, timeout) { + var CallbackWrapper = function(messageManager, listenerId, channelName, auxProcessId) { this.callback = this.proxy.bind(this); // bind once - this.init(messageManager, listenerId, channelName, auxProcessId, timeout); + this.init(messageManager, listenerId, channelName, auxProcessId); }; - CallbackWrapper.prototype.init = function(messageManager, listenerId, channelName, auxProcessId, timeout) { + CallbackWrapper.prototype.init = function(messageManager, listenerId, channelName, auxProcessId) { this.messageManager = messageManager; this.listenerId = listenerId; this.channelName = channelName; this.auxProcessId = auxProcessId; - this.timerId = timeout !== undefined ? - vAPI.setTimeout(this.callback, timeout) : - null; return this; }; CallbackWrapper.prototype.proxy = function(response) { - if ( this.timerId !== null ) { - clearTimeout(this.timerId); - delete toAuxPending[this.timerId]; - this.timerId = null; - } var message = JSON.stringify({ auxProcessId: this.auxProcessId, channelName: this.channelName, @@ -1613,97 +1610,15 @@ vAPI.messaging.onMessage = (function() { var callbackWrapperJunkyard = []; - var callbackWrapperFactory = function(messageManager, listenerId, channelName, auxProcessId, timeout) { + var callbackWrapperFactory = function(messageManager, listenerId, channelName, auxProcessId) { var wrapper = callbackWrapperJunkyard.pop(); if ( wrapper ) { - return wrapper.init(messageManager, listenerId, channelName, auxProcessId, timeout); + return wrapper.init(messageManager, listenerId, channelName, auxProcessId); } - return new CallbackWrapper(messageManager, listenerId, channelName, auxProcessId, timeout); - }; - - // "Auxiliary process": any process other than main process. - var toAux = function(target, details) { - var messageManagerFrom = target.messageManager; - - // Message came from a popup, and its message manager is not usable. - // So instead we broadcast to the parent window. - if ( !messageManagerFrom ) { - messageManagerFrom = getOwnerWindow( - target.webNavigation.QueryInterface(Ci.nsIDocShell).chromeEventHandler - ).messageManager; - } - - var wrapper; - if ( details.auxProcessId !== undefined ) { - var channelNameRaw = details.channelName; - var pos = channelNameRaw.indexOf('|'); - wrapper = callbackWrapperFactory( - messageManagerFrom, - channelNameRaw.slice(0, pos), - channelNameRaw.slice(pos + 1), - details.auxProcessId, - 1023 - ); - } - - var messageManagerTo = null; - var browser = tabWatcher.browserFromTabId(details.toTabId); - if ( browser !== null && browser.messageManager ) { - messageManagerTo = browser.messageManager; - } - if ( messageManagerTo === null ) { - if ( wrapper !== undefined ) { - wrapper.callback(); - } - return; - } - - // As per HTML5, timer id is always an integer, thus suitable to be used - // as a key, and which value is safe to use across process boundaries. - if ( wrapper !== undefined ) { - toAuxPending[wrapper.timerId] = wrapper; - } - - var targetId = location.host + ':broadcast'; - var payload = JSON.stringify({ - mainProcessId: wrapper && wrapper.timerId, - channelName: details.toChannel, - msg: details.msg - }); - - if ( messageManagerTo.sendAsyncMessage ) { - messageManagerTo.sendAsyncMessage(targetId, payload); - } else { - messageManagerTo.broadcastAsyncMessage(targetId, payload); - } - }; - - var toAuxResponse = function(details) { - var mainProcessId = details.mainProcessId; - if ( mainProcessId === undefined ) { - return; - } - if ( toAuxPending.hasOwnProperty(mainProcessId) === false ) { - return; - } - var wrapper = toAuxPending[mainProcessId]; - delete toAuxPending[mainProcessId]; - wrapper.callback(details.msg); + return new CallbackWrapper(messageManager, listenerId, channelName, auxProcessId); }; return function({target, data}) { - // Auxiliary process to auxiliary process - if ( data.toTabId !== undefined ) { - toAux(target, data); - return; - } - - // Auxiliary process to auxiliary process: response - if ( data.mainProcessId !== undefined ) { - toAuxResponse(data); - return; - } - // Auxiliary process to main process var messageManager = target.messageManager; @@ -1742,15 +1657,11 @@ vAPI.messaging.onMessage = (function() { if ( typeof listener === 'function' ) { r = listener(data.msg, sender, callback); } - if ( r !== messaging.UNHANDLED ) { - return; - } + if ( r !== messaging.UNHANDLED ) { return; } // Auxiliary process to main process: default handler r = messaging.defaultHandler(data.msg, sender, callback); - if ( r !== messaging.UNHANDLED ) { - return; - } + if ( r !== messaging.UNHANDLED ) { return; } // Auxiliary process to main process: no handler console.error('uBlock> messaging > unknown request: %o', data); diff --git a/platform/firefox/vapi-client.js b/platform/firefox/vapi-client.js index 5ec47c0ebf525..aeb83cd193a22 100644 --- a/platform/firefox/vapi-client.js +++ b/platform/firefox/vapi-client.js @@ -54,63 +54,6 @@ var vAPI = self.vAPI; /******************************************************************************/ -var referenceCounter = 0; - -vAPI.lock = function() { - referenceCounter += 1; -}; - -vAPI.unlock = function() { - referenceCounter -= 1; -}; - -/******************************************************************************/ - -vAPI.executionCost = { - start: function(){}, - stop: function(){} -}; -/* -vAPI.executionCost = vAPI.executionCost || { - tcost: 0, - tstart: 0, - nstart: 0, - level: 1, - start: function() { - if ( this.nstart === 0 ) { - this.tstart = window.performance.now(); - } - this.nstart += 1; - }, - stop: function(mark) { - this.nstart -= 1; - if ( this.nstart !== 0 ) { - return; - } - var tcost = window.performance.now() - this.tstart; - this.tcost += tcost; - if ( mark === undefined ) { - return; - } - var top = window === window.top; - if ( !top && this.level < 2 ) { - return; - } - var context = window === window.top ? ' top' : 'frame'; - var percent = this.tcost / window.performance.now() * 100; - console.log( - 'uBO cost (' + context + '): ' + - this.tcost.toFixed(1) + 'ms/' + - percent.toFixed(1) + '% (' + - mark + ': ' + tcost.toFixed(2) + 'ms)' - ); - } -}; -*/ -vAPI.executionCost.start(); - -/******************************************************************************/ - vAPI.firefox = true; vAPI.randomToken = function() { @@ -176,23 +119,49 @@ vAPI.shutdown = { /******************************************************************************/ +var insertUserCSS = self.injectCSS || function(){}, + removeUserCSS = self.removeCSS || function(){}; + +var processUserCSS = function(details, callback) { + var cssText; + var aa = details.add; + if ( Array.isArray(aa) ) { + for ( cssText of aa ) { + insertUserCSS( + 'data:text/css;charset=utf-8,' + + encodeURIComponent(cssText) + ); + } + } + aa = details.remove; + if ( Array.isArray(aa) ) { + for ( cssText of aa ) { + removeUserCSS( + 'data:text/css;charset=utf-8,' + + encodeURIComponent(cssText) + ); + } + } + if ( typeof callback === 'function' ) { + callback(); + } +}; + +/******************************************************************************/ + vAPI.messaging = { - channels: Object.create(null), - channelCount: 0, - pending: Object.create(null), - pendingCount: 0, + channels: new Map(), + pending: new Map(), auxProcessId: 1, connected: false, messageListener: function(msg) { var details = JSON.parse(msg); - if ( !details ) { - return; - } + if ( !details ) { return; } // Sent to all channels if ( details.broadcast && !details.channelName ) { - for ( var channelName in this.channels ) { + for ( var channelName of this.channels.keys() ) { this.sendToChannelListeners(channelName, details.msg); } return; @@ -200,42 +169,27 @@ vAPI.messaging = { // Response to specific message previously sent if ( details.auxProcessId ) { - var listener = this.pending[details.auxProcessId]; - delete this.pending[details.auxProcessId]; - delete details.auxProcessId; // TODO: why? + var listener = this.pending.get(details.auxProcessId); + this.pending.delete(details.auxProcessId); if ( listener ) { - this.pendingCount -= 1; listener(details.msg); return; } } // Sent to a specific channel - var response = this.sendToChannelListeners(details.channelName, details.msg); - - // Respond back if required - if ( details.mainProcessId === undefined ) { - return; - } - sendAsyncMessage('ublock0:background', { - mainProcessId: details.mainProcessId, - msg: response - }); + this.sendToChannelListeners(details.channelName, details.msg); }, builtinListener: function(msg) { if ( msg.cmd === 'injectScript' ) { // injectScript is not always present. // - See contentObserver.initContentScripts in frameModule.js - if ( typeof self.injectScript !== 'function' ) { - return; - } + if ( typeof self.injectScript !== 'function' ) { return; } var details = msg.details; // Whether to inject in all child frames. Default to only top frame. var allFrames = details.allFrames || false; - if ( allFrames !== true && window !== window.top ) { - return; - } + if ( allFrames !== true && window !== window.top ) { return; } // https://github.com/gorhill/uBlock/issues/876 // Enforce `details.runAt`. Default to `document_end`. var runAt = details.runAt || 'document_end'; @@ -252,7 +206,7 @@ vAPI.messaging = { } if ( msg.cmd === 'shutdownSandbox' ) { vAPI.shutdown.exec(); - this.stop(); + vAPI.messaging.stop(); if ( typeof self.outerShutdown === 'function' ) { outerShutdown(); } @@ -290,7 +244,7 @@ vAPI.messaging = { toggleListenerCallback: null, start: function() { - this.addChannelListener('vAPI', this.builtinListener.bind(this)); + this.addChannelListener('vAPI', this.builtinListener); if ( this.toggleListenerCallback === null ) { this.toggleListenerCallback = this.toggleListener.bind(this); } @@ -304,14 +258,11 @@ vAPI.messaging = { window.removeEventListener('pageshow', this.toggleListenerCallback, true); } this.disconnect(); - this.channels = Object.create(null); - this.channelCount = 0; + this.channels.clear(); // service pending callbacks - var pending = this.pending, callback; - this.pending = Object.create(null); - this.pendingCount = 0; - for ( var auxId in pending ) { - callback = pending[auxId]; + var pending = this.pending; + this.pending = new Map(); + for ( var callback of pending.values() ) { if ( typeof callback === 'function' ) { callback(null); } @@ -333,14 +284,12 @@ vAPI.messaging = { }, send: function(channelName, message, callback) { - this.sendTo(channelName, message, undefined, undefined, callback); - }, - - sendTo: function(channelName, message, toTabId, toChannel, callback) { + // User stylesheets are handled content-side on legacy Firefox. + if ( channelName === 'vapi' && message.what === 'userCSS' ) { + return processUserCSS(message, callback); + } if ( !this.connected ) { - if ( typeof callback === 'function' ) { - callback(); - } + if ( typeof callback === 'function' ) { callback(); } return; } // Too large a gap between the last request and the last response means @@ -354,76 +303,63 @@ vAPI.messaging = { var auxProcessId; if ( callback ) { auxProcessId = this.auxProcessId++; - this.pending[auxProcessId] = callback; - this.pendingCount += 1; + this.pending.set(auxProcessId, callback); } sendAsyncMessage('ublock0:background', { channelName: self._sandboxId_ + '|' + channelName, auxProcessId: auxProcessId, - toTabId: toTabId, - toChannel: toChannel, msg: message }); }, - addChannelListener: function(channelName, callback) { - if ( typeof callback !== 'function' ) { - return; - } - var listeners = this.channels[channelName]; - if ( listeners !== undefined && listeners.indexOf(callback) !== -1 ) { - console.error('Duplicate listener on channel "%s"', channelName); - return; - } + // TODO: implement as time permits. + connectTo: function(from, to, handler) { + handler({ + what: 'connectionRefused', + from: from, + to: to + }); + }, + + disconnectFrom: function() { + }, + + sendTo: function() { + }, + + addChannelListener: function(channelName, listener) { + var listeners = this.channels.get(channelName); if ( listeners === undefined ) { - this.channels[channelName] = [callback]; - this.channelCount += 1; - } else { - listeners.push(callback); + this.channels.set(channelName, [ listener ]); + } else if ( listeners.indexOf(listener) === -1 ) { + listeners.push(listener); } this.connect(); }, - removeChannelListener: function(channelName, callback) { - if ( typeof callback !== 'function' ) { - return; - } - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } - var pos = this.listeners.indexOf(callback); - if ( pos === -1 ) { - console.error('Listener not found on channel "%s"', channelName); - return; - } + removeChannelListener: function(channelName, listener) { + var listeners = this.channels.get(channelName); + if ( listeners === undefined ) { return; } + var pos = this.listeners.indexOf(listener); + if ( pos === -1 ) { return; } listeners.splice(pos, 1); if ( listeners.length === 0 ) { - delete this.channels[channelName]; - this.channelCount -= 1; + this.channels.delete(channelName); } }, removeAllChannelListeners: function(channelName) { - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } - delete this.channels[channelName]; - this.channelCount -= 1; + this.channels.delete(channelName); }, sendToChannelListeners: function(channelName, msg) { - var listeners = this.channels[channelName]; - if ( listeners === undefined ) { - return; - } + var listeners = this.channels.get(channelName); + if ( listeners === undefined ) { return; } + listeners = listeners.slice(0); var response; - for ( var i = 0, n = listeners.length; i < n; i++ ) { - response = listeners[i](msg); - if ( response !== undefined ) { - break; - } + for ( var listener of listeners ) { + response = listener(msg); + if ( response !== undefined ) { break; } } return response; } @@ -435,46 +371,6 @@ vAPI.messaging.start(); /******************************************************************************/ -if ( self.injectCSS ) { - vAPI.userCSS = { - _userCSS: '', - _sheetURI: '', - _load: function() { - if ( this._userCSS === '' || this._sheetURI !== '' ) { return; } - this._sheetURI = 'data:text/css;charset=utf-8,' + encodeURIComponent(this._userCSS); - self.injectCSS(this._sheetURI); - }, - _unload: function() { - if ( this._sheetURI === '' ) { return; } - self.removeCSS(this._sheetURI); - this._sheetURI = ''; - }, - add: function(cssText) { - if ( cssText === '' ) { return; } - if ( this._userCSS !== '' ) { this._userCSS += '\n'; } - this._userCSS += cssText; - this._unload(); - this._load(); - }, - remove: function(cssText) { - if ( cssText === '' || this._userCSS === '' ) { return; } - this._userCSS = this._userCSS.replace(cssText, '').trim(); - this._unload(); - this._load(); - }, - toggle: function(state) { - if ( this._userCSS === '' ) { return; } - if ( state === undefined ) { - state = this._sheetURI === ''; - } - return state ? this._load() : this._unload(); - } - }; - vAPI.hideNode = vAPI.unhideNode = function(){}; -} - -/******************************************************************************/ - // https://bugzilla.mozilla.org/show_bug.cgi?id=444165 // https://github.com/gorhill/uBlock/issues/2256 // Not the prettiest solution, but that's the safest/simplest I can think @@ -498,10 +394,6 @@ if ( window !== window.top ) { /******************************************************************************/ -vAPI.executionCost.stop('vapi-client.js'); - -/******************************************************************************/ - })(this); /******************************************************************************/ diff --git a/platform/firefox/vapi-common.js b/platform/firefox/vapi-common.js index 1ee7699879478..d5b0abae3596a 100644 --- a/platform/firefox/vapi-common.js +++ b/platform/firefox/vapi-common.js @@ -75,30 +75,6 @@ vAPI.download = function(details) { /******************************************************************************/ -vAPI.insertHTML = (function() { - const parser = Components.classes['@mozilla.org/parserutils;1'] - .getService(Components.interfaces.nsIParserUtils); - - // https://github.com/gorhill/uBlock/issues/845 - // Apparently dashboard pages execute with `about:blank` principal. - - return function(node, html) { - while ( node.firstChild ) { - node.removeChild(node.firstChild); - } - - node.appendChild(parser.parseFragment( - html, - parser.SanitizerAllowStyle, - false, - Services.io.newURI('about:blank', null, null), - document.documentElement - )); - }; -})(); - -/******************************************************************************/ - vAPI.getURL = function(path) { return 'chrome://' + location.host + '/content/' + path.replace(/^\/+/, ''); }; diff --git a/platform/opera/manifest.json b/platform/opera/manifest.json index 3f54dcdb8d5d8..316e49036f957 100644 --- a/platform/opera/manifest.json +++ b/platform/opera/manifest.json @@ -25,7 +25,7 @@ "content_scripts": [ { "matches": ["http://*/*", "https://*/*"], - "js": ["js/vapi-client.js", "js/contentscript.js"], + "js": ["js/vapi.js", "js/vapi-client.js", "js/contentscript.js"], "run_at": "document_start", "all_frames": true }, @@ -44,7 +44,7 @@ }, "incognito": "split", "manifest_version": 2, - "minimum_chrome_version": "38.0", + "minimum_opera_version": "25.0", "name": "uBlock Origin", "optional_permissions": [ "file:///*" ], "options_page": "dashboard.html", diff --git a/platform/webext/background.html b/platform/webext/background.html deleted file mode 100644 index 659797740adbe..0000000000000 --- a/platform/webext/background.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - -uBlock Origin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/platform/webext/bootstrap.js b/platform/webext/bootstrap.js deleted file mode 100644 index ebbbc0b7814df..0000000000000 --- a/platform/webext/bootstrap.js +++ /dev/null @@ -1,276 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2017 The uBlock Origin authors - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -/* exported startup, shutdown, install, uninstall */ - -'use strict'; - -/******************************************************************************/ - -const hostName = 'ublock0'; - -/******************************************************************************/ - -function startup({ webExtension }) { - webExtension.startup().then(api => { - let { browser } = api, - storageMigrator; - let onMessage = function(message, sender, callback) { - if ( message.what === 'webext:storageMigrateNext' ) { - storageMigrator = storageMigrator || getStorageMigrator(); - storageMigrator.getNext((key, value) => { - if ( key === undefined ) { - storageMigrator.markAsDone(); - storageMigrator = undefined; - browser.runtime.onMessage.removeListener(onMessage); - } - callback({ key: key, value: JSON.stringify(value) }); - }); - return true; - } - if ( message.what === 'webext:storageMigrateDone' ) { - browser.runtime.onMessage.removeListener(onMessage); - } - if ( typeof callback === 'function' ) { - callback(); - } - }; - browser.runtime.onMessage.addListener(onMessage); - }); -} - -function shutdown() { -} - -function install() { -} - -function uninstall() { -} - -/******************************************************************************/ - -var getStorageMigrator = function() { - var db = null; - var dbOpenError = ''; - - var close = function() { - if ( db !== null ) { - db.asyncClose(); - } - db = null; - }; - - var open = function() { - if ( db !== null ) { - return db; - } - - // Create path - var { Services } = Components.utils.import('resource://gre/modules/Services.jsm', null), - path = Services.dirsvc.get('ProfD', Components.interfaces.nsIFile); - path.append('extension-data'); - path.append(hostName + '.sqlite'); - if ( !path.exists() || !path.isFile() ) { - return null; - } - - // Open database. - try { - db = Services.storage.openDatabase(path); - if ( db.connectionReady === false ) { - db.asyncClose(); - db = null; - } - } catch (ex) { - if ( dbOpenError === '' ) { - dbOpenError = ex.name; - if ( ex.name === 'NS_ERROR_FILE_CORRUPTED' ) { - close(); - } - } - } - - if ( db === null ) { - return null; - } - - // Since database could be opened successfully, reset error flag (its - // purpose is to avoid spamming console with error messages). - dbOpenError = ''; - - return db; - }; - - // Execute a query - var runStatement = function(stmt, callback) { - var result = {}; - - stmt.executeAsync({ - handleResult: function(rows) { - if ( !rows || typeof callback !== 'function' ) { - return; - } - - var row; - - while ( (row = rows.getNextRow()) ) { - // we assume that there will be two columns, since we're - // using it only for preferences - result[row.getResultByIndex(0)] = row.getResultByIndex(1); - } - }, - handleCompletion: function(reason) { - if ( typeof callback === 'function' && reason === 0 ) { - callback(result); - } - result = null; - }, - handleError: function(error) { - // Caller expects an answer regardless of failure. - if ( typeof callback === 'function' ) { - callback({}); - } - result = null; - // https://github.com/gorhill/uBlock/issues/1768 - // Error cases which warrant a removal of the SQL file, so far: - // - SQLLite error 11 database disk image is malformed - // Can't find doc on MDN about the type of error.result, so I - // force a string comparison. - if ( error.result.toString() === '11' ) { - close(); - } - } - }); - }; - - var bindNames = function(stmt, names) { - if ( Array.isArray(names) === false || names.length === 0 ) { - return; - } - var params = stmt.newBindingParamsArray(); - var i = names.length, bp; - while ( i-- ) { - bp = params.newBindingParams(); - bp.bindByName('name', names[i]); - params.addParams(bp); - } - stmt.bindParameters(params); - }; - - var read = function(details, callback) { - if ( typeof callback !== 'function' ) { - return; - } - - var prepareResult = function(result) { - var key; - for ( key in result ) { - if ( result.hasOwnProperty(key) === false ) { - continue; - } - result[key] = JSON.parse(result[key]); - } - if ( typeof details === 'object' && details !== null ) { - for ( key in details ) { - if ( result.hasOwnProperty(key) === false ) { - result[key] = details[key]; - } - } - } - callback(result); - }; - - if ( open() === null ) { - prepareResult({}); - return; - } - - var names = []; - if ( details !== null ) { - if ( Array.isArray(details) ) { - names = details; - } else if ( typeof details === 'object' ) { - names = Object.keys(details); - } else { - names = [details.toString()]; - } - } - - var stmt; - if ( names.length === 0 ) { - stmt = db.createAsyncStatement('SELECT * FROM "settings"'); - } else { - stmt = db.createAsyncStatement('SELECT * FROM "settings" WHERE "name" = :name'); - bindNames(stmt, names); - } - - runStatement(stmt, prepareResult); - }; - - let allKeys; - - let readNext = function(key, callback) { - if ( key === undefined ) { - callback(); - return; - } - read(key, bin => { - if ( bin instanceof Object && bin.hasOwnProperty(key) ) { - callback(key, bin[key]); - } else { - callback(key); - } - }); - }; - - let getNext = function(callback) { - if ( Array.isArray(allKeys) ) { - readNext(allKeys.pop(), callback); - return; - } - if ( open() === null ) { - callback(); - return; - } - let stmt = db.createAsyncStatement('SELECT "name",\'dummy\' FROM "settings"'); - runStatement(stmt, result => { - allKeys = []; - for ( let key in result ) { - if ( result.hasOwnProperty(key) ) { - allKeys.push(key); - } - } - readNext(allKeys.pop(), callback); - }); - }; - - let markAsDone = function() { - close(); - }; - - return { - getNext: getNext, - markAsDone: markAsDone, - }; -}; - -/******************************************************************************/ diff --git a/platform/webext/chrome.manifest b/platform/webext/chrome.manifest deleted file mode 100644 index 75781cd6f3b2f..0000000000000 --- a/platform/webext/chrome.manifest +++ /dev/null @@ -1 +0,0 @@ -content ublock0 ./ diff --git a/platform/webext/from-legacy.js b/platform/webext/from-legacy.js deleted file mode 100644 index 93edba2be64c0..0000000000000 --- a/platform/webext/from-legacy.js +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a browser extension to block requests. - Copyright (C) 2017 Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -// For background page - -'use strict'; - -/******************************************************************************/ - -(function() { - let µb = µBlock; - - let migrateAll = function(callback) { - let mustRestart = false; - - let migrateKeyValue = function(details, callback) { - let bin = {}; - bin[details.key] = JSON.parse(details.value); - self.browser.storage.local.set(bin, callback); - mustRestart = true; - }; - - let migrateNext = function() { - self.browser.runtime.sendMessage({ what: 'webext:storageMigrateNext' }, response => { - if ( response.key === undefined ) { - if ( mustRestart ) { - self.browser.runtime.reload(); - } else { - callback(); - } - return; - } - migrateKeyValue(response, migrateNext); - }); - }; - - self.browser.storage.local.get('legacyStorageMigrated', bin => { - if ( bin && bin.legacyStorageMigrated ) { - self.browser.runtime.sendMessage({ what: 'webext:storageMigrateDone' }); - return callback(); - } - self.browser.storage.local.set({ legacyStorageMigrated: true }); - migrateNext(); - }); - }; - - µb.onBeforeStartQueue.push(migrateAll); -})(); - -/******************************************************************************/ diff --git a/platform/webext/install.rdf b/platform/webext/install.rdf deleted file mode 100644 index 48ba61afcf7f1..0000000000000 --- a/platform/webext/install.rdf +++ /dev/null @@ -1,38 +0,0 @@ - - - - uBlock0-webext@raymondhill.net - {version} - {name} - {description} - https://github.com/gorhill/uBlock - {author} - Deathamns - Alex Vallat - Manuel Reimer - 2 - true - true - true -{localized} - - - - - {{ec8030f7-c20a-464f-9b0e-13a3a9e97384}} - 52.0a1 - * - - - - - - - {{aa3c5121-dab2-40e2-81ca-7ea25febc110}} - 54.0 - * - - - - - diff --git a/platform/webext/manifest.json b/platform/webext/manifest.json index e44cb2aef474c..70e97de5f9bd6 100644 --- a/platform/webext/manifest.json +++ b/platform/webext/manifest.json @@ -1,81 +1,84 @@ { - "manifest_version": 2, - - "name": "uBlock Origin", - "version": "1.9.15.101", - - "applications": { - "gecko": { - "id": "uBlock0@raymondhill.net", - "strict_min_version": "52.0a1" - } - }, - - "commands": { - "launch-element-zapper": { - "suggested_key": { - }, - "description": "__MSG_popupTipZapper__" - }, - "launch-element-picker": { - "suggested_key": { - }, - "description": "__MSG_popupTipPicker__" - }, - "launch-logger": { - "suggested_key": { - }, - "description": "__MSG_popupTipLog__" - } - }, - "default_locale": "en", - "description": "__MSG_extShortDesc__", - "icons": { - "16": "img/icon_16.png", - "128": "img/icon_128.png" - }, - - "browser_action": { - "browser_style": false, - "default_icon": { - "19": "img/browsericons/icon19.png", - "38": "img/browsericons/icon38.png" - }, - "default_title": "uBlock Origin", - "default_popup": "popup.html" - }, - - "author": "All uBlock Origin contributors", - "background": { - "page": "background.html" - }, - "content_scripts": [ - { - "matches": ["http://*/*", "https://*/*"], - "js": ["js/vapi-client.js", "js/contentscript.js"], - "run_at": "document_start", - "all_frames": true - }, - { - "matches": ["http://*/*", "https://*/*"], - "js": ["js/scriptlets/subscriber.js"], - "run_at": "document_idle", - "all_frames": false - } - ], - "minimum_chrome_version": "26.0", - "options_ui": { - "page": "options_ui.html" - }, - "permissions": [ - "contextMenus", - "privacy", - "storage", - "tabs", - "webNavigation", - "webRequest", - "webRequestBlocking", - "" - ], - "short_name": "uBlock₀" + "applications":{ + "gecko":{ + "id":"uBlock0@raymondhill.net", + "strict_min_version":"52.0" + } + }, + "author":"All uBlock Origin contributors", + "background":{ + "page":"background.html" + }, + "browser_action":{ + "browser_style":false, + "default_icon":{ + "19":"img/browsericons/icon19.png", + "38":"img/browsericons/icon38.png" + }, + "default_title":"uBlock Origin", + "default_popup":"popup.html" + }, + "commands":{ + "launch-element-zapper":{ + "description":"__MSG_popupTipZapper__" + }, + "launch-element-picker":{ + "description":"__MSG_popupTipPicker__" + }, + "launch-logger":{ + "description":"__MSG_popupTipLog__" + } + }, + "content_scripts":[ + { + "matches":[ + "http://*/*", + "https://*/*", + "file://*/*" + ], + "js":[ + "/js/vapi.js", + "/js/vapi-client.js", + "/js/contentscript.js" + ], + "run_at":"document_start", + "all_frames":true + }, + { + "matches":[ + "http://*/*", + "https://*/*" + ], + "js":[ + "/js/scriptlets/subscriber.js" + ], + "run_at":"document_idle", + "all_frames":false + } + ], + "default_locale":"en", + "description":"__MSG_extShortDesc__", + "icons":{ + "16":"img/ublock.svg", + "48":"img/ublock.svg", + "96":"img/ublock.svg" + }, + "manifest_version":2, + "name":"uBlock Origin", + "options_ui":{ + "page":"dashboard.html", + "open_in_tab": true + }, + "permissions":[ + "contextMenus", + "privacy", + "storage", + "tabs", + "webNavigation", + "webRequest", + "webRequestBlocking", + "" + ], + "short_name":"uBlock₀", + "version":"1.9.15.101" } diff --git a/platform/webext/vapi-cachestorage.js b/platform/webext/vapi-cachestorage.js new file mode 100644 index 0000000000000..e95d22e549f71 --- /dev/null +++ b/platform/webext/vapi-cachestorage.js @@ -0,0 +1,261 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2016-2017 The uBlock Origin authors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* global indexedDB, IDBDatabase */ + +'use strict'; + +/******************************************************************************/ + +// The code below has been originally manually imported from: +// Commit: https://github.com/nikrolls/uBlock-Edge/commit/d1538ea9bea89d507219d3219592382eee306134 +// Commit date: 29 October 2016 +// Commit author: https://github.com/nikrolls +// Commit message: "Implement cacheStorage using IndexedDB" + +// The original imported code has been subsequently modified as it was not +// compatible with Firefox. +// (a Promise thing, see https://github.com/dfahlander/Dexie.js/issues/317) +// Furthermore, code to migrate from browser.storage.local to vAPI.cacheStorage +// has been added, for seamless migration of cache-related entries into +// indexedDB. + +vAPI.cacheStorage = (function() { + const STORAGE_NAME = 'uBlock0CacheStorage'; + var db; + var pending = []; + + // prime the db so that it's ready asap for next access. + getDb(noopfn); + + return { get, set, remove, clear, getBytesInUse }; + + function get(input, callback) { + if ( typeof callback !== 'function' ) { return; } + if ( input === null ) { + return getAllFromDb(callback); + } + var toRead, output = {}; + if ( typeof input === 'string' ) { + toRead = [ input ]; + } else if ( Array.isArray(input) ) { + toRead = input; + } else /* if ( typeof input === 'object' ) */ { + toRead = Object.keys(input); + output = input; + } + return getFromDb(toRead, output, callback); + } + + function set(input, callback) { + putToDb(input, callback); + } + + function remove(key, callback) { + deleteFromDb(key, callback); + } + + function clear(callback) { + clearDb(callback); + } + + function getBytesInUse(keys, callback) { + // TODO: implement this + callback(0); + } + + function genericErrorHandler(error) { + console.error('[%s]', STORAGE_NAME, error); + } + + function noopfn() { + } + + function processPendings() { + var cb; + while ( (cb = pending.shift()) ) { + cb(db); + } + } + + function getDb(callback) { + if ( pending === undefined ) { + return callback(); + } + if ( pending.length !== 0 ) { + return pending.push(callback); + } + if ( db instanceof IDBDatabase ) { + return callback(db); + } + pending.push(callback); + if ( pending.length !== 1 ) { return; } + // https://github.com/gorhill/uBlock/issues/3156 + // I have observed that no event was fired in Tor Browser 7.0.7 + + // medium security level after the request to open the database was + // created. When this occurs, I have also observed that the `error` + // property was already set, so this means uBO can detect here whether + // the database can be opened successfully. A try-catch block is + // necessary when reading the `error` property because we are not + // allowed to read this propery outside of event handlers in newer + // implementation of IDBRequest (my understanding). + var req; + try { + req = indexedDB.open(STORAGE_NAME, 1); + if ( req.error ) { + console.log(req.error); + req = undefined; + } + } catch(ex) { + } + if ( req === undefined ) { + processPendings(); + pending = undefined; + return; + } + req.onupgradeneeded = function(ev) { + req = undefined; + db = ev.target.result; + db.onerror = db.onabort = genericErrorHandler; + var table = db.createObjectStore(STORAGE_NAME, { keyPath: 'key' }); + table.createIndex('value', 'value', { unique: false }); + }; + req.onsuccess = function(ev) { + req = undefined; + db = ev.target.result; + db.onerror = db.onabort = genericErrorHandler; + processPendings(); + }; + req.onerror = req.onblocked = function() { + req = undefined; + console.log(this.error); + processPendings(); + pending = undefined; + }; + } + + function getFromDb(keys, store, callback) { + if ( typeof callback !== 'function' ) { return; } + if ( keys.length === 0 ) { return callback(store); } + var gotOne = function() { + if ( typeof this.result === 'object' ) { + store[this.result.key] = this.result.value; + } + }; + getDb(function(db) { + if ( !db ) { return callback(); } + var transaction = db.transaction(STORAGE_NAME); + transaction.oncomplete = + transaction.onerror = + transaction.onabort = function() { + return callback(store); + }; + var table = transaction.objectStore(STORAGE_NAME); + for ( var key of keys ) { + var req = table.get(key); + req.onsuccess = gotOne; + req.onerror = noopfn; + req = undefined; + } + }); + } + + function getAllFromDb(callback) { + if ( typeof callback !== 'function' ) { + callback = noopfn; + } + getDb(function(db) { + if ( !db ) { return callback(); } + var output = {}; + var transaction = db.transaction(STORAGE_NAME); + transaction.oncomplete = + transaction.onerror = + transaction.onabort = function() { + callback(output); + }; + var table = transaction.objectStore(STORAGE_NAME), + req = table.openCursor(); + req.onsuccess = function(ev) { + var cursor = ev.target.result; + if ( !cursor ) { return; } + output[cursor.key] = cursor.value; + cursor.continue(); + }; + }); + } + + function putToDb(input, callback) { + if ( typeof callback !== 'function' ) { + callback = noopfn; + } + var keys = Object.keys(input); + if ( keys.length === 0 ) { return callback(); } + getDb(function(db) { + if ( !db ) { return callback(); } + var transaction = db.transaction(STORAGE_NAME, 'readwrite'); + transaction.oncomplete = + transaction.onerror = + transaction.onabort = callback; + var table = transaction.objectStore(STORAGE_NAME); + for ( var key of keys ) { + var entry = {}; + entry.key = key; + entry.value = input[key]; + table.put(entry); + entry = undefined; + } + }); + } + + function deleteFromDb(input, callback) { + if ( typeof callback !== 'function' ) { + callback = noopfn; + } + var keys = Array.isArray(input) ? input.slice() : [ input ]; + if ( keys.length === 0 ) { return callback(); } + getDb(function(db) { + if ( !db ) { return callback(); } + var transaction = db.transaction(STORAGE_NAME, 'readwrite'); + transaction.oncomplete = + transaction.onerror = + transaction.onabort = callback; + var table = transaction.objectStore(STORAGE_NAME); + for ( var key of keys ) { + table.delete(key); + } + }); + } + + function clearDb(callback) { + if ( typeof callback !== 'function' ) { + callback = noopfn; + } + getDb(function(db) { + if ( !db ) { return callback(); } + var req = db.transaction(STORAGE_NAME, 'readwrite') + .objectStore(STORAGE_NAME) + .clear(); + req.onsuccess = req.onerror = callback; + }); + } +}()); + +/******************************************************************************/ diff --git a/platform/webext/vapi-usercss.js b/platform/webext/vapi-usercss.js new file mode 100644 index 0000000000000..b9ef068e341ce --- /dev/null +++ b/platform/webext/vapi-usercss.js @@ -0,0 +1,233 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2017 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'; + +// For content pages + +if ( typeof vAPI === 'object' ) { // >>>>>>>> start of HUGE-IF-BLOCK + +/******************************************************************************/ +/******************************************************************************/ + +vAPI.userStylesheet = { + added: new Set(), + removed: new Set(), + apply: function(callback) { + if ( this.added.size === 0 && this.removed.size === 0 ) { return; } + vAPI.messaging.send('vapi', { + what: 'userCSS', + add: Array.from(this.added), + remove: Array.from(this.removed) + }, callback); + this.added.clear(); + this.removed.clear(); + }, + add: function(cssText, now) { + if ( cssText === '' ) { return; } + this.added.add(cssText); + if ( now ) { this.apply(); } + }, + remove: function(cssText, now) { + if ( cssText === '' ) { return; } + this.removed.add(cssText); + if ( now ) { this.apply(); } + } +}; + +/******************************************************************************/ + +vAPI.DOMFilterer = function() { + this.commitTimer = new vAPI.SafeAnimationFrame(this.commitNow.bind(this)); + this.domIsReady = document.readyState !== 'loading'; + this.disabled = false; + this.listeners = []; + this.filterset = new Set(); + this.excludedNodeSet = new WeakSet(); + this.addedCSSRules = new Set(); + + if ( this.domIsReady !== true ) { + document.addEventListener('DOMContentLoaded', () => { + this.domIsReady = true; + this.commit(); + }); + } +}; + +vAPI.DOMFilterer.prototype = { + reOnlySelectors: /\n\{[^\n]+/g, + + // Here we will deal with: + // - Injecting low priority user styles; + // - Notifying listeners about changed filterset. + commitNow: function() { + this.commitTimer.clear(); + var userStylesheet = vAPI.userStylesheet; + for ( var entry of this.addedCSSRules ) { + if ( + this.disabled === false && + entry.lazy && + entry.injected === false + ) { + userStylesheet.add( + entry.selectors + '\n{' + entry.declarations + '}' + ); + } + } + this.addedCSSRules.clear(); + userStylesheet.apply(); + }, + + commit: function(commitNow) { + if ( commitNow ) { + this.commitTimer.clear(); + this.commitNow(); + } else { + this.commitTimer.start(); + } + }, + + addCSSRule: function(selectors, declarations, details) { + if ( selectors === undefined ) { return; } + var selectorsStr = Array.isArray(selectors) + ? selectors.join(',\n') + : selectors; + if ( selectorsStr.length === 0 ) { return; } + if ( details === undefined ) { details = {}; } + var entry = { + selectors: selectorsStr, + declarations, + lazy: details.lazy === true, + injected: details.injected === true + }; + this.addedCSSRules.add(entry); + this.filterset.add(entry); + if ( + this.disabled === false && + entry.lazy !== true && + entry.injected !== true + ) { + vAPI.userStylesheet.add(selectorsStr + '\n{' + declarations + '}'); + } + this.commit(); + if ( this.hasListeners() ) { + this.triggerListeners({ + declarative: [ [ selectorsStr, declarations ] ] + }); + } + }, + + addListener: function(listener) { + if ( this.listeners.indexOf(listener) !== -1 ) { return; } + this.listeners.push(listener); + }, + + removeListener: function(listener) { + var pos = this.listeners.indexOf(listener); + if ( pos === -1 ) { return; } + this.listeners.splice(pos, 1); + }, + + hasListeners: function() { + return this.listeners.length !== 0; + }, + + triggerListeners: function(changes) { + var i = this.listeners.length; + while ( i-- ) { + this.listeners[i].onFiltersetChanged(changes); + } + }, + + excludeNode: function(node) { + this.excludedNodeSet.add(node); + this.unhideNode(node); + }, + + unexcludeNode: function(node) { + this.excludedNodeSet.delete(node); + }, + + hideNode: function(node) { + if ( this.excludedNodeSet.has(node) ) { return; } + if ( this.hideNodeAttr === undefined ) { return; } + node.setAttribute(this.hideNodeAttr, ''); + if ( this.hideNodeStyleSheetInjected === false ) { + this.hideNodeStyleSheetInjected = true; + this.addCSSRule( + '[' + this.hideNodeAttr + ']', + 'display:none!important;' + ); + } + }, + + unhideNode: function(node) { + if ( this.hideNodeAttr === undefined ) { return; } + node.removeAttribute(this.hideNodeAttr); + }, + + toggle: function(state, callback) { + if ( state === undefined ) { state = this.disabled; } + if ( state !== this.disabled ) { return; } + this.disabled = !state; + var userStylesheet = vAPI.userStylesheet; + for ( var entry of this.filterset ) { + var rule = entry.selectors + '\n{' + entry.declarations + '}'; + if ( this.disabled ) { + userStylesheet.remove(rule); + } else { + userStylesheet.add(rule); + } + } + userStylesheet.apply(callback); + }, + + getAllSelectors_: function(all) { + var out = { + declarative: [] + }; + for ( var entry of this.filterset ) { + if ( all === false && entry.internal ) { continue; } + out.declarative.push([ entry.selectors, entry.declarations ]); + } + return out; + }, + + getFilteredElementCount: function() { + let details = this.getAllSelectors_(true); + if ( Array.isArray(details.declarative) === false ) { return 0; } + let selectors = details.declarative.reduce(function(acc, entry) { + acc.push(entry[0]); + return acc; + }, []); + if ( selectors.length === 0 ) { return 0; } + return document.querySelectorAll(selectors.join(',\n')).length; + }, + + getAllSelectors: function() { + return this.getAllSelectors_(false); + } +}; + +/******************************************************************************/ +/******************************************************************************/ + +} // <<<<<<<< end of HUGE-IF-BLOCK diff --git a/platform/webext/vapi-webrequest.js b/platform/webext/vapi-webrequest.js new file mode 100644 index 0000000000000..2caeb33e7bb51 --- /dev/null +++ b/platform/webext/vapi-webrequest.js @@ -0,0 +1,198 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2017 Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +// For background page + +'use strict'; + +/******************************************************************************/ + +vAPI.net = { + onBeforeRequest: {}, + onBeforeMaybeSpuriousCSPReport: {}, + onHeadersReceived: {}, + nativeCSPReportFiltering: true +}; + +/******************************************************************************/ + +vAPI.net.registerListeners = function() { + + // https://github.com/gorhill/uBlock/issues/2950 + // Firefox 55 does not normalize URLs to ASCII, uBO must do this itself. + // https://bugzilla.mozilla.org/show_bug.cgi?id=945240 + var mustPunycode = false; + (function() { + if ( + typeof browser === 'object' && + browser !== null && + browser.runtime instanceof Object && + typeof browser.runtime.getBrowserInfo === 'function' + ) { + browser.runtime.getBrowserInfo().then(info => { + mustPunycode = info.name === 'Firefox' && + /^5[0-6]\./.test(info.version); + }); + } + })(); + + var wrApi = browser.webRequest; + + // legacy Chromium understands only these network request types. + var validTypes = { + main_frame: true, + sub_frame: true, + stylesheet: true, + script: true, + image: true, + object: true, + xmlhttprequest: true, + other: true + }; + // modern Chromium/WebExtensions: more types available. + if ( wrApi.ResourceType ) { + for ( let typeKey in wrApi.ResourceType ) { + if ( wrApi.ResourceType.hasOwnProperty(typeKey) ) { + validTypes[wrApi.ResourceType[typeKey]] = true; + } + } + } + + var denormalizeTypes = function(aa) { + if ( aa.length === 0 ) { + return Object.keys(validTypes); + } + var out = []; + var i = aa.length, + type, + needOther = true; + while ( i-- ) { + type = aa[i]; + if ( validTypes[type] ) { + out.push(type); + } + if ( type === 'other' ) { + needOther = false; + } + } + if ( needOther ) { + out.push('other'); + } + return out; + }; + + var punycode = self.punycode; + var reAsciiHostname = /^https?:\/\/[0-9a-z_.:@-]+[/?#]/; + var parsedURL = new URL('about:blank'); + + var normalizeRequestDetails = function(details) { + details.tabId = details.tabId.toString(); + + if ( mustPunycode && !reAsciiHostname.test(details.url) ) { + parsedURL.href = details.url; + details.url = details.url.replace( + parsedURL.hostname, + punycode.toASCII(parsedURL.hostname) + ); + } + + var type = details.type; + + // https://github.com/gorhill/uBlock/issues/1493 + // Chromium 49+/WebExtensions support a new request type: `ping`, + // which is fired as a result of using `navigator.sendBeacon`. + if ( type === 'ping' ) { + details.type = 'beacon'; + return; + } + + if ( type === 'imageset' ) { + details.type = 'image'; + return; + } + }; + + var onBeforeRequestClient = this.onBeforeRequest.callback; + var onBeforeRequest = function(details) { + normalizeRequestDetails(details); + return onBeforeRequestClient(details); + }; + + if ( onBeforeRequest ) { + let urls = this.onBeforeRequest.urls || ['']; + let types = this.onBeforeRequest.types || undefined; + if ( + (validTypes.websocket) && + (types === undefined || types.indexOf('websocket') !== -1) && + (urls.indexOf('') === -1) + ) { + if ( urls.indexOf('ws://*/*') === -1 ) { + urls.push('ws://*/*'); + } + if ( urls.indexOf('wss://*/*') === -1 ) { + urls.push('wss://*/*'); + } + } + wrApi.onBeforeRequest.addListener( + onBeforeRequest, + { urls: urls, types: types }, + this.onBeforeRequest.extra + ); + } + + // https://github.com/gorhill/uBlock/issues/3140 + if ( typeof this.onBeforeMaybeSpuriousCSPReport.callback === 'function' ) { + wrApi.onBeforeRequest.addListener( + this.onBeforeMaybeSpuriousCSPReport.callback, + { + urls: [ 'http://*/*', 'https://*/*' ], + types: [ 'csp_report' ] + }, + [ 'blocking', 'requestBody' ] + ); + } + + var onHeadersReceivedClient = this.onHeadersReceived.callback, + onHeadersReceivedClientTypes = this.onHeadersReceived.types.slice(0), + onHeadersReceivedTypes = denormalizeTypes(onHeadersReceivedClientTypes); + var onHeadersReceived = function(details) { + normalizeRequestDetails(details); + if ( + onHeadersReceivedClientTypes.length !== 0 && + onHeadersReceivedClientTypes.indexOf(details.type) === -1 + ) { + return; + } + return onHeadersReceivedClient(details); + }; + + if ( onHeadersReceived ) { + let urls = this.onHeadersReceived.urls || ['']; + let types = onHeadersReceivedTypes; + wrApi.onHeadersReceived.addListener( + onHeadersReceived, + { urls: urls, types: types }, + this.onHeadersReceived.extra + ); + } +}; + +/******************************************************************************/ diff --git a/src/1p-filters.html b/src/1p-filters.html index b1146a09d1d52..f2da57cb919db 100644 --- a/src/1p-filters.html +++ b/src/1p-filters.html @@ -26,6 +26,7 @@

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

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

تفعيل هذا الخيار من شأنه زيادة أثر الذّاكرة uBlock₀<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "منع الخطوط البعيدة", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"تجاهل الفلاتر التجميلية العامة", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "منع تقارير الـ CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

الفلاتر التجميلية العامة هي الفلاتر التجميلية التي تنطبق على كل مواقع الإنترنت.

رغم أن uBlock₀ يتعامل معها بكفاءة، لكن يبقى من المرجح أن تستهلك المزيد من الموارد من الذاكرة و قوة المعالج على بعض الصفحات، خاصّةً الصفحات الكبيرة أو الممتدة

إهمال هذا النوع من الفلترة يلغي إستهلاك الذاكرة و قوة المعالج التي تستخدم في صفحات الإنترنت والناتجة عن التعامل مع اللفلاتر التجميلية، بالإضافة إلى تقليل إستهلاك الذاكرة من طرف uBlock₀ بشكلٍ عام.

من الأفضل أن تُفَعَّل هذه الخاصية على الأجهزة الأقل كفاءة.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "المساحة المستخدمة: {{value}} بايت", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"قائمة المواقع المحجوبة", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "آخر إسترجاع:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"حفظ التغيرات", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "آخر نسخ إحتياطي:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"اعلانات", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} من فلاتر الشبكه + {{cosmeticFilterCount}} فلاتر تجميليه:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"خصوصيه", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} تم استعماله من {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"مواقع مصابه او تحتوي على فايروسات", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "تحديث تلقائي للستات الفلاتر", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"مواقع الاجتماعيه", - "description":"English: Social" + "3pUpdateNow": { + "message": "حدث الان", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"متعددة الأغراض", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "نظف جميع المخابئ", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"المناطق واللغات", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "تحليل وتطبيق فلاتر التجميليه", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"مخصصه", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

تفعيل هذا الخيار من شأنه زيادة أثر الذّاكرة uBlock₀<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"رابط واحد كل سطر. روابط التي تحتوي على ‘!’ سوف يتم تجاهلها . الروابط الغير صحيحه سوف ايضاً تجاهلها .", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "تجاهل الفلاتر التجميلية العامة", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"إنتهت صلاحيته.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

الفلاتر التجميلية العامة هي الفلاتر التجميلية التي تنطبق على كل مواقع الإنترنت.

رغم أن uBlock₀ يتعامل معها بكفاءة، لكن يبقى من المرجح أن تستهلك المزيد من الموارد من الذاكرة و قوة المعالج على بعض الصفحات، خاصّةً الصفحات الكبيرة أو الممتدة

إهمال هذا النوع من الفلترة يلغي إستهلاك الذاكرة و قوة المعالج التي تستخدم في صفحات الإنترنت والناتجة عن التعامل مع اللفلاتر التجميلية، بالإضافة إلى تقليل إستهلاك الذاكرة من طرف uBlock₀ بشكلٍ عام.

من الأفضل أن تُفَعَّل هذه الخاصية على الأجهزة الأقل كفاءة.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"آخر تحديث: {{ago}}. \nانقر لفرض التحديث.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "قائمة المواقع المحجوبة", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"جار التحديث...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "حفظ التغيرات", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"حدث خطأ في الشبكة منع تحديث المورد.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "اعلانات", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"كل سطر يمكن ان يتحمل على فلتر واحد. يمكن ان يكون الفلتر رابط موقع او فلتر متعارف مع نظام AdBlock Plus. روابط التي تحتوي على ‘!’ سوف يتم تجاهلها.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "خصوصيه", + "description": "English: Privacy" }, - "1pImport":{ - "message":"استيراد", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "مواقع مصابه او تحتوي على فايروسات", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"تصدير", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "عناصر مزعجة", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "متعددة الأغراض", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"حفظ التغيرات", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "المناطق واللغات", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"قواعد دائمة", - "description":"header" + "3pGroupCustom": { + "message": "مخصصه", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"قواعد مؤقتة", - "description":"header" + "3pExternalListsHint": { + "message": "رابط واحد كل سطر. روابط التي تحتوي على ‘!’ سوف يتم تجاهلها . الروابط الغير صحيحه سوف ايضاً تجاهلها .", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"إلغاء", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "إنتهت صلاحيته.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"تطبق", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "آخر تحديث: {{ago}}. \nانقر لفرض التحديث.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"تعديل", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "جار التحديث...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"حفظ", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "حدث خطأ في الشبكة منع تحديث المورد.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"إلغاء", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "كل سطر يمكن ان يتحمل على فلتر واحد. يمكن ان يكون الفلتر رابط موقع او فلتر متعارف مع نظام AdBlock Plus. روابط التي تحتوي على ‘!’ سوف يتم تجاهلها.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"الاستيراد من ملف...", - "description":"" + "1pImport": { + "message": "استيراد", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"تصدير إلى ملف", - "description":"" + "1pExport": { + "message": "تصدير", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"قائمة قواعد الفلترات الديناميكية الخاصة بك.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "حفظ التغيرات", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"صياغة القواعد: مصدر نوع وجهة العمل<\/code> (تعليمات كاملة<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "قواعد دائمة", + "description": "header" }, - "whitelistPrompt":{ - "message":"القائمة البيضاء تشيرللصفحات التي سوف يتم تعطيل uBlock₀ فيها. مدخل واحد لكل سطر. الفلاتر الغير صحيحه سوف يتم تجاهلها وإستبعادها.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "قواعد مؤقتة", + "description": "header" }, - "whitelistImport":{ - "message":"استيراد", - "description":"English: Import and append" + "rulesRevert": { + "message": "إلغاء", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"تصدير", - "description":"English: Export" + "rulesCommit": { + "message": "تطبق", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "تعديل", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"حفظ التغيرات", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "حفظ", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"النوع", - "description":"English: Type" + "rulesEditDiscard": { + "message": "إلغاء", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"الموقع", - "description":"English: Domain" + "rulesImport": { + "message": "الاستيراد من ملف...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"رابط الموقع", - "description":"English: URL" + "rulesExport": { + "message": "تصدير إلى ملف", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"فلتر", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"كل", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "قائمة قواعد الفلترات الديناميكية الخاصة بك.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"خلف الكواليس", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "صياغة القواعد: مصدر نوع وجهة العمل<\/code> (تعليمات كاملة<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"فلتر سجل الإدخالات", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "القائمة البيضاء تشيرللصفحات التي سوف يتم تعطيل uBlock₀ فيها. مدخل واحد لكل سطر. الفلاتر الغير صحيحه سوف يتم تجاهلها وإستبعادها.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"العدد الأقصى للإدخالات في السجلات", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "استيراد", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"حالة:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "تصدير", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"نوع:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"فلترات الروابط الديناميكية", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "حفظ التغيرات", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"فلترة ثابتة", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "النوع", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} طلبات شبكة {{type}} {{br}}اللتي تحتوي عنوان الرابط {{url}} {{br}}من المصدر {{origin}},{{br}}{{importance}} هناك فلتر استثناء مطابق.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "الموقع", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"حجب", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "رابط الموقع", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"سماح", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "فلتر", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"نوع “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "كل", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"أي نوع", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "خلف الكواليس", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"من “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "فلتر سجل الإدخالات", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"من أي مكان", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "العدد الأقصى للإدخالات في السجلات", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"باستثناء إذا", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "حالة:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"حتى لو", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "نوع:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"فلتر ثابت {{filter}} موجود على:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "فلترات الروابط الديناميكية", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"سجل التغيير", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "فلترة ثابتة", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"الويكي (Wiki)", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} طلبات شبكة {{type}} {{br}}اللتي تحتوي عنوان الرابط {{url}} {{br}}من المصدر {{origin}},{{br}}{{importance}} هناك فلتر استثناء مطابق.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"الدعم", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "حجب", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"اكواد البرنامج (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "سماح", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"المساهمين", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "نوع “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"النسخ الإحتياطي لملف", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "أي نوع", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"إحتياط-ublock-الخاص-بي_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "من “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"إسترجع من الملف...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "من أي مكان", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"إعادة الضبط للوضع الافتراضي...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "باستثناء إذا", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"كل إعداداتك سوف يتم كتابتها بإستعمال البيانات التي تم نسخها إحتياطيا على {{time}}، و سيعيد uBlock₀ التشغيل.\n\nأعد كتابة كل الإعدادات الموجود بإستخدام البيانات التي تم نسخها إحتياطيا؟", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "حتى لو", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"تعذر قراءة البيانات أو إنها غير صالحة", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "فلتر ثابت {{filter}} موجود على:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"كل إعداداتك سيتم إلغائها، و سيتم إعادة تشغيل \"uBlock₀\".\n\n\nإعادة ضبط \"uBlock₀\" على الإعدادات الأصلية؟", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "سجل التغيير", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"خطأ في الشبكة: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "الويكي (Wiki)", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀ : إضافة الرابط التالي للقوائم الفلترات الخاصة لك؟\n\nعنوان : \"{{title}}\"\nرابط : {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "الدعم", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"منذ دقيقة", - "description":"English: a minute ago" + "aboutCode": { + "message": "اكواد البرنامج (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"منذ {{value}} دقائق", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "المساهمين", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"منذ ساعة", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "النسخ الإحتياطي لملف", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"منذ {{value}} ساعات", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "إحتياط-ublock-الخاص-بي_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"قبل يوم واحد", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "إسترجع من الملف...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"منذ {{value}} أيام", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "إعادة الضبط للوضع الافتراضي...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"عرض لوحة التحكم", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "كل إعداداتك سوف يتم كتابتها بإستعمال البيانات التي تم نسخها إحتياطيا على {{time}}، و سيعيد uBlock₀ التشغيل.\n\nأعد كتابة كل الإعدادات الموجود بإستخدام البيانات التي تم نسخها إحتياطيا؟", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"عرض سجل الإتصال بالشبكة", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "تعذر قراءة البيانات أو إنها غير صالحة", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"تعطيل", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "كل إعداداتك سيتم إلغائها، و سيتم إعادة تشغيل \"uBlock₀\".\n\n\nإعادة ضبط \"uBlock₀\" على الإعدادات الأصلية؟", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ منع الصفحة التالية من التحميل:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "خطأ في الشبكة: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"بسبب الفلتر التالي", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀ : إضافة الرابط التالي للقوائم الفلترات الخاصة لك؟\n\nعنوان : \"{{title}}\"\nرابط : {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"دون معلمات", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "منذ دقيقة", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"موجود في:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "منذ {{value}} دقائق", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"العودة للخلف", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "منذ ساعة", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"أغلق هذه النافذة", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "منذ {{value}} ساعات", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"تعطيل الحجب الصارم على {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "قبل يوم واحد", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"مؤقتا", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "منذ {{value}} أيام", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"بشكل دائم", - "description":"English: Permanently" + "showDashboardButton": { + "message": "عرض لوحة التحكم", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"التصدير إلى سحابة التخزين", - "description":"tooltip" + "showNetworkLogButton": { + "message": "عرض سجل الإتصال بالشبكة", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"إستيراد من سحابة التخزين", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "تعطيل", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"إستيراد التخزين من السحابية و دمجه مع الإعدادات الحالية", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ منع الصفحة التالية من التحميل:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "بسبب الفلتر التالي", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"إسم هذا الجهاز:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "دون معلمات", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"تحذير! تغيير هذه الإعدادات المتقدمة يكون على مسؤوليتك.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "موجود في:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"تطبيق", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "العودة للخلف", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"حفظ التغييرات", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "أغلق هذه النافذة", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"إلغاء", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "تعطيل الحجب الصارم على {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"بايت", - "description":"" + "docblockedDisableTemporary": { + "message": "مؤقتا", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"السماح مؤقتا لعناصر الوسائط كبيرة", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "بشكل دائم", + "description": "English: Permanently" }, - "dummy":{ - "message":"يجب أن يكون هذا الإدخال آخر واحد", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "التصدير إلى سحابة التخزين", + "description": "tooltip" + }, + "cloudPull": { + "message": "إستيراد من سحابة التخزين", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "إستيراد التخزين من السحابية و دمجه مع الإعدادات الحالية", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "إسم هذا الجهاز:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "تحذير! تغيير هذه الإعدادات المتقدمة يكون على مسؤوليتك.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "تطبيق", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "حفظ التغييرات", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "إلغاء", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "بايت", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "السماح مؤقتا لعناصر الوسائط كبيرة", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "يجب أن يكون هذا الإدخال آخر واحد", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/bg/messages.json b/src/_locales/bg/messages.json index 738979854c4d9..efdce303c4fb4 100644 --- a/src/_locales/bg/messages.json +++ b/src/_locales/bg/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Най-накрая, ефективен рекламен блокер с малки изисквания за процесор и памет.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Най-накрая, ефективен рекламен блокер с малки изисквания за процесор и памет.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Табло", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Табло", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Настройки", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Настройки", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Филтри от 3-ти лица", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Филтри от 3-ти лица", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Мои филтри", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Мои филтри", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Мои правила", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Мои правила", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Изключения", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Изключения", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Дневник на мрежовите заявки", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Дневник на мрежовите заявки", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Относно", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Относно", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Разширени настройки", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Разширени настройки", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Щракване: изключва\/включва uBlock₀ за този сайт.\n\nCtrl + щракване: изключва uBlock₀ само за тази страница.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Щракване: изключва\/включва uBO за този сайт.\n\nCtrl + щракване: изключва uBO само за тази страница.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"блокирани заявки", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Щракване: изключва uBO за този сайт.\n\nCtrl + щракване: изключва uBO само за тази страница.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"на тази страница", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Щракнете, за да включите uBO за този сайт.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} или {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "блокирани заявки", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"от инсталацията", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "на тази страница", + "description": "English: on this page" }, - "popupOr":{ - "message":"или", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} или {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Табло с настройки", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "общо досега", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Премахване на отделен елемент", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "или", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Блокиране на отделен елемент", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Табло с настройки", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Преглед на дневника със заявки", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Временно блокиране на отделен елемент", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Превключване блокирането на всички изскачащи прозорци за този сайт", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Блокиране на отделен елемент", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Превключване блокирането на големи мултимедийни елементи за този сайт", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Преглед на дневника със заявки", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Превключване на козметичното филтриране за този сайт", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Превключване блокирането на всички изскачащи прозорци за този сайт", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Превключване блокирането на външни шрифтове за този сайт", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Щракнете, за да блокирате всички изскачащи прозорци за този сайт", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Глобални правила: тази колона е за правила, прилагани за всички сайтове.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Щракнете, за да разрешите всички изскачащи прозорци за този сайт", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Локални правила: тази колона е за правила, прилагани само за текущият сайт. Локалните правила заместват глобалните.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Превключване блокирането на големи мултимедийни елементи за този сайт", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Щракнете, за да направите промените постоянни.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Щракнете, за да блокирате големите мултимедийни елементи за този сайт", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Щракнете, за да отмените вашите промени.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Щракнете, за да разрешите големите мултимедийни елементи за този сайт", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"Всички", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Превключване на козметичното филтриране за този сайт", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"Изображения", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Щракнете, за да изключите козметичните филтри за този сайт", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"3-ти лица", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Щракнете, за да включите козметичните филтри за този сайт", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/изображения от 3-ти лица", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Превключване блокирането на външни шрифтове за този сайт", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"Вградени скриптове", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Щракнете, за да блокирате външните шрифтове за този сайт", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Скриптове от 1-ви лица", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Щракнете, за да разрешите външните шрифтове за този сайт", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"Скриптове от 3-ти лица", - "description":"" + "popupTipGlobalRules": { + "message": "Глобални правила: тази колона е за правила, прилагани за всички сайтове.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Рамки от 3-ти лица", - "description":"" + "popupTipLocalRules": { + "message": "Локални правила: тази колона е за правила, прилагани само за текущият сайт. Локалните правила заместват глобалните.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"свързани домейни", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Щракнете, за да направите промените постоянни.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} от {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Щракнете, за да отмените направените промени.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Създаване", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "Всички", + "description": "" }, - "pickerPick":{ - "message":"Нов избор", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "Изображения", + "description": "" }, - "pickerQuit":{ - "message":"Отказ", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "3-ти лица", + "description": "" }, - "pickerPreview":{ - "message":"Преглед", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "CSS\/изображения от 3-ти лица", + "description": "" }, - "pickerNetFilters":{ - "message":"Мрежови филтри", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "Вградени скриптове", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Козметични филтри", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Скриптове от 1-ви лица", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Щракване, Ctrl + щракване", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "Скриптове от 3-ти лица", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Блокиране на елемент", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Рамки от 3-ти лица", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Скриване подсказващите текстове на блокираните елементи", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "свързани домейни", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Показване на брояч в иконката за блокираните заявки", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} от {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Изключване на поясненията", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Създаване", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Използване на контекстното меню, когато е възможно", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Нов избор", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Достъпност за хора с цветна слепота", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Отказ", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Включване на поддръжка за съхранение в облак", - "description":"" + "pickerPreview": { + "message": "Преглед", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Аз съм опитен потребител (Допълнително четиво<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Мрежови филтри", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"разширени настройки", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Козметични филтри", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Изключване на предварителното извличане (за избягване на всяка връзка за блокираните мрежови заявки)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Щракване, Ctrl + щракване", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Изключване на проверката за препратки", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Блокиране на елемент", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Предотвратяване изтичането на локалния IP адрес през WebRTC", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Скриване подсказващите текстове на блокираните елементи", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Поведение по подразбиране", - "description":"" + "settingsIconBadgePrompt": { + "message": "Показване на брояч в иконката за блокираните заявки", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Тези поведения по подразбиране могат да бъдат отменени за отделни сайтове", - "description":"" + "settingsTooltipsPrompt": { + "message": "Изключване на поясненията", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Изключване на козметичното филтриране", - "description":"" + "settingsContextMenuPrompt": { + "message": "Използване на контекстното меню, когато е възможно", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Блокиране на мултимедийни елементи, по-големи от {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Достъпност за хора с цветна слепота", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Блокиране на външни шрифтове", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Включване на поддръжка за съхранение в облак", + "description": "" }, - "settingsStorageUsed":{ - "message":"Използвана памет за съхранение: {{value}} байта", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Аз съм опитен потребител (Допълнително четиво<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Последно възстановяване:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "разширени настройки", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Последно резервно копие:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Изключване на предварителното извличане (за избягване на всяка връзка за блокираните мрежови заявки)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} мрежови филтри + {{cosmeticFilterCount}} козметични филтри от:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Изключване на проверката за препратки", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"използвани {{used}} от общо {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Предотвратяване изтичането на локалния IP адрес през WebRTC", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Автоматично актуализиране на списъците с филтри.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Поведение по подразбиране", + "description": "" }, - "3pUpdateNow":{ - "message":"Актуализиране", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Тези поведения по подразбиране могат да бъдат отменени за отделни сайтове", + "description": "" }, - "3pPurgeAll":{ - "message":"Изчистване на цялата кеш памет", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Изключване на козметичното филтриране", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Анализиране и прилагане на козметичните филтри.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Блокиране на мултимедийни елементи, по-големи от {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Активирането на тази опция увеличава паметта, която uBlock₀ използва.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Блокиране на външни шрифтове", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Игнориране на общите козметични филтри.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Блокиране на CSP отчетите", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Тази опция е препоръчително да се използва на по-слаби устройства.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Използвана памет за съхранение: {{value}} байта", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Списъци на блокираните хостове", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Последно възстановяване:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Прилагане на промените", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Последно резервно копие:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Реклами", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} мрежови филтри + {{cosmeticFilterCount}} козметични филтри от:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Поверителност", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "използвани {{used}} от общо {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Вредоносни домейни", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Автоматично актуализиране на списъците с филтри", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Социални мрежи", - "description":"English: Social" + "3pUpdateNow": { + "message": "Актуализиране", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Универсални", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Изчистване на цялата кеш памет", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Региони, езици", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Анализиране и прилагане на козметичните филтри", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Потребителски", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Активирането на тази опция увеличава паметта, която uBlock₀ използва.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Един адрес на ред. Редовете с представка ‘!’ ще бъдат игнорирани. Невалидните адреси също ще бъдат игнорирани.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Игнориране на общите козметични филтри", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Остарял", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Тази опция е препоръчително да се използва на по-слаби устройства.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Последна актуализация: {{ago}}\nЩракнете за принудително актуализиране.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Списъци на блокираните хостове", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Актуализиране...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Прилагане на промените", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Актуализирането на ресурса е прекратено заради грешка в мрежата.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Реклами", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Един филтър на ред. Това може да бъде обикновен адрес или съвместим с Adblock Plus филтър. Редовете с представка ‘!’ ще бъдат игнорирани.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Поверителност", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Внасяне от файл...", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Вредоносни домейни", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Изнасяне във файл", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Досадни неща", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"моите-ublock-статични-филтри_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Универсални", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Прилагане на промените", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Региони, езици", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Постоянни правила", - "description":"header" + "3pGroupCustom": { + "message": "Потребителски", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Временни правила", - "description":"header" + "3pExternalListsHint": { + "message": "Един адрес на ред. Редовете с представка ‘!’ ще бъдат игнорирани. Невалидните адреси също ще бъдат игнорирани.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Връщане", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Остарял", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Приемане", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Последна актуализация: {{ago}}\nЩракнете за принудително актуализиране.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Редактиране", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Актуализиране...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Запазване", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Актуализирането на ресурса е прекратено заради грешка в мрежата.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Отказ на промените", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Един филтър на ред. Това може да бъде обикновен адрес или съвместим с Adblock Plus филтър. Редовете с представка ‘!’ ще бъдат игнорирани.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Внасяне от файл...", - "description":"" + "1pImport": { + "message": "Внасяне от файл...", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Изнасяне във файл", - "description":"" + "1pExport": { + "message": "Изнасяне във файл", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"моите-ublock-динамични-правила_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "моите-ublock-статични-филтри_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Списък на вашите динамични правила за филтриране.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Прилагане на промените", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Синтаксис на правилото: източник цел тип действие<\/code> (пълна документация<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Постоянни правила", + "description": "header" }, - "whitelistPrompt":{ - "message":"Списък на вашите адреси, за които uBlock₀ ще бъде изключен. Един елемент на ред. Невалидните адреси ще бъдат игнорирани.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Временни правила", + "description": "header" }, - "whitelistImport":{ - "message":"Внасяне от файл...", - "description":"English: Import and append" + "rulesRevert": { + "message": "Връщане", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Изнасяне във файл", - "description":"English: Export" + "rulesCommit": { + "message": "Приемане", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"моите-ublock-изключения_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Редактиране", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Прилагане на промените", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Запазване", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Тип", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Отказ на промените", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Домейн", - "description":"English: Domain" + "rulesImport": { + "message": "Внасяне от файл...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL адрес", - "description":"English: URL" + "rulesExport": { + "message": "Изнасяне във файл", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Филтър", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "моите-ublock-динамични-правила_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Всички", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Списък на вашите динамични правила за филтриране.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Скрити", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Синтаксис на правилото: източник цел тип действие<\/code> (пълна документация<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"филтриране на записи", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Списък на вашите адреси, за които uBlock₀ ще бъде изключен. Един елемент на ред. Невалидните адреси ще бъдат игнорирани.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Максимален брой записи в дневника", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Внасяне от файл...", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Контекст:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Изнасяне във файл", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Тип:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "моите-ublock-изключения_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Динамично филтриране", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Прилагане на промените", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Статично филтриране", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Тип", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} на мрежови заявки от {{type}} за адрес, съвпадащ с {{br}}{{url}}{{br}}и произлизащ от {{origin}},{{importance}} има филтър със съвпадащи изключения.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Домейн", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Блокиране", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL адрес", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Разрешаване", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Филтър", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"тип \"{{type}}\"", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Всички", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"всеки тип", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Скрити", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"\"{{origin}}\"", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "филтриране на записи", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"където и да е", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Максимален брой записи в дневника", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"с изключение, когато", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Контекст:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"дори ако", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Тип:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Статичният филтър {{filter}} е намерен в:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Динамично филтриране", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Списък с промени", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Статично филтриране", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} на мрежови заявки от {{type}} за адрес, съвпадащ с {{br}}{{url}}{{br}}и произлизащ от {{origin}},{{importance}} има филтър със съвпадащи изключения.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Поддръжка", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Блокиране", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Изходен код (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Разрешаване", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Сътрудници", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "тип \"{{type}}\"", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Изнасяне във файл", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "всеки тип", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"моето-ublock-резервно-копие_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\"", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Внасяне от файл...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "където и да е", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Възстановяване на настройките по подразбиране...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "с изключение, когато", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Всички ваши настройки ще бъдат заместени с помощта на данни, архивирани на {{time}} и uBlock₀ ще се рестартира.\n\nПрезаписване на всички съществуващи настройки, използвайки архивираните данни?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "дори ако", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Данните не могат да бъдат прочетени или са невалидни", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Статичният филтър {{filter}} е намерен в:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Всички ваши настройки ще бъдат премахнати и uBlock₀ ще се рестартира.\n\nВръщане на uBlock₀ към стандартните настройки?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Списък с промени", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Неуспешно свързване: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Добавяне на следния адрес към вашият списък с потребителски филтри?\n\nИме: \"{{title}}\"\nURL адрес: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Поддръжка", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"преди минута", - "description":"English: a minute ago" + "aboutCode": { + "message": "Изходен код (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"преди {{value}} минути", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Сътрудници", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"преди час", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Изнасяне във файл", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"преди {{value}} часа", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "моето-ublock-резервно-копие_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"преди ден", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Внасяне от файл...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"преди {{value}} дни", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Възстановяване на първоначалните настройки...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Показване на табло", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Всички ваши настройки ще бъдат презаписани с данни, архивирани на {{time}} и uBlock₀ ще се рестартира.\n\nПрезаписване на всички съществуващи настройки, използвайки архивираните данни?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Показване на дневник за мрежовите заявки", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Данните не могат да бъдат прочетени или са невалидни", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"изключване", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Всички ваши настройки ще бъдат премахнати и uBlock₀ ще се рестартира.\n\nВръщане на uBlock₀ към стандартните настройки?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin предотврати зареждането на страницата:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Неуспешно свързване: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Блокиращ филтър", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Добавяне на следния адрес към вашият списък с потребителски филтри?\n\nИме: \"{{title}}\"\nURL адрес: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"без параметри", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "преди минута", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Намерен в:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "преди {{value}} минути", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Назад", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "преди час", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Затваряне на прозореца", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "преди {{value}} часа", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Изключване на строгото блокиране за {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "преди ден", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Временно", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "преди {{value}} дни", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Постоянно", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Показване на табло", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Изнасяне в облачно хранилище", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Показване на дневник за мрежовите заявки", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Внасяне от облачно хранилище", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "изключен", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Внасяне на настройки от облачно хранилище и обединяване с текущите", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin предотврати зареждането на страницата:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Блокиращ филтър", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Име на това устройство:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "без параметри", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Внимание! Променяте настройките на свой собствен риск.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Намерен в:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Изпращане", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Назад", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Прилагане на промените", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Затваряне на прозореца", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Връщане", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Изключване на строгото блокиране за {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"байта", - "description":"" + "docblockedDisableTemporary": { + "message": "Временно", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Временно разрешаване на големи мултимедийни елементи", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Постоянно", + "description": "English: Permanently" }, - "dummy":{ - "message":"Това поле трябва да бъде последното", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Изнасяне в облачно хранилище", + "description": "tooltip" + }, + "cloudPull": { + "message": "Внасяне от облачно хранилище", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Внасяне на настройки от облачно хранилище и обединяване с текущите", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Име на това устройство:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Внимание! Променяте настройките на свой собствен риск.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Изпращане", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Прилагане на промените", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Връщане", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "байта", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Временно разрешаване на големи мултимедийни елементи", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Това поле трябва да бъде последното", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/bn/messages.json b/src/_locales/bn/messages.json index 0508dfb2786a9..c4241726d980b 100644 --- a/src/_locales/bn/messages.json +++ b/src/_locales/bn/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"অবশেষে, একটি কার্যকর বিজ্ঞাপন প্রতিরোধক। সিপিইউ এবং মেমরি সহায়ক।", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "অবশেষে, একটি কার্যকর বিজ্ঞাপন প্রতিরোধক। সিপিইউ এবং মেমরি সহায়ক।", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — ড্যাশবোর্ড", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — ড্যাশবোর্ড", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"সেটিংস", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "সেটিংস", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"তৃতীয় পক্ষের ফিল্টারস", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "৩য়-দলের ফিল্টার", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"আমার ফিল্টারস", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "আমার ফিল্টার", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"আমার নিয়ম", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "আমার নিয়ম", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"পরিচ্ছন্ন তালিকা", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "সাদাতালিকা", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — ঘটনাবলী", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — ঘটনাবলী", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"সম্পর্কে", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "সম্পর্কে", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"উন্নত সেটিংস", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "উন্নত সেটিংস", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"ক্লিক: এই সাইটের জন্য uBlock₀ নিষ্ক্রিয়\/সক্রিয় করবে।\n\nCtrl+ক্লিক: শুধু এই পাতার জন্য uBlock₀ নিষ্ক্রিয় করবে।", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "ক্লিক: এই সাইটের জন্য uBlock₀ নিষ্ক্রিয়\/সক্রিয় করবে।\n\nCtrl+ক্লিক: শুধু এই পাতার জন্য uBlock₀ নিষ্ক্রিয় করবে।", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"অবরোধের অনুরোধ", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "এই সাইটের জন্য uBlock₀ নিষ্ক্রিয় করতে ক্লিক করুন।\n\nCtrl+ক্লিক করলে শুধু এই পাতার জন্য uBlock₀ নিষ্ক্রিয় হবে।", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"এই পাতায়", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "এই সাইটের জন্য uBlock₀ সক্রিয় করতে ক্লিক করুন।", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}}টি বা {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "অবরোধের অনুরোধ", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"ইনস্টলের পর থেকে", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "এই পাতায়", + "description": "English: on this page" }, - "popupOr":{ - "message":"বা", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}}টি বা {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"ড্যাশবোর্ড খোলার জন্য ক্লিক করুন", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "ইনস্টলের পর থেকে", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"উপাদান অপসারণ মোডে প্রবেশ করুন", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "বা", + "description": "English: or" }, - "popupTipPicker":{ - "message":"উপাদান বাছাইকারী মোডে প্রবেশ করুন", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "ড্যাশবোর্ড খোলার জন্য ক্লিক করুন", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"ঘটনাবলী খুলুন", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "উপাদান অপসারণ মোডে প্রবেশ করুন", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"এই সাইটের জন্য সব পপআপ প্রতিরোধ অদলবদল করুন", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "উপাদান বাছাইকারী মোডে প্রবেশ করুন", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"এই সাইটের জন্য বড় মিডিয়া উপাদান অবরোধ অদলবদল করুন", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "ঘটনাবলী খুলুন", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"এই সাইটের জন্য বাহ্যিক ফিল্টারিং অদলবদল করুন", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "এই সাইটের জন্য সব পপআপ প্রতিরোধ অদলবদল করুন", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"এই সাইটের রিমোট ফন্টের অবরোধ অদলবদল করুন", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "এই সাইটে সব পপআপ অবরুদ্ধ করতে ক্লিক করুন", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"সার্বজনীন নিয়ম: এই কলামটি সেইসব নিয়মের জন্য যা সকল সাইটের উপর প্রযোজ্য।", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "এই সাইটে সব পপআপ আর অবরুদ্ধ না করতে ক্লিক করুন", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"অভ্যন্তরীন নিয়ম: এই কলামটি সেইসব নিয়মের জন্য যা শুধু বর্তমান সাইটে প্রয়োগ করা হবে।\nঅভ্যন্তরীন নিয়ম সার্বজনীন নিয়মকে অগ্রাহ্য করবে।", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "এই সাইটের জন্য বড় মিডিয়া উপাদান অবরোধ অদলবদল করুন", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"আপনার পরিবর্তনগুলি স্থায়ী করতে ক্লিক করুন।", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "এই সাইটে বড় মিডিয়া উপাদান অবরুদ্ধ করতে ক্লিক করুন", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"আপনার পরিবর্তনগুলি প্রত্যাবর্তন করতে ক্লিক করুন।", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "এই সাইটে বড় মিডিয়া উপাদান আর অবরুদ্ধ না করতে ক্লিক করুন", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"সব", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "এই সাইটের জন্য বাহ্যিক ফিল্টারিং অদলবদল করুন", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"চিত্র", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "এই সাইটে প্রসাধনী ফিল্টার নিষ্ক্রিয় করতে ক্লিক করুন", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"৩য়-দল", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "এই সাইটে প্রসাধনী ফিল্টার সক্রিয় করতে ক্লিক করুন", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"৩য়-দলের css\/চিত্র", - "description":"" + "popupTipNoRemoteFonts": { + "message": "এই সাইটের রিমোট ফন্টের অবরোধ অদলবদল করুন", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"সারির স্ক্রিপ্ট", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "এই সাইটে রিমোট ফন্ট অবরুদ্ধ করতে ক্লিক করুন", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"১ম-দলের স্ক্রিপ্ট", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "এই সাইটে রিমোট ফন্ট আর অবরুদ্ধ না করতে ক্লিক করুন", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"৩য়-দলের স্ক্রিপ্ট", - "description":"" + "popupTipGlobalRules": { + "message": "সার্বজনীন নিয়ম: এই কলামটি সেইসব নিয়মের জন্য যা সকল সাইটের উপর প্রযোজ্য।", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"৩য়-দলের ফ্রেম", - "description":"" + "popupTipLocalRules": { + "message": "অভ্যন্তরীন নিয়ম: এই কলামটি সেইসব নিয়মের জন্য যা শুধু বর্তমান সাইটে প্রয়োগ করা হবে।\nঅভ্যন্তরীন নিয়ম সার্বজনীন নিয়মকে অগ্রাহ্য করবে।", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"সংযুক্ত ডোমেইন", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "আপনার পরিবর্তনগুলি স্থায়ী করতে ক্লিক করুন।", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{total}}টির মধ্যে {{count}}টি", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "আপনার পরিবর্তনগুলি ফেরত নিতে ক্লিক করুন।", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"তৈরি করুন", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "সব", + "description": "" }, - "pickerPick":{ - "message":"চয়ন করুন", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "চিত্র", + "description": "" }, - "pickerQuit":{ - "message":"প্রস্থান", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "৩য়-দল", + "description": "" }, - "pickerPreview":{ - "message":"প্রাকদর্শন", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "৩য়-দলের css\/চিত্র", + "description": "" }, - "pickerNetFilters":{ - "message":"নেট ফিল্টার", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "সারির স্ক্রিপ্ট", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"প্রসাধনী ফিল্টার", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "১ম-দলের স্ক্রিপ্ট", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"ক্লিক, Ctrl-ক্লিক", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "৩য়-দলের স্ক্রিপ্ট", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"উপাদান অবরুদ্ধ করুন", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "৩য়-দলের ফ্রেম", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"অবরুদ্ধ উপাদানের স্থানধারক লুকান", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "সংযুক্ত ডোমেইন", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"আইকনে অবরোধের অনুরোধ সংখ্যা দেখান", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{total}}টির মধ্যে {{count}}টি", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"টুলটিপ নিষ্ক্রিয় করুন", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "তৈরি করুন", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"উপযুক্ত স্থানে প্রাসঙ্গিক মেনু ব্যবহার করুন", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "চয়ন করুন", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"বর্ণান্ধ বন্ধুত্বপূর্ণ", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "প্রস্থান", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"ক্লাউড সঞ্চয়ের সমর্থন সক্রিয় করুন", - "description":"" + "pickerPreview": { + "message": "প্রাকদর্শন", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"আমি একজন উন্নত ব্যবহারকারী (পড়া আবশ্যক<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "নেট ফিল্টার", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"উন্নত সেটিংস", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "প্রসাধনী ফিল্টার", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"অগ্রিম নিয়ে আসা নিষ্ক্রিয় করুন (অবরুদ্ধ নেটওয়ার্ক অনুরোধের জন্য যে কোনো সংযোগ প্রতিরোধ করতে)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "ক্লিক, Ctrl-ক্লিক", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"হাইপারলিঙ্ক নিরীক্ষণ\/বাতিঘর নিষ্ক্রিয় করুন", - "description":"English: " + "pickerContextMenuEntry": { + "message": "উপাদান অবরুদ্ধ করুন", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"স্থানীয় IP ঠিকানা ফাঁস থেকে WebRTC কে প্রতিরোধ করে", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "অবরুদ্ধ উপাদানের স্থানধারক লুকান", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"পূর্বনির্ধারিত আচরণ", - "description":"" + "settingsIconBadgePrompt": { + "message": "আইকনে অবরোধের অনুরোধ সংখ্যা দেখান", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"এই পূর্বনির্ধারিত আচরণ প্রতি সাইট ভিত্তিতে ওভাররাইড করা যেতে পারে", - "description":"" + "settingsTooltipsPrompt": { + "message": "টুলটিপ নিষ্ক্রিয় করুন", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"প্রসাধন ফিল্টারিং নিষ্ক্রিয় করুন", - "description":"" + "settingsContextMenuPrompt": { + "message": "উপযুক্ত স্থানে প্রাসঙ্গিক মেনু ব্যবহার করুন", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} কেবির থেকে বড় মিডিয়া উপাদান অবরুদ্ধ করুন", - "description":"" + "settingsColorBlindPrompt": { + "message": "বর্ণান্ধ বন্ধুত্বপূর্ণ", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"রিমোট ফন্ট অবরুদ্ধ করুন", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "ক্লাউড সঞ্চয়ের সমর্থন সক্রিয় করুন", + "description": "" }, - "settingsStorageUsed":{ - "message":"সংগ্রহস্থল ব্যবহার: {{value}} বাইট", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "আমি একজন উন্নত ব্যবহারকারী (পড়া আবশ্যক<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"সর্বশেষ পুনঃস্থাপন:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "উন্নত সেটিংস", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"সর্বশেষ ব্যাকআপ:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "অগ্রিম নিয়ে আসা নিষ্ক্রিয় করুন (অবরুদ্ধ নেটওয়ার্ক অনুরোধের জন্য যে কোনো সংযোগ প্রতিরোধ করতে)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"এ থেকে {{netFilterCount}}টি নেটওয়ার্ক ফিল্টার + {{cosmeticFilterCount}}টি প্রসাধনী ফিল্টার:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "হাইপারলিঙ্ক নিরীক্ষণ\/বাতিঘর নিষ্ক্রিয় করুন", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}}টির মধ্যে {{used}}টি ব্যবহৃত", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "স্থানীয় IP ঠিকানা ফাঁস থেকে WebRTC কে প্রতিরোধ করে", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"ফিল্টার তালিকা স্বয়ংক্রিয়-হালনাগাদ করুন।", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "পূর্বনির্ধারিত আচরণ", + "description": "" }, - "3pUpdateNow":{ - "message":"এখনই হালনাগাদ করুন", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "এই পূর্বনির্ধারিত আচরণ প্রতি সাইট ভিত্তিতে ওভাররাইড করা যেতে পারে", + "description": "" }, - "3pPurgeAll":{ - "message":"সব ক্যাশে শোধন করুন", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "প্রসাধন ফিল্টারিং নিষ্ক্রিয় করুন", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"প্রসাধনী ফিল্টার পার্স ও কার্যকর করুন।", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "{{input:number}} কেবির থেকে বড় মিডিয়া উপাদান অবরুদ্ধ করুন", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

এই বৈশিষ্ট্য সক্রিয় করলে uBlock₀-এর মেমরির পদচিহ্ন বৃদ্ধি পাবে।<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "রিমোট ফন্ট অবরুদ্ধ করুন", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"জেরেরিক প্রসাধনী ছাঁকনি উপেক্ষা করুন।", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "CSP প্রতিবেদন অবরুদ্ধ করুন", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

এটা কম শক্তিশালী ডিভাইসে এই অপশনটি সক্রিয় করার জন্য সুপারিশ করা হচ্ছে।", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "সংগ্রহস্থল ব্যবহার: {{value}} বাইট", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"অবরুদ্ধ হোস্টের তালিকা", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "সর্বশেষ পুনঃস্থাপন:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"পরিবর্তনগুলি প্রয়োগ", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "সর্বশেষ ব্যাকআপ:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"বিজ্ঞাপন", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "এ থেকে {{netFilterCount}}টি নেটওয়ার্ক ফিল্টার + {{cosmeticFilterCount}}টি প্রসাধনী ফিল্টার:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"গোপনীয়তা", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}}টির মধ্যে {{used}}টি ব্যবহৃত", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"ম্যালওয়্যার ডোমেইন", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "ফিল্টার তালিকা স্বয়ংক্রিয়-হালনাগাদ করুন।", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"সামাজিক", - "description":"English: Social" + "3pUpdateNow": { + "message": "এখনই হালনাগাদ করুন", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"বহুমুখী", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "সব ক্যাশে শোধন করুন", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"অঞ্চল, ভাষা", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "প্রসাধনী ফিল্টার পার্স ও কার্যকর করুন।", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"স্বনির্ধারিত", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

এই বৈশিষ্ট্য সক্রিয় করলে uBlock₀-এর মেমরির পদচিহ্ন বৃদ্ধি পাবে।<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"লাইন প্রতি একটি URL। ‘!’ সহ উপসর্গ লাইন উপেক্ষা করা হবে। অকার্যকর URL গুলি নীরবে উপেক্ষা করা হবে।", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "জেরেরিক প্রসাধনী ছাঁকনি উপেক্ষা করুন।", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"পুরোনো", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

এটা কম শক্তিশালী ডিভাইসে এই অপশনটি সক্রিয় করার জন্য সুপারিশ করা হচ্ছে।", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"সর্বশেষ হালনাগাদ: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "অবরুদ্ধ হোস্টের তালিকা", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"হালনাগাদ করা হচ্ছে...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "পরিবর্তনগুলি প্রয়োগ", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"একটি নেটওয়ার্ক ত্রুটি রিসোর্স হালনাগাদ হওয়া থেকে রোধ করেছে।", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "বিজ্ঞাপন", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"লাইন প্রতি একটি ফিল্টার। একটি ফিল্টার স্পষ্ট হোস্টনেম বা অ্যাডব্লক প্লাস-সামঞ্জস্যপূর্ণ ফিল্টার হতে পারে। ‘!’ সহ উপসর্গ লাইন উপেক্ষা করা হবে।", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "গোপনীয়তা", + "description": "English: Privacy" }, - "1pImport":{ - "message":"আমদানি ও পরিশেষে যোগ করুন", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "ম্যালওয়্যার ডোমেইন", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"রপ্তানি করুন", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "বিরক্তিকর", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"amar-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "বহুমুখী", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"পরিবর্তনগুলি প্রয়োগ", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "অঞ্চল, ভাষা", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"স্থায়ী নিয়ম", - "description":"header" + "3pGroupCustom": { + "message": "স্বনির্ধারিত", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"অস্থায়ী নিয়ম", - "description":"header" + "3pExternalListsHint": { + "message": "লাইন প্রতি একটি URL। ‘!’ সহ উপসর্গ লাইন উপেক্ষা করা হবে। অকার্যকর URL গুলি নীরবে উপেক্ষা করা হবে।", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"প্রত্যাবর্তন", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "পুরোনো", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"কমিট", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "সর্বশেষ হালনাগাদ: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"সম্পাদনা", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "হালনাগাদ করা হচ্ছে...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"সংরক্ষণ", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "একটি নেটওয়ার্ক ত্রুটি রিসোর্স হালনাগাদ হওয়া থেকে রোধ করেছে।", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"বাতিল করুন", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "লাইন প্রতি একটি ফিল্টার। একটি ফিল্টার স্পষ্ট হোস্টনেম বা অ্যাডব্লক প্লাস-সামঞ্জস্যপূর্ণ ফিল্টার হতে পারে। ‘!’ সহ উপসর্গ লাইন উপেক্ষা করা হবে।", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"ফাইল থেকে আমদানি...", - "description":"" + "1pImport": { + "message": "আমদানি ও পরিশেষে যোগ করুন", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"ফাইলে রপ্তানি", - "description":"" + "1pExport": { + "message": "রপ্তানি করুন", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"amar-ublock-dynamic-niyom_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "amar-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"আপনার গতিশীল ফিল্টারের নিয়মের তালিকা।", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "পরিবর্তনগুলি প্রয়োগ", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"শব্দবিন্যাসের নিয়ম: source destination type action<\/code> (সম্পূর্ণ নথিপত্র<\/a>)।", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "স্থায়ী নিয়ম", + "description": "header" }, - "whitelistPrompt":{ - "message":"আপনার হোস্টের তালিকা যাদের জন্য uBlock₀ নিষ্ক্রিয় করা হবে। লাইন প্রতি একটি ভুক্তি। অবৈধ হোস্ট নাম নিশব্দে উপেক্ষা করা হবে।", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "অস্থায়ী নিয়ম", + "description": "header" }, - "whitelistImport":{ - "message":"আমদানি ও পরিশেষে যোগ করুন", - "description":"English: Import and append" + "rulesRevert": { + "message": "প্রত্যাবর্তন", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"রপ্তানি করুন", - "description":"English: Export" + "rulesCommit": { + "message": "কমিট", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"amar-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "সম্পাদনা", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"পরিবর্তনগুলি প্রয়োগ", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "সংরক্ষণ", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"ধরন", - "description":"English: Type" + "rulesEditDiscard": { + "message": "বাতিল করুন", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"ডোমেইন", - "description":"English: Domain" + "rulesImport": { + "message": "ফাইল থেকে আমদানি...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "ফাইলে রপ্তানি", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"ফিল্টার", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "amar-ublock-dynamic-niyom_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"সব", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "আপনার গতিশীল ফিল্টারের নিয়মের তালিকা।", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"পর্দার আড়ালে", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "শব্দবিন্যাসের নিয়ম: source destination type action<\/code> (সম্পূর্ণ নথিপত্র<\/a>)।", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"ফিল্টার লগের ভুক্তি", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "আপনার হোস্টের তালিকা যাদের জন্য uBlock₀ নিষ্ক্রিয় করা হবে। লাইন প্রতি একটি ভুক্তি। অবৈধ হোস্ট নাম নিশব্দে উপেক্ষা করা হবে।", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"ভুক্তির সর্বাধিক সংখ্যা", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "আমদানি ও পরিশেষে যোগ করুন", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"প্রসঙ্গ:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "রপ্তানি করুন", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"ধরন:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "amar-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"ডায়নামিক URL ফিল্টারিং", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "পরিবর্তনগুলি প্রয়োগ", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"স্থির ফিল্টারিং", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "ধরন", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{type}}-এর নেটওয়ার্ক অনুরোধ {{action}} {{br}}যার URL ঠিকানা {{url}}-এর সাথে মিলেছে {{br}}এবং যার মূলভিত্তি {{origin}},{{br}} {{importance}} এখানে একটি মেলানো ব্যতিক্রম ফিল্টার আছে।", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "ডোমেইন", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"অবরুদ্ধ করুন", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"মঞ্জুর", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "ফিল্টার", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"ধরন “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "সব", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"যে কোন ধরন", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "পর্দার আড়ালে", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"“{{origin}}” থেকে", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "ফিল্টার লগের ভুক্তি", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"যে কোন জায়গা থেকে", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "ভুক্তির সর্বাধিক সংখ্যা", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"এছাড়া যখন", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "প্রসঙ্গ:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"এমনকি যদি", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "ধরন:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"স্থির ফিল্টার {{filter}} পাওয়া গেছে:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "ডায়নামিক URL ফিল্টারিং", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"পরিবর্তন লগ", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "স্থির ফিল্টারিং", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"উইকি", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{type}}-এর নেটওয়ার্ক অনুরোধ {{action}} {{br}}যার URL ঠিকানা {{url}}-এর সাথে মিলেছে {{br}}এবং যার মূলভিত্তি {{origin}},{{br}} {{importance}} এখানে একটি মেলানো ব্যতিক্রম ফিল্টার আছে।", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"সমর্থন", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "অবরুদ্ধ করুন", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"উত্স কোড (GPLv৩)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "মঞ্জুর", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"অবদানকারী", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "ধরন “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"ফাইলে ব্যাকআপ", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "যে কোন ধরন", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"amar-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}” থেকে", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"ফাইল থেকে পুনরুদ্ধার...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "যে কোন জায়গা থেকে", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"ডিফল্ট সেটিংসে পুন:স্থাপন করুন...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "এছাড়া যখন", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"{{time}}-এর ডেটা ব্যাকআপ ব্যবহার করে আপনার সেটিংস পুনঃলিখিত হবে, এবং uBlock₀ পুনরায় চালু হবে।\n\nডেটা ব্যাকআপ ব্যবহার করে সমস্ত বিদ্যমান সেটিংস পুনঃলিখবেন?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "এমনকি যদি", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"উপাত্তটি পড়া যায়নি বা অকার্যকর", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "স্থির ফিল্টার {{filter}} পাওয়া গেছে:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"আপনার সব সেটিংস বাতিল করা হবে, এবং uBlock₀ পুনরায় চালু হবে।\n\nuBlock₀ সেটিংস পুনঃস্থাপন করবেন?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "পরিবর্তন লগ", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"{{url}} -এ সংযোগ করতে অক্ষম", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "উইকি", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: আপনার নিজস্ব ফিল্টার তালিকায় নিম্নলিখিত URL যোগ করবেন?\n\nশিরোনাম: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "সমর্থন", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"এক মিনিট আগে", - "description":"English: a minute ago" + "aboutCode": { + "message": "উত্স কোড (GPLv৩)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} মিনিট আগে", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "অবদানকারী", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"এক ঘণ্টা আগে", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "ফাইলে ব্যাকআপ", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} ঘণ্টা আগে", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "amar-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"এক দিন আগে", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "ফাইল থেকে পুনরুদ্ধার...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} দিন আগে", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "ডিফল্ট সেটিংসে পুন:স্থাপন করুন...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"ড্যাশবোর্ড দেখুন", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "{{time}}-এর ডেটা ব্যাকআপ ব্যবহার করে আপনার সেটিংস পুনঃলিখিত হবে, এবং uBlock₀ পুনরায় চালু হবে।\n\nডেটা ব্যাকআপ ব্যবহার করে সমস্ত বিদ্যমান সেটিংস পুনঃলিখবেন?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"লগার দেখান", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "উপাত্তটি পড়া যায়নি বা অকার্যকর", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"বন্ধ", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "আপনার সব সেটিংস বাতিল করা হবে, এবং uBlock₀ পুনরায় চালু হবে।\n\nuBlock₀ সেটিংস পুনঃস্থাপন করবেন?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uব্লক অরিজিন নিচের পৃষ্ঠা লোড করাকে প্রতিহত করেছে:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "{{url}} -এ সংযোগ করতে অক্ষম", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"নিম্নলিখিত ফিল্টারের কারণে", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: আপনার নিজস্ব ফিল্টার তালিকায় নিম্নলিখিত URL যোগ করবেন?\n\nশিরোনাম: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"প্যারামিটার বিহীন", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "এক মিনিট আগে", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"যা এতে পাওয়া গেছে:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} মিনিট আগে", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"ফিরে যান", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "এক ঘণ্টা আগে", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"এই উইন্ডোটি বন্ধ করুন", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} ঘণ্টা আগে", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"{{hostname}}-এর জন্য কঠোর অবরোধ নিষ্ক্রিয় করুন", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "এক দিন আগে", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"সাময়িকভাবে", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} দিন আগে", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"স্থায়ীভাবে", - "description":"English: Permanently" + "showDashboardButton": { + "message": "ড্যাশবোর্ড দেখুন", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"ক্লাউড সঞ্চয়ে রপ্তানি করুন", - "description":"tooltip" + "showNetworkLogButton": { + "message": "লগার দেখান", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"ক্লাউড সঞ্চয় থেকে আমদানি করুন", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "বন্ধ", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"ক্লাউড সংগ্রহস্থল থেকে আমদানি করে বর্তমানে সেটিংসের সঙ্গে একত্রীকরণ করুন", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uব্লক অরিজিন নিচের পৃষ্ঠা লোড করাকে প্রতিহত করেছে:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "নিম্নলিখিত ফিল্টারের কারণে", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"এই ডিভাইসের নাম:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "প্যারামিটার বিহীন", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"সতর্কবাণী! আপনার নিজ ঝুঁকিতে এই উন্নত সেটিংগুলি পরিবর্তন করুন।", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "যা এতে পাওয়া গেছে:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"জমা দিন", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "ফিরে যান", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"পরিবর্তনগুলি প্রয়োগ", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "এই উইন্ডোটি বন্ধ করুন", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"প্রত্যাবর্তন", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "{{hostname}}-এর জন্য কঠোর অবরোধ নিষ্ক্রিয় করুন", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"বাইট", - "description":"" + "docblockedDisableTemporary": { + "message": "সাময়িকভাবে", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"সাময়িকভাবে বৃহৎ মিডিয়া উপাদান মঞ্জুরি দিন", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "স্থায়ীভাবে", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "ক্লাউড সঞ্চয়ে রপ্তানি করুন", + "description": "tooltip" + }, + "cloudPull": { + "message": "ক্লাউড সঞ্চয় থেকে আমদানি করুন", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "ক্লাউড সংগ্রহস্থল থেকে আমদানি করে বর্তমানে সেটিংসের সঙ্গে একত্রীকরণ করুন", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "এই ডিভাইসের নাম:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "সতর্কবাণী! আপনার নিজ ঝুঁকিতে এই উন্নত সেটিংগুলি পরিবর্তন করুন।", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "জমা দিন", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "পরিবর্তনগুলি প্রয়োগ", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "প্রত্যাবর্তন", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "বাইট", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "সাময়িকভাবে বৃহৎ মিডিয়া উপাদান মঞ্জুরি দিন", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/ca/messages.json b/src/_locales/ca/messages.json index 25add2ff0a254..1e74724165ab2 100644 --- a/src/_locales/ca/messages.json +++ b/src/_locales/ca/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Finalment, un blocador eficient que utilitza pocs recursos de memòria i processador.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Finalment, un blocador eficient que utilitza pocs recursos de memòria i processador.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Tauler de control", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Tauler de control", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Configuració", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Configuració", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filtres de tercers", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtres de tercers", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Els vostres filtres", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Els vostres filtres", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Les meves regles", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Les meves regles", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Llista blanca", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Llista blanca", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Registre de peticions de xarxa", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Registre de peticions de xarxa", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Quant a", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Quant a", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Configuració avançada", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Configuració avançada", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Clic: habilita\/inhabilita l'µBlock per a aquest lloc.\n\nCtrl+clic: inhabilita l'µBlock només en aquesta pàgina.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Clic: habilita\/inhabilita l'uBlock₀ per a aquest lloc.\n\nCtrl+clic: inhabilita l'uBlock₀ només en aquesta pàgina.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"sol·licituds bloquejades", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Feu clic per desactivar l'uBlock₀ en aquest lloc.\n\nFeu Ctrl+clic per desactivar l'uBlock₀ només en aquesta pàgina.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"en aquesta pàgina", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Feu clic per activar l'uBlock₀ en aquest lloc.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} o {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "sol·licituds bloquejades", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"des de la instal·lació", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "en aquesta pàgina", + "description": "English: on this page" }, - "popupOr":{ - "message":"o", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} o {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Clic per obrir el tauler de control", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "des de la instal·lació", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Activa el mode d'eliminació d'elements", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "o", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Entrar al mode de selecció d'elements", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Clic per obrir el tauler de control", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Registre de peticions", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Activa el mode d'eliminació d'elements", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"No permetis finestres emergents en aquest web", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Canvia al mode de selecció d'elements", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Alterna el bloqueig de fitxers multimèdia grans en aquest web", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Obre el registre d'esdeveniments", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Habilita el filtre cosmètic en aquest web", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Commuta el bloqueig de totes les finestres emergents d'aquest lloc", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Alterna el blocatge de tipografies remotes per aquest lloc", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Feu clic per bloquejar totes les finestres emergents d'aquest lloc", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Regles globals: Aquesta columna s'apliquen a tots els webs.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Feu clic per desbloquejar les finestres emergents d'aquest lloc", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Regles locals: Aquesta columna s'aplica només a aquest web.\nLes regles locals prevaleixen sobre les globals.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Commuta el bloqueig d'elements multimèdia grans per a aquest lloc", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Feu clic per fer els canvis permanents.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Feu clic per bloquejar elements multimèdia grans en aquest lloc", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Feu clic per desfer els canvis.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Fes clic per no bloquejar els elements multimèdia grans en aquest lloc", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"tot", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Commuta els filtres cosmètics d'aquest lloc", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"imatges", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Feu clic per desactivar els filtres cosmètics en aquest lloc", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"de tercers", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Feu clic per activar els filtres cosmètics en aquest lloc", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/imatges de tercers", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Commuta el bloqueig de fonts remotes per a aquest lloc", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"scripts incrustats", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Feu clic per bloquejar fonts remotes en aquest lloc", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"scripts", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Feu clic per desbloquejar les fonts remotes en aquest lloc", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"scripts de tercers", - "description":"" + "popupTipGlobalRules": { + "message": "Regles globals: les regles d'aquesta columna s'apliquen a tots els llocs.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"marcs de tercers", - "description":"" + "popupTipLocalRules": { + "message": "Regles locals: les regles d'aquesta columna s'apliquen només al lloc actual.\nLes regles locals anul·len les regles globals.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"dominis connectats", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Feu clic per fer els canvis permanents.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Feu clic per desfer els canvis.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Crear", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "tot", + "description": "" }, - "pickerPick":{ - "message":"Escollir", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "imatges", + "description": "" }, - "pickerQuit":{ - "message":"Sortir", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "de tercers", + "description": "" }, - "pickerPreview":{ - "message":"Vista prèvia", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css\/imatges de tercers", + "description": "" }, - "pickerNetFilters":{ - "message":"Filtres de xarxa", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "scripts incrustats", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Filtres cosmètics", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "scripts", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Clic, Ctrl+clic", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "scripts de tercers", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Bloquejar element", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "marcs de tercers", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Amagar marcardors de posició dels elements bloquejats", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "dominis connectats", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Mostrar el número de peticions bloquejades a l'icona", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Inhabilita els suggeriments", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Crear", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Utilitzar el menú contextual quan sigui possible", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Escollir", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Configuració per a persones daltòniques", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Sortir", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Habilita el suport d'emmagatzematge al núvol", - "description":"" + "pickerPreview": { + "message": "Vista prèvia", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Sóc un usuari avançat (Lectura necessària<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Filtres de xarxa", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"configuració avançada", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Filtres cosmètics", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Inhabilita la cerca prèvia (per evitar qualsevol connexió de xarxa per a sol·licituds blocades)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Clic, Ctrl+clic", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Inhabilita l'auditoria de l'enllaç", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Bloqueja l'element", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Evita que el protocol WebRTC divulgui la IP local", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Amaga els marcardors de posició dels elements bloquejats", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Opció per defecte", - "description":"" + "settingsIconBadgePrompt": { + "message": "Mostra el número de peticions bloquejades a la icona", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Es pot anul·lar el comportament per defecte per a qualsevol web", - "description":"" + "settingsTooltipsPrompt": { + "message": "Desactiva els suggeriments", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Inhabilita els filtres cosmètics", - "description":"" + "settingsContextMenuPrompt": { + "message": "Utilitzar el menú contextual quan sigui possible", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloca els fitxers multimèdia més grans que {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Configuració per a persones daltòniques", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloca les fonts remotes", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Activa el suport d'emmagatzematge al núvol", + "description": "" }, - "settingsStorageUsed":{ - "message":"Emmagatzematge utilitzat: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Sóc un usuari avançat (Lectura necessària<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Darrera restauració:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "configuració avançada", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Darrera còpia de seguretat:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Inhabilita la cerca prèvia (per evitar qualsevol connexió de xarxa per a sol·licituds blocades)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtres de xarxa + {{cosmeticFilterCount}} filtres cosmètics de:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Inhabilita l'auditoria de l'enllaç", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} utilitzats de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Evita que el protocol WebRTC divulgui la IP local", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Actualitzar automàticament la llista de filtres.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Comportament per defecte", + "description": "" }, - "3pUpdateNow":{ - "message":"Actualitza ara", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Es pot anul·lar el comportament per defecte per a qualsevol web", + "description": "" }, - "3pPurgeAll":{ - "message":"Neteja la memòria caché", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Desactiva els filtres cosmètics", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analitzar i aplicar filtres cosmètics.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Bloqueja els fitxers multimèdia més grans que {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Habilitant aquesta opció augmentarà el consum de memòria de l'µBlock<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Bloqueja les fonts remotes", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignora els filtres cosmètics genèrics", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Bloqueja informes CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Es recomana habilitar aquesta opció en dispositius poc potents.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Emmagatzematge utilitzat: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Llistes de servidors bloquejats", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Darrera restauració:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Aplicar canvis", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Darrera còpia de seguretat:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Anuncis", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtres de xarxa + {{cosmeticFilterCount}} filtres cosmètics de:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privacitat", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} utilitzats de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Dominis de malware", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Actualitzar automàticament la llista de filtres.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pUpdateNow": { + "message": "Actualitza ara", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Polivalent", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Neteja la memòria caché", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regions, llengües", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analitzar i aplicar filtres cosmètics.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Personalitzat", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Habilitant aquesta opció augmentarà el consum de memòria de l'uBlock₀.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Una URL per línia. Línies amb el símbol ‘!’ s'ignoraran. Adreces URL no vàlides s'ignoraran silenciosament.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignora els filtres cosmètics genèrics", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Obsolet", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Es recomana habilitar aquesta opció en dispositius poc potents.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Darrera actualització: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Llistes de servidors bloquejats", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"S'està actualitzant...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Aplicar canvis", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Un error de xarxa va impedir que s'actualitzés el recurs.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Anuncis", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Un filtre per línia. Un filtre pot ser un domini, o un filtre compatible amb Adblock Plus. Línies amb el símbol ‘!’ s'ignoraran.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privacitat", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importar i annexar", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Dominis de malware", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exportar", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Elements molestos", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Polivalent", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Aplicar canvis", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regions, llengües", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Normes permanents", - "description":"header" + "3pGroupCustom": { + "message": "Personalitzat", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Normes temporals", - "description":"header" + "3pExternalListsHint": { + "message": "Una URL per línia. Línies amb el símbol ‘!’ s'ignoraran. Adreces URL no vàlides s'ignoraran silenciosament.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Desfer", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Obsolet", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Establir", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Darrera actualització: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Editar", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "S'està actualitzant...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Desar", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Un error de xarxa va impedir que s'actualitzés el recurs.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Descartar", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Un filtre per línia. Un filtre pot ser un domini, o un filtre compatible amb Adblock Plus. Línies amb el símbol ‘!’ s'ignoraran.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importar des de fitxer...", - "description":"" + "1pImport": { + "message": "Importar i annexar", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exportar a fitxer...", - "description":"" + "1pExport": { + "message": "Exportar", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-custom-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Llista de regles de filtrat dinàmic.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Aplicar canvis", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Sintaxi de les regles: origen destinació tipus acció<\/code> (documentació<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Normes permanents", + "description": "header" }, - "whitelistPrompt":{ - "message":"Llistat dels noms de servidor amb que s'inhabilitarà l'µBlock. Una entrada per línia. S'ignoraran els noms de servidor no vàlids.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Normes temporals", + "description": "header" }, - "whitelistImport":{ - "message":"Imporar i annexar", - "description":"English: Import and append" + "rulesRevert": { + "message": "Desfer", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exportar", - "description":"English: Export" + "rulesCommit": { + "message": "Establir", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Editar", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Aplicar canvis", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Desar", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tipus", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Descartar", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domini", - "description":"English: Domain" + "rulesImport": { + "message": "Importa des de...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Exporta a...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtre", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Tot", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Llista de regles de filtrat dinàmic.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Peticions ocultes", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Sintaxi de les regles: origen destinació tipus acció<\/code> (documentació<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtrar entrades del registre", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Llistat dels noms de servidor amb que s'inhabilitarà l'µBlock. Una entrada per línia. S'ignoraran els noms de servidor no vàlids.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Nombre màxim d'entrades del registre", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Imporar i annexar", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exportar", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipus:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Filtre dinàmic d'URL", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Aplicar canvis", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Filtre estàtic", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tipus", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} peticions de la xarxa {{type}} {{br}}amb l'URL coincidint {{url}} {{br}}originada des de {{origin}},{{br}}{{importance}} si és una concordança d'un filtre d'excepció.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domini", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloca", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permet", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtre", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipus «{{type}}»", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Tot", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"de qualsevol tipus", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Peticions ocultes", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"des de «{{origin}}»", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtrar entrades del registre", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"des de qualsevol web", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Nombre màxim d'entrades del registre", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"excepte", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"fins i tot", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tipus:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"S'ha trobat el filtre {{filter}}:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Filtre dinàmic d'URL", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Registre de canvis", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Filtre estàtic", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} peticions de la xarxa {{type}} {{br}}amb l'URL coincidint {{url}} {{br}}originada des de {{origin}},{{br}}{{importance}} si és una concordança d'un filtre d'excepció.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Suport", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloqueja", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Codi font (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Permet", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Col·laboradors", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tipus «{{type}}»", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Còpia de seguretat a un fitxer", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "de qualsevol tipus", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "des de «{{origin}}»", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Restaurar des d'un fitxer...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "des de qualsevol web", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Restaurar als valors de fàbrica...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "excepte", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"La configuració es sobreescriurà amb la còpia de seguretat del {{time}}, i es reiniciarà l'µBlock.\n\nVoleu restaurar la configuració amb la còpia de seguretat?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "fins i tot", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Les dades no es poden llegir o no son vàlides", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "S'ha trobat el filtre estàtic {{filter}} a:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"La configuració serà suprimida i es reiniciarà l'µBlock.\n\nVoleu reiniciar l'µBlock als valors per defecte?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Registre de canvis", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"No es pot connectar a {{url}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Voleu afegir aquest enllaç a la llista de filtres personalitzats?\n\nTítol: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Suport", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"fa un minut", - "description":"English: a minute ago" + "aboutCode": { + "message": "Codi font (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"fa {{value}} minuts", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Col·laboradors", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"fa una hora", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Còpia de seguretat a un fitxer", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"fa {{value}} hores", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"fa un dia", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Restaurar des d'un fitxer...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"fa {{value}} dies", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Restaurar als valors de fàbrica...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Mostrar Tauler de control", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "La configuració es sobreescriurà amb la còpia de seguretat del {{time}}, i l'uBlock₀ es reiniciarà.\n\nVoleu restaurar la configuració amb la còpia de seguretat?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Mostra el registre de peticions de la xarxa", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Les dades no es poden llegir o no son vàlides", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"desactivat", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "La configuració serà suprimida i es reiniciarà l'uBlock₀.\n\nVoleu reiniciar l'uBlock₀ als valors per defecte?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"L'ublock ha rebutjat contingut d'aquest web:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Error de xarxa: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Detectat per aquest filtre", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Voleu afegir aquesta URL a la llista de filtres personalitzats?\n\nTítol: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"sense paràmetres", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "fa un minut", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Trobat a:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "fa {{value}} minuts", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Enrere", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "fa una hora", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Tanca aquesta finestra", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "fa {{value}} hores", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Inhabilita el blocatge estricte per {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "fa un dia", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporalment", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "fa {{value}} dies", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanentment", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Mostrar Tauler de control", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exporta a un servei al núvol", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Mostra el registre d'esdeveniments", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importa des d'un servei al núvol", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "desactivat", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importa des del núvol i afegeix a la configuració actual", - "description":"tooltip" + "docblockedPrompt1": { + "message": "L'uBlock Origin ha impedit que es carregui la pàgina:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Detectat per aquest filtre", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Nom d'aquest dispositiu:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "sense paràmetres", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Atenció! Canvieu aquestes configuracions avançades sota la vostra responsabilitat.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Trobat a:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Envia", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Enrere", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Aplica els canvis", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Tanca aquesta finestra", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Desfer", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Inhabilita el blocatge estricte per {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporalment", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permet temporalment els fitxers multimèdia grans", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanentment", + "description": "English: Permanently" }, - "dummy":{ - "message":"Aquesta entrada ha de ser l'última", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exporta a un servei al núvol", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importa des d'un servei al núvol", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importa des del núvol i afegeix a la configuració actual", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nom d'aquest dispositiu:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Atenció! Canvieu aquestes configuracions avançades sota la vostra responsabilitat.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Envia", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplica els canvis", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Desfés", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permet temporalment els fitxers multimèdia grans", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Aquesta entrada ha de ser l'última", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/cs/messages.json b/src/_locales/cs/messages.json index 2b35f7d18a9d7..f3b7fc81fb639 100644 --- a/src/_locales/cs/messages.json +++ b/src/_locales/cs/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Konečně efektivní blokovač, který nezatěžuje CPU a paměť.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Konečně efektivní blokovač, který nezatěžuje CPU a paměť.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Řídící panel", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Ovládací panel", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Nastavení", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Nastavení", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filtry třetích stran", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtry třetích stran", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Vaše filtry", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Vaše filtry", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Vaše pravidla", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Vaše pravidla", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Povolené domény", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Povolené domény", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Logger", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Protokol požadavků", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"O rozšíření", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "O rozšíření", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Pokročilá nastavení", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Pokročilá nastavení", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Kliknutí: trvale zakázat uBlock₀ pro celý tento web.\n\nCtrl+kliknutí: zakázat uBlock₀ pouze pro tuto stránku.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Kliknutí: trvale zakázat uBlock₀ pro celý tento web.\n\nCtrl+kliknutí: zakázat uBlock₀ pouze pro tuto stránku.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"zablokované požadavky", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"na této stránce", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} neboli {{percent}} %", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "zablokované požadavky", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"od instalace", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "na této stránce", + "description": "English: on this page" }, - "popupOr":{ - "message":"neboli", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} neboli {{percent}} %", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Kliknutím sem otevřete ovládací panel", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "od instalace", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Zapnout režim likvidace prvků", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "neboli", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Režim výběru prvků", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Otevřít ovládací panel", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Otevřít logger", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Zapnout režim likvidace prvků", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Přepnout blokování všech vyskakovacích oken pro tento web", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Režim výběru prvků", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Přepnout blokování velkých multimediálních prvků na tomto webu", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Otevřít protokol požadavků", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Přepnout kosmetické filtrování pro tento web", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Přepnout blokování všech vyskakovacích oken na tomto webu", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Přepnout blokování vzdálených fontů pro tento web", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globální pravidla: tento sloupec slouží pro pravidla, která platí pro všechny weby.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokální pravidla: tento sloupec slouží pro pravidla, která platí pouze pro aktuální web.\nLokální pravidla přepisují globální pravidla.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Přepnout blokování velkých multimediálních prvků na tomto webu", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Kliknutím použijete změny.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Kliknutím vrátíte změny.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"vše", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Přepnout kosmetické filtrování na tomto webu", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"obrázky", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"z třetí strany", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"obrázky\/css třetích stran", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Přepnout blokování vzdálených fontů pro tento web", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"řádkové skripty", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"skripty první strany", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"skripty třetích stran", - "description":"" + "popupTipGlobalRules": { + "message": "Globální pravidla: tento sloupec slouží pro pravidla, která platí pro všechny weby.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"rámce třetích stran", - "description":"" + "popupTipLocalRules": { + "message": "Lokální pravidla: tento sloupec slouží pro pravidla, která platí pouze pro aktuální web.\nLokální pravidla přepisují globální pravidla.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domén připojeno", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Kliknutím natrvalo uložíte provedené změny.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} z {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Kliknutím zrušíte provedené změny.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Vytvořit", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "vše", + "description": "" }, - "pickerPick":{ - "message":"Vybrat", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "obrázky", + "description": "" }, - "pickerQuit":{ - "message":"Ukončit", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "z třetí strany", + "description": "" }, - "pickerPreview":{ - "message":"Náhled", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "obrázky\/css třetích stran", + "description": "" }, - "pickerNetFilters":{ - "message":"Síťové filtry", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "řádkové skripty", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kosmetické filtry", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "skripty první strany", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Kliknutí, Ctrl+Kliknutí", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "skripty třetích stran", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blokovat prvek", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "rámce třetích stran", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Skrýt zástupné objekty zablokovaných prvků", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domén připojeno", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Zobrazit počet blokovaných požadavků u ikony", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} z {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Skrýt nápovědu při najetí", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Vytvořit", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Využít kontextovou nabídku kde je to možné", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Vybrat", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Styl pro barvoslepé", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Ukončit", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Povolit podporu cloudového úložiště", - "description":"" + "pickerPreview": { + "message": "Náhled", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Jsem pokročilý uživatel (nutno přečíst<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Síťové filtry", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"pokročilá nastavení", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kosmetické filtry", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Zakázat přednačítání (zakáže jakékoliv spojení pro zablokované síťové požadavky)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Kliknutí, Ctrl+Kliknutí", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Vypnout auditování hypertextových odkazů", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blokovat prvek", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Předejít úniku lokálních IP adres přes WebRTC", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Skrýt zástupné objekty zablokovaných prvků", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Výchozí chování", - "description":"" + "settingsIconBadgePrompt": { + "message": "Zobrazit počet blokovaných požadavků u ikony", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Tato výchozí chování mohou být přepsána u jednotlivých webů", - "description":"" + "settingsTooltipsPrompt": { + "message": "Skrýt nápovědu při najetí", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Zakázat kosmetické filtrování", - "description":"" + "settingsContextMenuPrompt": { + "message": "Využít kontextovou nabídku kde je to možné", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokovat multimediální prvky větší než {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Styl pro barvoslepé", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokovat externí fonty", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Povolit podporu cloudového úložiště", + "description": "" }, - "settingsStorageUsed":{ - "message":"Prostoru využito: {{value}} bajtů", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Jsem pokročilý uživatel (nutno přečíst<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Poslední obnova:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "pokročilá nastavení", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Poslední záloha:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Zakázat přednačítání (zakáže jakékoliv spojení pro zablokované síťové požadavky)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} síťových filtrů + {{cosmeticFilterCount}} kosmetických filtrů z:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Vypnout auditování hypertextových odkazů", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} použito z celkových {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Předejít úniku lokálních IP adres přes WebRTC", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Automaticky aktualizovat seznamy filtrů.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Výchozí chování", + "description": "" }, - "3pUpdateNow":{ - "message":"Aktualizovat nyní", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Tato výchozí chování mohou být přepsána u jednotlivých webů", + "description": "" }, - "3pPurgeAll":{ - "message":"Vyčistit celou mezipaměť", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Zakázat kosmetické filtrování", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Zpracovat a použít kosmetické filtry.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blokovat multimediální prvky větší než {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Povolení této funkce zvětšuje stopy uBlocku₀ v paměti.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blokovat externí fonty", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorovat obecné kosmetické filtry", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Blokovat CSP reporty", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Na méně výkonných zařízeních je doporučeno tuto volbu povolit.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Prostoru využito: {{value}} bajtů", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Seznamy blokovaných hostitelů", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Poslední obnova:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Použít změny", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Poslední záloha:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklamy", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} síťových filtrů + {{cosmeticFilterCount}} kosmetických filtrů z:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Soukromí", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} použito z celkových {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Malware domény", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Automaticky aktualizovat seznamy filtrů.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Sociální", - "description":"English: Social" + "3pUpdateNow": { + "message": "Aktualizovat nyní", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Víceúčelové", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Vyčistit celou mezipaměť", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regionální, jazykové", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Zpracovat a použít kosmetické filtry.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Vlastní", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Povolení této funkce zvětšuje stopy uBlocku₀ v paměti.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Jedna adresa URL na řádek. Řádky začínající na ‘!’ budou ignorovány. Neplatné adresy URL budou tiše ignorovány.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorovat obecné kosmetické filtry", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Zastaralé.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Na méně výkonných zařízeních je doporučeno tuto volbu povolit.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Poslední aktualizace: {{ago}}.\nKliknutím vynutíte aktualizaci.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Seznamy blokovaných hostitelů", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Aktualizování...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Použít změny", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Chyba sítě znemožnila aktualizaci tohoto zdroje.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklamy", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Jeden filtr na řádek. Filtr může být prostý název hostitele nebo filtr kompatibilní s Adblock Plus. Řádky začínající na ‘!’ budou ignorovány.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Soukromí", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importovat a připojit", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Malware domény", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exportovat", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Dotěrnosti", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-me-vlastni-filtry_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Víceúčelové", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Použít změny", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regionální, jazykové", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Permanentní pravidla", - "description":"header" + "3pGroupCustom": { + "message": "Vlastní", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Dočasná pravidla", - "description":"header" + "3pExternalListsHint": { + "message": "Jedna adresa URL na řádek. Řádky začínající na ‘!’ budou ignorovány. Neplatné adresy URL budou tiše ignorovány.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Vrátit", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Zastaralé.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Potvrdit", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Poslední aktualizace: {{ago}}.\nKliknutím vynutíte aktualizaci.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Upravit", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Aktualizování...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Uložit", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Chyba sítě znemožnila aktualizaci tohoto zdroje.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Zrušit", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Jeden filtr na řádek. Filtr může být prostý název hostitele nebo filtr kompatibilní s Adblock Plus. Řádky začínající na ‘!’ budou ignorovány.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Načíst ze souboru…", - "description":"" + "1pImport": { + "message": "Importovat a připojit", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exportovat do souboru", - "description":"" + "1pExport": { + "message": "Exportovat", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"ublock-ma-dynamicka-pravidla_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-me-vlastni-filtry_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Seznam vašich pravidel pro dynamické filtrování.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Použít změny", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Syntaxe pravidel: zdroj destinace typ akce<\/code> (kompletní dokumentace<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Permanentní pravidla", + "description": "header" }, - "whitelistPrompt":{ - "message":"Pokyny whitelistu určují, pro které webové stránky bude uBlock Origin zakázán. Jedna položka na řádek. Neplatné pokyny budou tiše ignorovány a zakomentovány.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Dočasná pravidla", + "description": "header" }, - "whitelistImport":{ - "message":"Importovat a připojit", - "description":"English: Import and append" + "rulesRevert": { + "message": "Vrátit", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exportovat", - "description":"English: Export" + "rulesCommit": { + "message": "Potvrdit", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"ublock-muj-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Upravit", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Použít změny", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Uložit", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Typ", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Zrušit", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Doména", - "description":"English: Domain" + "rulesImport": { + "message": "Načíst ze souboru…", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Exportovat do souboru", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtr", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "ublock-ma-dynamicka-pravidla_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Všechny stránky", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Seznam vašich pravidel pro dynamické filtrování.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Za oponou", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Syntaxe pravidel: zdroj destinace typ akce<\/code> (kompletní dokumentace<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtrovat záznamy", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Pokyny whitelistu určují, pro které webové stránky bude uBlock Origin zakázán. Jedna položka na řádek. Neplatné pokyny budou tiše ignorovány a zakomentovány.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maximální počet záznamů", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importovat a připojit", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontext:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exportovat", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Typ:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "ublock-muj-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamické filtrování URL adres", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Použít změny", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statické filtrování", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Typ", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} síťové požadavky {{type}} {{br}}jejichž URL adresa se shoduje s {{url}} {{br}}a pochází {{origin}},{{br}}{{importance}} shodný výjimkový filtr.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Doména", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokovat", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Povolit", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtr", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"typu “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Všechny stránky", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"jakéhokoliv typu", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Za oponou", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"z “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtrovat záznamy", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"odkudkoliv", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maximální počet záznamů", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"pokud neexistuje", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kontext:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"i když existuje", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Typ:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statický filtr {{filter}} nalezen v seznamech:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamické filtrování URL adres", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Change log", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statické filtrování", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} síťové požadavky {{type}} {{br}}jejichž URL adresa se shoduje s {{url}} {{br}}a pochází {{origin}},{{br}}{{importance}} shodný výjimkový filtr.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Podpora", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokovat", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Zdrojový kód (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Povolit", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Přispěvatelé", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "typu “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Zálohovat do souboru...", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "jakéhokoliv typu", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-moje-zaloha_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "z “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Obnovit ze souboru...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "odkudkoliv", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Obnovit výchozí nastavení...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "pokud neexistuje", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Všechna nastavení budou přepsána těmi zálohovanými {{time}} a uBlock₀ se restartuje.\n\nPřepsat všechna existující nastavení zálohovanými daty?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "i když existuje", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Data nemohla být načtena nebo jsou neplatná", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statický filtr {{filter}} nalezen v seznamech:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Všechna nastavení budou smazána a uBlock₀ se restaruje.\n\nObnovit uBlock₀ do továrního nastavení?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Change log", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Chyba sítě: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Přidat následující URL adresu do seznamů vlastních filtrů?\n\nNázev: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Podpora", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"před minutou", - "description":"English: a minute ago" + "aboutCode": { + "message": "Zdrojový kód (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"před {{value}} minutami", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Přispěvatelé", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"před hodinou", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Zálohovat do souboru...", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"před {{value}} hodinami", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-moje-zaloha_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"včera", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Obnovit ze souboru...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"před {{value}} dny", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Obnovit výchozí nastavení...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Zobrazit řídící panel", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Všechna nastavení budou přepsána těmi zálohovanými {{time}} a uBlock₀ se restartuje.\n\nPřepsat všechna existující nastavení zálohovanými daty?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Zobrazit Zaznamenávač", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Data nemohla být načtena nebo jsou neplatná", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"vypnutý", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Všechna nastavení budou smazána a uBlock₀ se restaruje.\n\nObnovit uBlock₀ do továrního nastavení?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin zabránil následující stránce v načtení:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Chyba sítě: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Kvůli následujícímu filtru", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Přidat následující URL adresu do seznamů vlastních filtrů?\n\nNázev: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"bez parametrů", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "před minutou", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Nalezeno v:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "před {{value}} minutami", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Jít zpět", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "před hodinou", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Zavřít toto okno", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "před {{value}} hodinami", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Zakázat striktní blokování pro {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "včera", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Dočasně", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "před {{value}} dny", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Trvale", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Zobrazit řídící panel", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exportovat do cloudového úložiště", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Zobrazit Zaznamenávač", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importovat z cloudového úložiště", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "vypnutý", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importovat z cloudového úložiště a sloučit se současným nastavením", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin zabránil následující stránce v načtení:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Kvůli následujícímu filtru", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Název tohoto zařízení:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "bez parametrů", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Pozor! Tato pokročilá nastavení měníte na vlastní nebezpečí.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Nalezeno v:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Odeslat", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Jít zpět", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Použít změny", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Zavřít toto okno", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Vrátit", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Zakázat striktní blokování pro {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bajtů", - "description":"" + "docblockedDisableTemporary": { + "message": "Dočasně", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Dočasně povolit velké multimediální prvky", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Trvale", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exportovat do cloudového úložiště", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importovat z cloudového úložiště", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importovat z cloudového úložiště a sloučit se současným nastavením", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Název tohoto zařízení:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Pozor! Tato pokročilá nastavení měníte na vlastní nebezpečí.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Odeslat", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Použít změny", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Vrátit", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajtů", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Dočasně povolit velké multimediální prvky", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/cv/messages.json b/src/_locales/cv/messages.json index 762db5a4b3657..002c2cf52100c 100644 --- a/src/_locales/cv/messages.json +++ b/src/_locales/cv/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Тинех Интернет тишкерӳҫӗ валли хӑвӑрт та витӗмлӗ чаркӑч пур.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Тинех Интернет тишкерӳҫӗ валли хӑвӑрт та витӗмлӗ чаркӑч пур.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"Йӗркелӳ ҫӳлӗкӗ", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "Йӗркелӳ ҫӳлӗкӗ", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ӗнерлев", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ӗнерлев", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Ют фильтрсем", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Ют фильтрсем", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Манӑн фильтрсем", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Манӑн фильтрсем", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Манӑн йӗрке", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Манӑн йӗрке", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Whitelist", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Logger", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Logger", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Сарӑм пирки", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Сарӑм пирки", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Advanced settings", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Advanced settings", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"requests blocked", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"on this page", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} е {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "requests blocked", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"since install", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "on this page", + "description": "English: on this page" }, - "popupOr":{ - "message":"е", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} е {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Йӗркелӳ ҫӳлӗкне уҫма пус", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "since install", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "е", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Enter element picker mode", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Йӗркелӳ ҫӳлӗкне уҫма пус", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Open the logger", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Toggle the blocking of all popups for this site", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Enter element picker mode", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Toggle the blocking of large media elements for this site", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Open the logger", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Toggle cosmetic filtering for this site", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Toggle the blocking of all popups for this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Toggle the blocking of remote fonts for this site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Global rules: this column is for rules which apply to all sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Toggle the blocking of large media elements for this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Click to make your changes permanent.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Click to revert your changes.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"пурте", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Toggle cosmetic filtering for this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"ӳкерчӗксем", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"ют ресурссем", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"ют css\/ӳкерчӗксем", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Toggle the blocking of remote fonts for this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"inline-скриптсем", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Харпӑр скриптсем", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"ют скриптсем", - "description":"" + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Ют фреймсем", - "description":"" + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domains connected", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Click to make your changes permanent.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} out of {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Create", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "пурте", + "description": "" }, - "pickerPick":{ - "message":"Суйласа ил", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "ӳкерчӗксем", + "description": "" }, - "pickerQuit":{ - "message":"Тух", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "ют ресурссем", + "description": "" }, - "pickerPreview":{ - "message":"Preview", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "ют css\/ӳкерчӗксем", + "description": "" }, - "pickerNetFilters":{ - "message":"Network filters", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "inline-скриптсем", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Cosmetic filters", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Харпӑр скриптсем", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl-click", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "ют скриптсем", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Block element", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Ют фреймсем", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Hide placeholders of blocked elements", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domains connected", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Show the number of blocked requests on the icon", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} out of {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Disable tooltips", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Create", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Make use of context menu where appropriate", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Суйласа ил", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Color-blind friendly", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Тух", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Enable cloud storage support", - "description":"" + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Эпӗ ӑста усӑҫ (Вуламасӑр иртме ҫук<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Network filters", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"advanced settings", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Cosmetic filters", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disable pre-fetching (to prevent any connection for blocked network requests)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disable hyperlink auditing", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Block element", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Prevent WebRTC from leaking local IP addresses", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Hide placeholders of blocked elements", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Default behavior", - "description":"" + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Ку ӗнерлеве кашни сайт валли уйрӑм палӑртма май пур", - "description":"" + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Disable cosmetic filtering", - "description":"" + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} КБ йывӑртарах медиа-элементсене чар", - "description":"" + "settingsColorBlindPrompt": { + "message": "Color-blind friendly", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Ют шрифтсене чар", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" }, - "settingsStorageUsed":{ - "message":"Storage used: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Эпӗ ӑста усӑҫ (Вуламасӑр иртме ҫук<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Юлашки тавӑру:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Last backup:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} used out of {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Auto-update filter lists", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" }, - "3pUpdateNow":{ - "message":"Халех ҫӗнет", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Ку ӗнерлеве кашни сайт валли уйрӑм палӑртма май пур", + "description": "" }, - "3pPurgeAll":{ - "message":"Purge all caches", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Parse and enforce cosmetic filters", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "{{input:number}} КБ йывӑртарах медиа-элементсене чар", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Ют шрифтсене чар", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Storage used: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Чарнӑ хостсен йышӗ", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Юлашки тавӑру:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Улшӑнӑва ҫирӗплет", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Реклама", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Вӑрттӑнлӑх", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Malware domains", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Auto-update filter lists", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pUpdateNow": { + "message": "Халех ҫӗнет", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Нумай тӗллевлисем", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Регионсем, чӗлхесем", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Custom", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Кивелнӗ", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Юлашки ҫӗнетӳ: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Чарнӑ хостсен йышӗ", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Updating...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Улшӑнӑва ҫирӗплет", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"A network error prevented the resource from being updated.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Реклама", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Вӑрттӑнлӑх", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Import and append", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Malware domains", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Export", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Нумай тӗллевлисем", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Улшӑнӑва ҫирӗплет", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Регионсем, чӗлхесем", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Яланлӑх йӗрке", - "description":"header" + "3pGroupCustom": { + "message": "Custom", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Вӑхӑтлӑх йӗрке", - "description":"header" + "3pExternalListsHint": { + "message": "One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Тавӑр", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Кивелнӗ", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Ҫирӗплет", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Юлашки ҫӗнетӳ: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Улӑштар", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Updating...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Упра", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Discard", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Import from file...", - "description":"" + "1pImport": { + "message": "Import and append", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Export to file", - "description":"" + "1pExport": { + "message": "Export", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-custom-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"List of your dynamic filtering rules.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Улшӑнӑва ҫирӗплет", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Яланлӑх йӗрке", + "description": "header" }, - "whitelistPrompt":{ - "message":"The whitelist directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Вӑхӑтлӑх йӗрке", + "description": "header" }, - "whitelistImport":{ - "message":"Import and append", - "description":"English: Import and append" + "rulesRevert": { + "message": "Тавӑр", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Export", - "description":"English: Export" + "rulesCommit": { + "message": "Ҫирӗплет", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Улӑштар", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Улшӑнӑва ҫирӗплет", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Упра", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Тĕсĕ", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Discard", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Домен", - "description":"English: Domain" + "rulesImport": { + "message": "Import from file...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Export to file", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Фильтр", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Пурте", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Behind the scene", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Rule syntax: source destination type action<\/code> (full documentation<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filter log entries", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "The whitelist directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maximum number of log entries", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Import and append", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Контекст:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Export", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Тĕсĕ:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":" URL динамика фильтрацийӗ", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Улшӑнӑва ҫирӗплет", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Статика фильстрацийӗ", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Тĕсĕ", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Домен", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Чар", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Ирӗк пар", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Фильтр", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"тĕсĕ “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Пурте", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"any type", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Behind the scene", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":" “{{origin}}” ран", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filter log entries", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"Кирек ӑҫтан та", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maximum number of log entries", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"except when", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Контекст:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"even if", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Тĕсĕ:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": " URL динамика фильтрацийӗ", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Улшӑнусен йышӗ", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Статика фильстрацийӗ", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Вики", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Чар", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Source code (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Ирӗк пар", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Пайташсем", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "тĕсĕ “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Back up to file", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": " “{{origin}}” ран", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Restore from file...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "Кирек ӑҫтан та", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Reset to default settings...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Улшӑнусен йышӗ", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Network error: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Вики", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Support", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"пӗр минут каялла", - "description":"English: a minute ago" + "aboutCode": { + "message": "Source code (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} минут каялла", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Пайташсем", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"пӗр сехет каялла", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Back up to file", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} сехет каялла", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"пӗр кун каялла", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Restore from file...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} кун каялла", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Reset to default settings...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Йӗркелӳ ҫӳлӗкне кӑтарт", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Show Logger", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"off", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Network error: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Тепӗр фильтра пула", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"ӗнерлевсӗр", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "пӗр минут каялла", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Тупӑннӑ:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} минут каялла", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Таврӑн", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "пӗр сехет каялла", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Close this window", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} сехет каялла", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Disable strict blocking for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "пӗр кун каялла", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Вӑхӑтлӑха", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} кун каялла", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Яланлăха", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Йӗркелӳ ҫӳлӗкне кӑтарт", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Export to cloud storage", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Import from cloud storage", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Import from cloud storage and merge with current settings", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Тепӗр фильтра пула", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Ку хатӗрӗн ячӗ:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "ӗнерлевсӗр", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warning! Change these advanced settings at your own risk.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Тупӑннӑ:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Йышӑн", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Таврӑн", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Apply changes", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Close this window", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Тавӑр", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"байт", - "description":"" + "docblockedDisableTemporary": { + "message": "Вӑхӑтлӑха", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Пысӑк медиа-элементсене вӑхӑтлӑха уҫ", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Яланлăха", + "description": "English: Permanently" }, - "dummy":{ - "message":"Ку ҫыру юлашки пулмалла", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Ку хатӗрӗн ячӗ:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Йышӑн", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Тавӑр", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "байт", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Пысӑк медиа-элементсене вӑхӑтлӑха уҫ", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Ку ҫыру юлашки пулмалла", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/da/messages.json b/src/_locales/da/messages.json index 5e190367ade57..ab3f2c14b8f17 100644 --- a/src/_locales/da/messages.json +++ b/src/_locales/da/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Endelig en effektiv blocker til Chromium-baserede browsere. Lavt CPU- og hukommelsesbrug.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Endelig en effektiv blocker til Chromium-baserede browsere. Lavt CPU- og hukommelsesbrug.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashboard", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashboard", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Indstillinger", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Indstillinger", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Tredjeparts filtre", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Tredjeparts filtre", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Mine filtre", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Mine filtre", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Mine regler", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mine regler", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Whitelist", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Netværkslog", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Netværkslog", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Om", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Om", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Avancerede indstillinger", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Avancerede indstillinger", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klik: Deaktiver\/aktiver uBlock₀ på dette websted.\n\nCtrl+Klik: Deaktiver uBlock₀ kun på denne side.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klik: Deaktiver\/aktiver uBlock₀ på dette websted.\n\nCtrl+Klik: Deaktiver uBlock₀ kun på denne side.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"forespørgsler blokeret", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"på denne side", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} eller {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "forespørgsler blokeret", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"siden installation", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "på denne side", + "description": "English: on this page" }, - "popupOr":{ - "message":"eller", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} eller {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Klik for at åbne kontrolpanelet", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "siden installation", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Start element zapper tilstand", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "eller", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Start element-udvælger", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Klik for at åbne kontrolpanelet", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Gå til forespørgselslog", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Start element zapper tilstand", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Aktiver\/Deaktiver blokering af alle popups på denne side", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Start element-udvælger", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Aktiver\/Deaktiver blokering af store medie-elementer på denne side", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Gå til forespørgselslog", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Aktiver\/Deaktiver kosmetiske filtre på denne side", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Aktiver\/Deaktiver blokering af alle popups på denne side", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Aktiver\/deaktiver blokering af skrifttyper fra nettet på dette websted", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globale regler: denne søjle viser de regler der gælder på alle sider.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokale regler: denne søjle viser de regler der gælder kun på denne side.\nLokale regler overskriver globale regler.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Aktiver\/Deaktiver blokering af store medie-elementer på denne side", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Klik her for at anvende dine ændringer.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Klik her for at fortryde dine ændringer.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"alle", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Aktiver\/Deaktiver kosmetiske filtre på denne side", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"billeder", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"Tredjeparts", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"Tredjeparts css\/billeder", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Aktiver\/deaktiver blokering af skrifttyper fra nettet på dette websted", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scripts", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Førsteparts scripts", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"Tredjeparts scripts", - "description":"" + "popupTipGlobalRules": { + "message": "Globale regler: denne søjle viser de regler der gælder på alle sider.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Tredjeparts frames", - "description":"" + "popupTipLocalRules": { + "message": "Lokale regler: denne søjle viser de regler der gælder kun på denne side.\nLokale regler overskriver globale regler.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"Forbundne domæner", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Klik her for at anvende dine ændringer.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} ud af {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Klik her for at fortryde dine ændringer.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Opret", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "alle", + "description": "" }, - "pickerPick":{ - "message":"Vælg", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "billeder", + "description": "" }, - "pickerQuit":{ - "message":"Afslut", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "Tredjeparts", + "description": "" }, - "pickerPreview":{ - "message":"Forhåndsvisning", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "Tredjeparts css\/billeder", + "description": "" }, - "pickerNetFilters":{ - "message":"Netfiltre", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kosmetiske filtre", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Førsteparts scripts", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik. Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "Tredjeparts scripts", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blokér element", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Tredjeparts frames", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Skjul blokerede elementers placeholdere", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "Forbundne domæner", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Vis antallet af blokerede forespørgsler på ikonet", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} ud af {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Deaktiver forklaring af knappers funktioner", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Opret", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Brug kontekstmenuen når det er passende", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Vælg", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Optimeret til farveblindhed", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Afslut", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Aktiver støtte for sky-lagring", - "description":"" + "pickerPreview": { + "message": "Forhåndsvisning", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Jeg er en erfaren bruger (Krævet læsning<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Netfiltre", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"avancerede indstillinger", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kosmetiske filtre", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Deaktiver forudindlæsning (for at sikre at alle sortlistede netværksanmodninger bliver blokeret)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klik. Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Deaktiver hyperlink revision", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blokér element", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Forhindr WebRTC i at lække lokale IP-adresser", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Skjul blokerede elementers placeholdere", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Standard opførsel", - "description":"" + "settingsIconBadgePrompt": { + "message": "Vis antallet af blokerede forespørgsler på ikonet", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Disse standardindstillinger kan tilsidesættes for hver enkelt websted", - "description":"" + "settingsTooltipsPrompt": { + "message": "Deaktiver forklaring af knappers funktioner", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Deaktiver kosmetisk filtrering", - "description":"" + "settingsContextMenuPrompt": { + "message": "Brug kontekstmenuen når det er passende", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloker medieelementer større end {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Optimeret til farveblindhed", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloker skrifttyper fra nettet", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Aktiver støtte for sky-lagring", + "description": "" }, - "settingsStorageUsed":{ - "message":"Brugt plads: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Jeg er en erfaren bruger (Krævet læsning<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Sidste gendannelse:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "avancerede indstillinger", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Sidste sikkerhedskopi:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Deaktiver forudindlæsning (for at sikre at alle sortlistede netværksanmodninger bliver blokeret)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} netværksfiltre + {{cosmeticFilterCount}} kosmetiske filtre fra:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Deaktiver hyperlink revision", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} brugt af {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Forhindr WebRTC i at lække lokale IP-adresser", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Opdater filterlister automatisk.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Standard opførsel", + "description": "" }, - "3pUpdateNow":{ - "message":"Opdatér nu", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Disse standardindstillinger kan tilsidesættes for hver enkelt websted", + "description": "" }, - "3pPurgeAll":{ - "message":"Tøm alle caches", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Deaktiver kosmetisk filtrering", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analyser og benyt kosmetiske filtre.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Bloker medieelementer større end {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Denne indstilling øger uBlock₀'s hukommelsesforbrug.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Bloker skrifttyper fra nettet", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorer fælles kosmetiske filtre", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Det anbefales at aktivere denne funktion på mindre kraftfulde enheder.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Brugt plads: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Liste over blokerede værter", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Sidste gendannelse:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Anvend ændringer", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Sidste sikkerhedskopi:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklamer", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} netværksfiltre + {{cosmeticFilterCount}} kosmetiske filtre fra:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privatliv", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} brugt af {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Malware domæner", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Opdater filterlister automatisk.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pUpdateNow": { + "message": "Opdatér nu", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Universalfilter", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Tøm alle caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regioner, sprog", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analyser og benyt kosmetiske filtre.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Brugerdefineret", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Denne indstilling øger uBlock₀'s hukommelsesforbrug.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"En URL pr. linje. Linjer der starter med ‘!’ bliver ignoreret. Ugyldige URL'er bliver lydløst ignoreret.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorer fælles kosmetiske filtre", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"forældet", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Det anbefales at aktivere denne funktion på mindre kraftfulde enheder.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Sidste opdatering: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Liste over blokerede værter", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Opdaterer...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Anvend ændringer", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"En netværksfejl forhindrede ressourcen i at blive opdateret.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklamer", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Ét filter pr. linje. Et filter kan være et almindeligt værtsnavn, eller et Adblock Plus-kompatibelt filter. Linjer der starter med ‘!’ vil blive ignoreret.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privatliv", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importer og tilføj", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Malware domæner", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Eksportér", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"mine-ublock-statiske-filtre_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Universalfilter", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Anvend ændringer", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regioner, sprog", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Permanente regler", - "description":"header" + "3pGroupCustom": { + "message": "Brugerdefineret", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Midlertidige regler", - "description":"header" + "3pExternalListsHint": { + "message": "En URL pr. linje. Linjer der starter med ‘!’ bliver ignoreret. Ugyldige URL'er bliver lydløst ignoreret.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Gendan", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "forældet", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Gør permanent", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Sidste opdatering: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Rediger", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Opdaterer...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Gem", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "En netværksfejl forhindrede ressourcen i at blive opdateret.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Kassér", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Ét filter pr. linje. Et filter kan være et almindeligt værtsnavn, eller et Adblock Plus-kompatibelt filter. Linjer der starter med ‘!’ vil blive ignoreret.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importer fra fil...", - "description":"" + "1pImport": { + "message": "Importer og tilføj", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Eksporter til fil", - "description":"" + "1pExport": { + "message": "Eksportér", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"mine-ublock-dynamiske-regler_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "mine-ublock-statiske-filtre_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Liste over dine dynamiske filtreringsregler.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Anvend ændringer", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Regelsyntaks: kilde destination type handling<\/code> (Fuld dokumentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Permanente regler", + "description": "header" }, - "whitelistPrompt":{ - "message":"Brugerdefineret liste over værtsnavne hvor uBlock₀ vil være deaktiveret. Kun et værtsnavn pr. linje. Ugyldige værtsnavne ignoreres.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Midlertidige regler", + "description": "header" }, - "whitelistImport":{ - "message":"Importer og tilføj", - "description":"English: Import and append" + "rulesRevert": { + "message": "Gendan", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Eksportér", - "description":"English: Export" + "rulesCommit": { + "message": "Gør permanent", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"min-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Rediger", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Anvend ændringer", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Gem", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Kassér", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domæne", - "description":"English: Domain" + "rulesImport": { + "message": "Importer fra fil...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Eksporter til fil", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "mine-ublock-dynamiske-regler_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Alle", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Liste over dine dynamiske filtreringsregler.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Bag kulisserne", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Regelsyntaks: kilde destination type handling<\/code> (Fuld dokumentation<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"Filtrér elementer i log", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Brugerdefineret liste over værtsnavne hvor uBlock₀ vil være deaktiveret. Kun et værtsnavn pr. linje. Ugyldige værtsnavne ignoreres.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maksimalt antal elementer i log", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importer og tilføj", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Eksportér", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "min-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamisk URL filtrering", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Anvend ændringer", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statisk filtrering", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} netværksanmodninger af {{type}} {{br}}som matcher følgende URL {{url}} {{br}}og som stammer fra {{origin}},{{br}}{{importance}} der er et matchende undtagelses-filter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domæne", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloker", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Tillad", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type \"{{type}}\"", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Alle", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"enhver type", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Bag kulisserne", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"fra \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "Filtrér elementer i log", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"fra hvor som helst", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maksimalt antal elementer i log", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"undtagen når", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"selvom", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statisk filter {{filter}} findes i:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamisk URL filtrering", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Changelog", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statisk filtrering", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} netværksanmodninger af {{type}} {{br}}som matcher følgende URL {{url}} {{br}}og som stammer fra {{origin}},{{br}}{{importance}} der er et matchende undtagelses-filter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloker", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Kildekode (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Tillad", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Bidragydere", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "type \"{{type}}\"", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Backup til fil", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "enhver type", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"min-ublock-sikkerhedskopi_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "fra \"{{origin}}\"", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Gendan fra fil...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "fra hvor som helst", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Nulstil til standardindstillinger...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "undtagen når", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Alle indstillinger vil blive erstattet af sikkerhedskopien fra {{time}}, hvorefter uBlock₀ vil genstarte.\n\nErstat alle indstillinger med indstillingerne fra sikkerhedskopien?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "selvom", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Data kunne ikke læses eller er ugyldig", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statisk filter {{filter}} findes i:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Alle dine indstillinger vil blive nulstillet, hvorefter uBlock₀ vil genstarte.\n\nGendan alle indstillinger i uBlock₀ til standard?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Changelog", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Kan ikke forbinde til {{url}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Tilføj det følgende URL til din personlige filterliste?\n\nTitel: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Support", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"et minut siden", - "description":"English: a minute ago" + "aboutCode": { + "message": "Kildekode (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutter siden", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Bidragydere", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"en time siden", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Backup til fil", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} timer siden", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "min-ublock-sikkerhedskopi_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"en dag siden", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Gendan fra fil...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dage siden", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Nulstil til standardindstillinger...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Vis Instrumentpanel", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Alle indstillinger vil blive erstattet af sikkerhedskopien fra {{time}}, hvorefter uBlock₀ vil genstarte.\n\nErstat alle indstillinger med indstillingerne fra sikkerhedskopien?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Vis netværkslog", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Data kunne ikke læses eller er ugyldig", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"Slået fra", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Alle dine indstillinger vil blive nulstillet, hvorefter uBlock₀ vil genstarte.\n\nGendan alle indstillinger i uBlock₀ til standard?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ har blokeret den følgende hjemmeside:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Kan ikke forbinde til {{url}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"På grund af det følgende filter", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Tilføj det følgende URL til din personlige filterliste?\n\nTitel: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"uden parametre", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "et minut siden", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Fundet i:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minutter siden", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Gå tilbage", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "en time siden", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Luk vinduet", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} timer siden", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Deaktiver streng blokering af {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "en dag siden", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Midlertidig", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} dage siden", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Vis Instrumentpanel", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Eksporter til skylagring", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Vis netværkslog", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importer fra skylagring", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "Slået fra", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importer fra skyopbevaring og sammenflet med de aktuelle indstillinger", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ har blokeret den følgende hjemmeside:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "På grund af det følgende filter", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Denne enheds navn:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "uden parametre", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Advarsel! Ændr disse avancerede indstillinger på eget ansvar.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Fundet i:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Indsend", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Gå tilbage", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Anvend ændringer", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Luk vinduet", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Gendan", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Deaktiver streng blokering af {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Midlertidig", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Tillad store medie-elementer midlertidigt", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanent", + "description": "English: Permanently" }, - "dummy":{ - "message":"Denne indskrivning må være den sidste", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Eksporter til skylagring", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importer fra skylagring", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importer fra skyopbevaring og sammenflet med de aktuelle indstillinger", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Denne enheds navn:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Advarsel! Ændr disse avancerede indstillinger på eget ansvar.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Indsend", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Anvend ændringer", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Gendan", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Tillad store medie-elementer midlertidigt", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Denne indskrivning må være den sidste", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/de/messages.json b/src/_locales/de/messages.json index e101c540acba0..75a975d2f4c7a 100644 --- a/src/_locales/de/messages.json +++ b/src/_locales/de/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Endlich ein effizienter Blocker. Prozessor-freundlich und bescheiden beim Speicherbedarf.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Endlich ein effizienter Blocker. Prozessor-freundlich und bescheiden beim Speicherbedarf.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashboard", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashboard", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Einstellungen", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Einstellungen", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Vorgegebene Filter", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Vorgegebene Filter", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Meine Filter", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Meine Filter", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Meine Regeln", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Meine Regeln", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Whitelist", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Protokoll der Netzwerkanfragen", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Protokoll der Netzwerkanfragen", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Über", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Über", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Erweiterte Einstellungen", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Erweiterte Einstellungen", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klick: uBlock₀ für alle Seiten dieser Domain aktivieren\/deaktivieren.\n\nStrg+Klick: uBlock₀ nur für die aktuelle Webseite deaktivieren.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klick: uBlock₀ für alle Seiten dieser Domain aktivieren\/deaktivieren.\n\nStrg+Klick: uBlock₀ nur für die aktuelle Webseite deaktivieren.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"blockierte Anfragen", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Klicken, um uBlock₀ für diese Website zu deaktivieren. \n\nStrg+Klick, um uBlock₀ nur auf dieser Webseite zu deaktivieren.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"auf dieser Seite", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Klicken Sie hier, um uBlock₀ für diese Website zu aktivieren.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} oder {{percent}} %", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "blockierte Anfragen", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"seit Installation", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "auf dieser Seite", + "description": "English: on this page" }, - "popupOr":{ - "message":"oder", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} oder {{percent}} %", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Klicken, um das Dashboard zu öffnen", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "seit Installation", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Element-Entfernungsmodus starten", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "oder", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Öffne den Element-Picker-Modus", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Klicken, um das Dashboard zu öffnen", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Protokoll der Netzwerkanfragen öffnen", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Element-Entfernungsmodus starten", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Blockieren von Popups für diese Seite an-\/ausschalten", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Öffne den Element-Picker-Modus", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Das Blockieren großer Medienelemente auf dieser Seite an-\/ausschalten", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Protokoll der Netzwerkanfragen öffnen", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Kosmetische Filter für diese Seite an-\/ausschalten", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Blockieren von Popups für diese Seite an-\/ausschalten", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Remote-Schriftarten für diese Seite an-\/ausschalten", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Hier klicken, um alle Popups auf dieser Seite zu blockieren", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globale Regeln: Diese Spalte ist für Regeln, die bei allen Seiten angewendet werden.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Hier klicken, um Popups auf dieser Seite nicht mehr zu blockieren", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokale Regeln: Diese Spalte ist für Regeln, die nur bei dieser Seite angewendet werden.\nLokale Regeln überschreiben globale Regeln.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Das Blockieren großer Medienelemente auf dieser Seite an-\/ausschalten", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Hier klicken, um deine Änderungen dauerhaft zu übernehmen.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Hier klicken, um große Medienelemente auf dieser Seite zu blockieren", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Hier klicken, um deine Änderungen rückgängig zu machen.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Hier klicken, um große Medienelemente auf dieser Seite nicht mehr zu blockieren", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"Alle Ressourcen", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Kosmetische Filter für diese Seite an-\/ausschalten", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"Bilder", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Hier klicken, um Kosmetische Filter auf dieser Seite zu deaktivieren", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"Ressourcen von Drittseiten", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Hier klicken, um Kosmetische Filter auf dieser Seite zu aktivieren", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/Bilder von Drittseiten", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Remote-Schriftarten für diese Seite an-\/ausschalten", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"Inline-Skripte", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Hier klicken, um Remote-Schriftarten auf dieser Website zu blockieren", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Skripte der aktuellen Seite", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Hier klicken, um Remote-Schriftarten auf dieser Website nicht mehr zu blockieren", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"Skripte von Drittseiten", - "description":"" + "popupTipGlobalRules": { + "message": "Globale Regeln: Diese Spalte ist für Regeln, die bei allen Seiten angewendet werden.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Frames von Drittseiten", - "description":"" + "popupTipLocalRules": { + "message": "Lokale Regeln: Diese Spalte ist für Regeln, die nur bei dieser Seite angewendet werden.\nLokale Regeln überschreiben globale Regeln.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"verbundene Domains", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Hier klicken, um deine Änderungen dauerhaft zu übernehmen.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} von insgesamt {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Hier klicken, um deine Änderungen rückgängig zu machen.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Erzeugen", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "Alle Ressourcen", + "description": "" }, - "pickerPick":{ - "message":"Auswählen", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "Bilder", + "description": "" }, - "pickerQuit":{ - "message":"Beenden", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "Ressourcen von Drittseiten", + "description": "" }, - "pickerPreview":{ - "message":"Vorschau", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "CSS\/Bilder von Drittseiten", + "description": "" }, - "pickerNetFilters":{ - "message":"Netzwerkfilter", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "Inline-Skripte", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kosmetische Filter", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Skripte der aktuellen Seite", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klick, Strg-Klick", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "Skripte von Drittseiten", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Element blockieren", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Frames von Drittseiten", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Verstecke die Platzhalter für blockierte Elemente", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "verbundene Domains", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Anzahl blockierter Anfragen auf dem Symbol anzeigen", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} von insgesamt {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Tooltips deaktivieren", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Erzeugen", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Kontextmenü verwenden, falls verfügbar", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Auswählen", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Anzeige für farbenblinde Benutzer", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Beenden", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Unterstützung für Speicherung in der Cloud aktivieren", - "description":"" + "pickerPreview": { + "message": "Vorschau", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Ich bin ein erfahrener Anwender (Pflichtlektüre<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Netzwerkfilter", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"Erweiterte Einstellungen", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kosmetische Filter", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Prefetching (Vorabrufen von Webseiten) deaktivieren (um jede Verbindung für blockierte Netzwerkanfragen zu verhindern)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klick, Strg-Klick", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Hyperlink-Überwachung deaktivieren", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Element blockieren", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Freigabe der lokalen IP-Adresse via WebRTC verhindern", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Verstecke die Platzhalter für blockierte Elemente", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Standardverhalten", - "description":"" + "settingsIconBadgePrompt": { + "message": "Anzahl blockierter Anfragen auf dem Symbol anzeigen", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Dieses Standardverhalten kann für jede Seite angepasst werden", - "description":"" + "settingsTooltipsPrompt": { + "message": "Tooltips deaktivieren", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Kosmetische Filter deaktivieren", - "description":"" + "settingsContextMenuPrompt": { + "message": "Kontextmenü verwenden, falls verfügbar", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Medienelemente größer als {{input:number}} kB blocken", - "description":"" + "settingsColorBlindPrompt": { + "message": "Anzeige für farbenblinde Benutzer", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Externe Schriftarten blocken", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Unterstützung für Speicherung in der Cloud aktivieren", + "description": "" }, - "settingsStorageUsed":{ - "message":"Verwendeter Speicherplatz: {{value}} Bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Ich bin ein erfahrener Anwender (Pflichtlektüre<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Letzte Wiederherstellung:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "Erweiterte Einstellungen", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Letztes Backup:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Prefetching (Vorabrufen von Webseiten) deaktivieren (um jede Verbindung für blockierte Netzwerkanfragen zu verhindern)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} Netzwerkfilter + {{cosmeticFilterCount}} kosmetische Filter von:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Hyperlink-Überwachung deaktivieren", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} benutzt aus {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Freigabe der lokalen IP-Adresse via WebRTC verhindern", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Automatische Aktualisierung der Filterlisten", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Standardverhalten", + "description": "" }, - "3pUpdateNow":{ - "message":"Jetzt aktualisieren", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Dieses Standardverhalten kann für jede Webseite angepasst werden", + "description": "" }, - "3pPurgeAll":{ - "message":"Leere alle Cache-Speicher", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Kosmetische Filter deaktivieren", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Kosmetische Filter auswerten und deren Anwendung erzwingen", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Medienelemente größer als {{input:number}} kB blocken", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Das Aktivieren dieser Option erhöht den Speicherbedarf von uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Externe Schriftarten blocken", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Generische kosmetische Filter ignorieren", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "CSP-Berichte blockieren", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Es wird empfohlen, diese Option auf weniger leistungsstarken Geräten zu aktivieren.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Verwendeter Speicherplatz: {{value}} Bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listen blockierter Hostnamen", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Letzte Wiederherstellung:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Änderungen anwenden", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Letztes Backup:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Werbung", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} Netzwerkfilter + {{cosmeticFilterCount}} kosmetische Filter von:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privatsphäre", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} benutzt aus {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domains mit Schadsoftware", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Automatische Aktualisierung der Filterlisten", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Soziale Netzwerke", - "description":"English: Social" + "3pUpdateNow": { + "message": "Jetzt aktualisieren", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Verschiedene Zwecke", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Leere alle Cache-Speicher", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regionen, Sprachen", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Kosmetische Filter auswerten und deren Anwendung erzwingen", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Benutzerdefiniert", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Das Aktivieren dieser Option erhöht den Speicherbedarf von uBlock₀<\/i>.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Eine URL pro Zeile. Zeilen mit vorangestelltem ‘!’ werden ignoriert. Ungültige URLs werden stillschweigend ignoriert.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Generische kosmetische Filter ignorieren", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"veraltet", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Es wird empfohlen, diese Option auf weniger leistungsstarken Geräten zu aktivieren.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Letzte Aktualisierung: {{ago}}.\nAktualisierung durch Anklicken erzwingen.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Listen blockierter Hostnamen", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Wird aktualisiert …", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Änderungen anwenden", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Ein Netzwerkfehler verhinderte die Aktualisierung der Ressource.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Werbung", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Eine Regel pro Zeile. Eine Regel kann ein einfacher Hostname sein oder ein Adblock Plus-kompatibler Filter. Zeilen mit vorangestelltem ‘!’ werden ignoriert.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privatsphäre", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importieren und anfügen", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domains mit Schadsoftware", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exportieren", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Belästigungen", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Verschiedene Zwecke", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Änderungen anwenden", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regionen, Sprachen", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Permanente Regeln", - "description":"header" + "3pGroupCustom": { + "message": "Benutzerdefiniert", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Temporäre Regeln", - "description":"header" + "3pExternalListsHint": { + "message": "Eine URL pro Zeile. Zeilen mit vorangestelltem ‘!’ werden ignoriert. Ungültige URLs werden stillschweigend ignoriert.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Rückgängig machen", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "veraltet", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Dauerhaft speichern", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Letzte Aktualisierung: {{ago}}.\nAktualisierung durch Anklicken erzwingen.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Bearbeiten", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Wird aktualisiert …", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Speichern", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Ein Netzwerkfehler verhinderte die Aktualisierung der Ressource.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Verwerfen", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Eine Regel pro Zeile. Eine Regel kann ein einfacher Hostname sein oder ein Adblock Plus-kompatibler Filter. Zeilen mit vorangestelltem ‘!’ werden ignoriert.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Aus einer Datei importieren …", - "description":"" + "1pImport": { + "message": "Importieren und anfügen", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"In eine Datei exportieren ...", - "description":"" + "1pExport": { + "message": "Exportieren", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-custom-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Liste deiner dynamischen Filterregeln.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Änderungen anwenden", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Regel-Syntax: Quelle Ziel Typ Action<\/code> ( vollständige Dokumentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Permanente Regeln", + "description": "header" }, - "whitelistPrompt":{ - "message":"Whitelist-Regeln schreiben vor, auf welchen Webseiten uBlock₀ nicht aktiv sein soll. Ein Eintrag pro Zeile. Ungültige Regeln werden stillschweigend ignoriert und auskommentiert.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Temporäre Regeln", + "description": "header" }, - "whitelistImport":{ - "message":"Importieren und anfügen", - "description":"English: Import and append" + "rulesRevert": { + "message": "Rückgängig machen", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exportieren", - "description":"English: Export" + "rulesCommit": { + "message": "Dauerhaft speichern", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"meine-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Bearbeiten", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Änderungen anwenden", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Speichern", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Typ", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Verwerfen", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domain", - "description":"English: Domain" + "rulesImport": { + "message": "Aus einer Datei importieren …", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "In eine Datei exportieren ...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Alle", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Liste deiner dynamischen Filterregeln.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Hintergrundanfragen", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Regel-Syntax: Quelle Ziel Typ Action<\/code> ( vollständige Dokumentation<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"Protokoll-Einträge filtern", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Whitelist-Regeln schreiben vor, auf welchen Webseiten uBlock₀ nicht aktiv sein soll. Ein Eintrag pro Zeile. Ungültige Regeln werden stillschweigend ignoriert und auskommentiert.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maximale Anzahl an Protokoll-Einträgen", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importieren und anfügen", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontext:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exportieren", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Typ:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "meine-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamische URL Filter", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Änderungen anwenden", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statische Filter", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Typ", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} Netzwerkanfragen {{type}} {{br}}deren URL-Adresse mit {{url}} übereinstimmt{{br}} und von {{origin}} stammen,{{br}}{{importance}} ein übereinstimmender Ausnahme-Filter existiert.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blockiere", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Erlaube", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"vom Typ \"{{type}}\"", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Alle", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"aller Typen", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Hintergrundanfragen", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"{{origin}}", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "Protokoll-Einträge filtern", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"überall", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maximale Anzahl an Protokoll-Einträgen", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"außer wenn", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kontext:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"selbst wenn", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Typ:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statischer Filter {{filter}} gefunden in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamische URL Filter", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Änderungsprotokoll", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statische Filter", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} Netzwerkanfragen {{type}} {{br}}deren URL-Adresse mit {{url}} übereinstimmt{{br}} und von {{origin}} stammen,{{br}}{{importance}} ein übereinstimmender Ausnahme-Filter existiert.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Unterstützung", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blockiere", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Quellcode (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Erlaube", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Mitwirkende", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "vom Typ \"{{type}}\"", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Backup in eine Datei", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "aller Typen", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "{{origin}}", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Aus einer Datei wiederherstellen ...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "überall", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Auf Vorgaben zurücksetzen …", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "außer wenn", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Alle Einstellungen werden überschrieben und auf den Stand von {{time}} gebracht. Anschließend wird uBlock neu gestartet.\n\nSollen die aktuellen Einstellungen durch das Backup ersetzt werden?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "selbst wenn", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Die Daten konnten nicht gelesen werden oder waren ungültig", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statischer Filter {{filter}} gefunden in:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Alle Einstellungen werden gelöscht und uBlock₀ wird neu gestartet.\n\nSoll uBlock₀ auf Werkseinstellungen zurückgesetzt werden?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Änderungsprotokoll", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Netzwerkfehler: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Die folgende URL deiner Auswahl an Filterlisten hinzufügen?\n\nTitel: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Unterstützung", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"vor einer Minute", - "description":"English: a minute ago" + "aboutCode": { + "message": "Quellcode (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"vor {{value}} Minuten", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Mitwirkende", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"vor einer Stunde", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Backup in eine Datei", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"vor {{value}} Stunden", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"vor einem Tag", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Aus einer Datei wiederherstellen ...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"vor {{value}} Tagen", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Auf Vorgaben zurücksetzen …", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Dashboard anzeigen", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Alle Einstellungen werden überschrieben und auf den Stand von {{time}} gebracht. Anschließend wird uBlock neu gestartet.\n\nSollen die aktuellen Einstellungen durch das Backup ersetzt werden?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Protokoll der Netzwerkanfragen anzeigen", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Die Daten konnten nicht gelesen werden oder waren ungültig", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"aus", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Alle Einstellungen werden gelöscht und uBlock₀ wird neu gestartet.\n\nSoll uBlock₀ auf Werkseinstellungen zurückgesetzt werden?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin hat das Laden der folgenden Seite verhindert:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Netzwerkfehler: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Aufgrund des folgenden Filters", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Die folgende URL deiner Auswahl an Filterlisten hinzufügen?\n\nTitel: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"ohne Parameter", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "vor einer Minute", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Gefunden in:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "vor {{value}} Minuten", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Gehe zurück", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "vor einer Stunde", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Schließe dieses Fenster", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "vor {{value}} Stunden", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Kein striktes Blockieren für {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "vor einem Tag", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporär", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "vor {{value}} Tagen", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Dashboard anzeigen", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"In den Cloud-Speicher exportieren", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Protokoll der Netzwerkanfragen anzeigen", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Aus dem Cloud-Speicher importieren", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "aus", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Backup aus der Cloud importieren und mit den aktuellen Einstellungen zusammenführen", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin hat das Laden der folgenden Seite verhindert:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Aufgrund des folgenden Filters", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Dieser Gerätename:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "ohne Parameter", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warnung! Veränderungen dieser erweiterten Einstellungen auf eigenes Risiko.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Gefunden in:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Absenden", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Gehe zurück", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Änderungen anwenden", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Schließe dieses Fenster", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Rückgängig machen", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Kein striktes Blockieren für {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"Bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporär", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Vorübergehend große Medienelemente erlauben", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanent", + "description": "English: Permanently" }, - "dummy":{ - "message":"Dieser Eintrag muss der letzte sein", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "In den Cloud-Speicher exportieren", + "description": "tooltip" + }, + "cloudPull": { + "message": "Aus dem Cloud-Speicher importieren", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Backup aus der Cloud importieren und mit den aktuellen Einstellungen zusammenführen", + "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" + }, + "advancedSettingsWarning": { + "message": "Warnung! Veränderungen dieser erweiterten Einstellungen auf eigenes Risiko.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Absenden", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Änderungen anwenden", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Rückgängig machen", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "Bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Vorübergehend große Medienelemente erlauben", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Dieser Eintrag muss der letzte sein", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/el/messages.json b/src/_locales/el/messages.json index 9000da8dff876..d43b84a73415f 100644 --- a/src/_locales/el/messages.json +++ b/src/_locales/el/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Επιτέλους, ένας αποτελεσματικός blocker. Ελαφρύς για τον επεξεργαστή και τη μνήμη.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Επιτέλους, ένας αποτελεσματικός blocker. Ελαφρύς για τον επεξεργαστή και τη μνήμη.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ - Πίνακας ελέγχου", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ - Πίνακας ελέγχου", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ρυθμίσεις", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ρυθμίσεις", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Φίλτρα τρίτων", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Φίλτρα τρίτων", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Τα φίλτρα μου", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Τα φίλτρα μου", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Οι κανόνες μου", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Οι κανόνες μου", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Λίστα επιτρεπόμενων", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Λίστα επιτρεπόμενων", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ - Καταγραφή αιτημάτων δικτύου", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ - Καταγραφή αιτημάτων δικτύου", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Σχετικά", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Σχετικά", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Ρυθμίσεις για προχωρημένους", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Ρυθμίσεις για προχωρημένους", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Κλικ: απενεργοποίηση\/ενεργοποίηση του uBlock₀ για αυτόν τον ιστότοπο.\n\nCtrl+κλικ: απενεργοποίηση του uBlock₀ μόνο για αυτήν την σελίδα.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Κλικ: απενεργοποίηση\/ενεργοποίηση του uBlock₀ για αυτόν τον ιστότοπο.\n\nCtrl+κλικ: απενεργοποίηση του uBlock₀ μόνο για αυτήν την σελίδα.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"αποκλεισμένα αιτήματα", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"σε αυτήν τη σελίδα", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} ή {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "αποκλεισμένα αιτήματα", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"από την εγκατάσταση", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "σε αυτήν τη σελίδα", + "description": "English: on this page" }, - "popupOr":{ - "message":"ή", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} ή {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Κάντε κλικ για να ανοίξετε τον πίνακα εργαλείων", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "από την εγκατάσταση", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Είσοδος σε λειτουργία εκτέλεσης στοιχείων", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "ή", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Είσοδος στη λειτουργία επιλογής στοιχείων", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Κάντε κλικ για να ανοίξετε τον πίνακα εργαλείων", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Πηγαίνετε στο αρχείο καταγραφής αιτημάτων", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Είσοδος σε λειτουργία εκτέλεσης στοιχείων", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Παρεμπόδιση αναδυόμενων παραθύρων για αυτόν τον ιστότοπο", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Είσοδος στη λειτουργία επιλογής στοιχείων", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Εναλλαγή της φραγής των μεγάλων στοιχείων πολυμέσων για αυτήν την τοποθεσία", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Πηγαίνετε στο αρχείο καταγραφής αιτημάτων", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Ενεργοποιήστε διακοσμητικό φιλτράρισμα για αυτήν τη σελίδα", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Παρεμπόδιση αναδυόμενων παραθύρων για αυτόν τον ιστότοπο", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Ενεργοποιήστε το μπλοκάρισμα απομακρυσμένων γραμματοσειρών για αυτήν την ιστοσελίδα", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Καθολικοί κανόνες: αυτή η στήλη είναι για κανόνες με εφαρμογή σε όλες τις τοποθεσίες.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Τοπικοί κανόνες: αυτή η στήλη είναι για κανόνες με εφαρμογή στην τρέχουσα τοποθεσία μόνο.\nΟι τοπικοί κανόνες παραμερίζουν τους καθολικούς κανόνες.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Εναλλαγή της φραγής των μεγάλων στοιχείων πολυμέσων για αυτήν την τοποθεσία", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Πατήστε για να κάνετε τις αλλαγές σας μόνιμες.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Πατήστε για να αντιστρέψετε τις αλλαγές σας.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"όλα", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Ενεργοποιήστε διακοσμητικό φιλτράρισμα για αυτήν τη σελίδα", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"Εικόνες", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"πόροι ιστότοπων τρίτων", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"3ου μέρους css\/Εικόνες", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Ενεργοποιήστε το μπλοκάρισμα απομακρυσμένων γραμματοσειρών για αυτήν την ιστοσελίδα", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scripts", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"scripts τρέχοντος ιστότοπου", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"scripts ιστότοπων τρίτων", - "description":"" + "popupTipGlobalRules": { + "message": "Καθολικοί κανόνες: αυτή η στήλη είναι για κανόνες με εφαρμογή σε όλες τις τοποθεσίες.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"frames ιστότοπων τρίτων", - "description":"" + "popupTipLocalRules": { + "message": "Τοπικοί κανόνες: αυτή η στήλη είναι για κανόνες με εφαρμογή στην τρέχουσα τοποθεσία μόνο.\nΟι τοπικοί κανόνες παραμερίζουν τους καθολικούς κανόνες.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"συνδεδεμένοι τομείς", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Πατήστε για να κάνετε τις αλλαγές σας μόνιμες.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} από {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Πατήστε για να αντιστρέψετε τις αλλαγές σας.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Δημιουργία", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "όλα", + "description": "" }, - "pickerPick":{ - "message":"Επιλογή", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "Εικόνες", + "description": "" }, - "pickerQuit":{ - "message":"Κλείσιμο", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "πόροι ιστότοπων τρίτων", + "description": "" }, - "pickerPreview":{ - "message":"Προεπισκόπηση", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "3ου μέρους css\/Εικόνες", + "description": "" }, - "pickerNetFilters":{ - "message":"Φίλτρα δικτύου", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Κοσμητικά φίλτρα", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "scripts τρέχοντος ιστότοπου", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Κλικ, Ctrl-κλικ", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "scripts ιστότοπων τρίτων", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Αποκλεισμός στοιχείου", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "frames ιστότοπων τρίτων", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Απόκρυψη κρατημένων πεδίων από αποκλεισμένα στοιχεία", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "συνδεδεμένοι τομείς", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Εμφάνιση του αριθμού αποκλεισμένων αιτημάτων στο εικονίδιο", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} από {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Απενεργοποιήστε τις αιωρούμενες επεξηγήσεις", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Δημιουργία", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Να γίνεται χρήση του αναδυόμενου μενού, όπου ενδείκνυται", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Επιλογή", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Λειτουργία φιλική προς χρήστες με αχρωματοψία", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Κλείσιμο", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ενεργοποίηση υποστήριξης cloud storage", - "description":"" + "pickerPreview": { + "message": "Προεπισκόπηση", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Είμαι προχωρημένος χρήστης (Aπαραίτητη ανάγνωση<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Φίλτρα δικτύου", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"ρυθμίσεις για προχωρημένους", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Κοσμητικά φίλτρα", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Απενεργοποίηση πρόωρης φόρτωσης (για να αποτραπεί κάθε σύνδεση σε μπλοκαρισμένες αιτήσεις δικτύου)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Κλικ, Ctrl-κλικ", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Απενεργοποίηση ελέγχου\/διόπτευσης υπερσυνδέσμων", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Αποκλεισμός στοιχείου", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Αποτρέψτε το WebRTC από το να διαρρέει την τοπική διεύθυνση IP", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Απόκρυψη κρατημένων πεδίων από αποκλεισμένα στοιχεία", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Προεπιλεγμένη συμπεριφορά", - "description":"" + "settingsIconBadgePrompt": { + "message": "Εμφάνιση του αριθμού αποκλεισμένων αιτημάτων στο εικονίδιο", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Αυτές οι προεπιλεγμένες συμπεριφορές μπορούν να παρακαμφθούν ανα-τοποθεσία", - "description":"" + "settingsTooltipsPrompt": { + "message": "Απενεργοποιήστε τις αιωρούμενες επεξηγήσεις", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Απενεργοποίηση διακοσμητικού φιλτραρίσματος", - "description":"" + "settingsContextMenuPrompt": { + "message": "Να γίνεται χρήση του αναδυόμενου μενού, όπου ενδείκνυται", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Φραγή στοιχείων πολυμέσων μεγαλύτερων από {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Λειτουργία φιλική προς χρήστες με αχρωματοψία", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Φραγή απομακρυσμένων γραμματοσειρών", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Ενεργοποίηση υποστήριξης cloud storage", + "description": "" }, - "settingsStorageUsed":{ - "message":"Αποθηκευτικός χώρος σε χρήση: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Είμαι προχωρημένος χρήστης (Aπαραίτητη ανάγνωση<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Τελευταία ανάκτηση:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "ρυθμίσεις για προχωρημένους", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Τελευταίο αντίγραφο ασφαλείας:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Απενεργοποίηση πρόωρης φόρτωσης (για να αποτραπεί κάθε σύνδεση σε μπλοκαρισμένες αιτήσεις δικτύου)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} φίλτρα δικτύου+ {{cosmeticFilterCount}} κοσμητικά φίλτρα από:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Απενεργοποίηση ελέγχου\/διόπτευσης υπερσυνδέσμων", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} σε χρήση από {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Αποτρέψτε το WebRTC από το να διαρρέει την τοπική διεύθυνση IP", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Αυτόματη ενημέρωση λιστών φίλτρων.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Προεπιλεγμένη συμπεριφορά", + "description": "" }, - "3pUpdateNow":{ - "message":"Ενημέρωση τώρα", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Αυτές οι προεπιλεγμένες συμπεριφορές μπορούν να παρακαμφθούν ανα-τοποθεσία", + "description": "" }, - "3pPurgeAll":{ - "message":"Εκκαθάριση προσωρινής μνήμης κάθε λίστας", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Απενεργοποίηση διακοσμητικού φιλτραρίσματος", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Ανάλυση και επιβολή κοσμητικών φίλτρων.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Φραγή στοιχείων πολυμέσων μεγαλύτερων από {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Η ενεργοποίηση αυτής της λειτουργίας αυξάνει το αποτύπωμα μνήμης του uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Φραγή απομακρυσμένων γραμματοσειρών", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Παράβλεψη γενικών κοσμητικών φίλτρων", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Προτείνεται η ενεργοποίηση αυτής της επιλογής στις λιγότερο ισχυρές συσκευές.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Αποθηκευτικός χώρος σε χρήση: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Λίστες αποκλεισμένων hosts", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Τελευταία ανάκτηση:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Εφαρμογή αλλαγών", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Τελευταίο αντίγραφο ασφαλείας:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Διαφημίσεις", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} φίλτρα δικτύου+ {{cosmeticFilterCount}} κοσμητικά φίλτρα από:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Ιδιωτικό απόρρητο", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} σε χρήση από {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Τομείς κακόβουλου λογισμικού", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Αυτόματη ενημέρωση λιστών φίλτρων.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Κοινωνικά δίκτυα", - "description":"English: Social" + "3pUpdateNow": { + "message": "Ενημέρωση τώρα", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Πολλαπλών χρήσεων", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Εκκαθάριση προσωρινής μνήμης κάθε λίστας", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Περιοχές, γλώσσες", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Ανάλυση και επιβολή κοσμητικών φίλτρων.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Προσαρμοσμένη", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Η ενεργοποίηση αυτής της λειτουργίας αυξάνει το αποτύπωμα μνήμης του uBlock₀<\/i>.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Ένα URL ανά γραμμή. Γραμμές με το πρόθεμα ‘!’ θα παραβλέπονται. Άκυρα URL θα παρακάμπτονται σιωπηλά.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Παράβλεψη γενικών κοσμητικών φίλτρων", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"ξεπερασμένη", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Προτείνεται η ενεργοποίηση αυτής της επιλογής στις λιγότερο ισχυρές συσκευές.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Τελευταία ενημέρωση: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Λίστες αποκλεισμένων hosts", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Ενημέρωση...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Εφαρμογή αλλαγών", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Ένα σφάλμα δικτύου εμπόδισε την ενημέρωση του πόρου.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Διαφημίσεις", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Ένα φίλτρο ανά γραμμή. Φίλτρο μπορεί να είναι ένα απλό όνομα κεντρικού υπολογιστή (hostname) ή ένα, συμβατό με το Adblock Plus, φίλτρο. Γραμμές με το πρόθεμα ‘!’ θα παραβλέπονται.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Ιδιωτικό απόρρητο", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Εισαγωγή και προσάρτηση", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Τομείς κακόβουλου λογισμικού", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Εξαγωγή", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Ενοχλήσεις", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"τα-στατικά-ublock-φίλτρα-μου_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Πολλαπλών χρήσεων", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Εφαρμογή αλλαγών", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Περιοχές, γλώσσες", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Μόνιμοι κανόνες", - "description":"header" + "3pGroupCustom": { + "message": "Προσαρμοσμένη", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Προσωρινοί κανόνες", - "description":"header" + "3pExternalListsHint": { + "message": "Ένα URL ανά γραμμή. Γραμμές με το πρόθεμα ‘!’ θα παραβλέπονται. Άκυρα URL θα παρακάμπτονται σιωπηλά.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Επαναφορά", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "ξεπερασμένη", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Επικύρωση", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Τελευταία ενημέρωση: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Επεξεργασία", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Ενημέρωση...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Αποθήκευση", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Ένα σφάλμα δικτύου εμπόδισε την ενημέρωση του πόρου.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Απόρριψη", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Ένα φίλτρο ανά γραμμή. Φίλτρο μπορεί να είναι ένα απλό όνομα κεντρικού υπολογιστή (hostname) ή ένα, συμβατό με το Adblock Plus, φίλτρο. Γραμμές με το πρόθεμα ‘!’ θα παραβλέπονται.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Εισαγωγή από αρχείο...", - "description":"" + "1pImport": { + "message": "Εισαγωγή και προσάρτηση", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Εξαγωγή σε αρχείο", - "description":"" + "1pExport": { + "message": "Εξαγωγή", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"οι-δυναμικοί-ublock-κανόνες-μου_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "τα-στατικά-ublock-φίλτρα-μου_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Λίστα δυναμικών κανόνων φιλτραρίσματος.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Εφαρμογή αλλαγών", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Συντακτικό κανόνων: προέλευση προορισμός τύπος ενέργεια<\/code> (πλήρης τεκμηρίωση<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Μόνιμοι κανόνες", + "description": "header" }, - "whitelistPrompt":{ - "message":"Η λίστα σας με τα ονόματα κόμβων (host names) στα οποία το uBlock θα είναι απενεργοποιημένο. Μια καταχώρηση ανά γραμμή. Άκυρα ονόματα κόμβων θα παρακάμπτονται σιωπηλά.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Προσωρινοί κανόνες", + "description": "header" }, - "whitelistImport":{ - "message":"Εισαγωγή και προσάρτηση", - "description":"English: Import and append" + "rulesRevert": { + "message": "Επαναφορά", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Εξαγωγή", - "description":"English: Export" + "rulesCommit": { + "message": "Επικύρωση", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"λίστα-ublock-επιτρεπόμενων_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Επεξεργασία", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Εφαρμογή αλλαγών", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Αποθήκευση", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Τύπος", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Απόρριψη", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Τομέας", - "description":"English: Domain" + "rulesImport": { + "message": "Εισαγωγή από αρχείο...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Εξαγωγή σε αρχείο", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Φίλτρο", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "οι-δυναμικοί-ublock-κανόνες-μου_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Όλα", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Λίστα δυναμικών κανόνων φιλτραρίσματος.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Παρασκήνιο", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Συντακτικό κανόνων: προέλευση προορισμός τύπος ενέργεια<\/code> (πλήρης τεκμηρίωση<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"φιλτράρισμα των καταχωρήσεων", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Η λίστα σας με τα ονόματα κόμβων (host names) στα οποία το uBlock θα είναι απενεργοποιημένο. Μια καταχώρηση ανά γραμμή. Άκυρα ονόματα κόμβων θα παρακάμπτονται σιωπηλά.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Μέγιστος αριθμός καταχωρήσεων στο αρχείο καταγραφών", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Εισαγωγή και προσάρτηση", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Περιεχόμενο:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Εξαγωγή", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Τύπος:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "λίστα-ublock-επιτρεπόμενων_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Φιλτράρισμα δυναμικών συνδέσμων", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Εφαρμογή αλλαγών", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Στατικό φιλτράρισμα", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Τύπος", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} τα δικτυακά αιτήματα {{type}} {{br}} των οποίων η διεύθυνση ταιριάζει με {{url}} {{br}} και προέρχεται από {{origin}},{{br}}{{importance}} υπάρχει ένα ταιριαστό φίλτρο για εξαίρεση.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Τομέας", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Φραγή", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Αποδοχή", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Φίλτρο", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"τύπος “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Όλα", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"οποιοσδήποτε τύπος", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Παρασκήνιο", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"από “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "φιλτράρισμα των καταχωρήσεων", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"από οπουδήποτε", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Μέγιστος αριθμός καταχωρήσεων στο αρχείο καταγραφών", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"εκτός όταν", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Περιεχόμενο:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"ακόμη και αν", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Τύπος:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Στατικό φίλτρο {{filter}} βρέθηκε σε:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Φιλτράρισμα δυναμικών συνδέσμων", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Αρχείο καταγραφής αλλαγών", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Στατικό φιλτράρισμα", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} τα δικτυακά αιτήματα {{type}} {{br}} των οποίων η διεύθυνση ταιριάζει με {{url}} {{br}} και προέρχεται από {{origin}},{{br}}{{importance}} υπάρχει ένα ταιριαστό φίλτρο για εξαίρεση.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Υποστήριξη", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Φραγή", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Πηγαίος κώδικας (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Αποδοχή", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Συνεισφέροντες", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "τύπος “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Δημιουργία αντιγράφου ασφαλείας", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "οποιοσδήποτε τύπος", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"το-ublock-αντίγραφο-ασφαλείας-μου_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "από “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Επαναφορά από αρχείο...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "από οπουδήποτε", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Επαναφορά στις προεπιλεγμένες ρυθμίσεις...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "εκτός όταν", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Όλες οι ρυθμίσεις σας θα αντικατασταθούν χρησιμοποιώντας τα δεδομένα του αντιγράφου ασφαλείας που δημιουργήθηκε κατά ημ\/νία και ώρα: {{time}} και θα ακολουθήσει επανεκκίνηση του uBlock.", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "ακόμη και αν", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Τα δεδομένα ήταν αδύνατο να αναγνωστούν ή είναι άκυρα", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Στατικό φίλτρο {{filter}} βρέθηκε σε:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Όλες οι ρυθμίσεις σας θα καταργηθούν και θα γίνει επανεκκίνηση του uBlock.\n\nΕπαναφορά του uBlock στις εργοστασιακές ρυθμίσεις;", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Αρχείο καταγραφής αλλαγών", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Αδυναμία σύνδεσης με {{url}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Προσθήκη του παρακάτω URL στις προσαρμοσμένες λίστες φίλτρων σας;\n\nΤίτλος: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Υποστήριξη", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"πριν από ένα λεπτό", - "description":"English: a minute ago" + "aboutCode": { + "message": "Πηγαίος κώδικας (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"πριν από {{value}} λεπτά", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Συνεισφέροντες", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"πριν από μια ώρα", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Δημιουργία αντιγράφου ασφαλείας", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"πριν από {{value}} ώρες", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "το-ublock-αντίγραφο-ασφαλείας-μου_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"πριν από μια ημέρα", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Επαναφορά από αρχείο...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"πριν από {{value}} ημέρες", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Επαναφορά στις προεπιλεγμένες ρυθμίσεις...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Προβολή Πίνακα Εργαλείων", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Όλες οι ρυθμίσεις σας θα αντικατασταθούν χρησιμοποιώντας τα δεδομένα του αντιγράφου ασφαλείας που δημιουργήθηκε κατά ημ\/νία και ώρα: {{time}} και θα ακολουθήσει επανεκκίνηση του uBlock.", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Προβολή Αρχείου Καταγραφών Αιτημάτων Δικτύου", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Τα δεδομένα ήταν αδύνατο να αναγνωστούν ή είναι άκυρα", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"απενεργοποιημένο", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Όλες οι ρυθμίσεις σας θα καταργηθούν και θα γίνει επανεκκίνηση του uBlock.\n\nΕπαναφορά του uBlock στις εργοστασιακές ρυθμίσεις;", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"Το uBlock₀ έχει αποτρέψει τη φόρτωση της παρακάτω σελίδας:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Αδυναμία σύνδεσης με {{url}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Εξαιτίας του ακόλουθου φίλτρου", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Προσθήκη του παρακάτω URL στις προσαρμοσμένες λίστες φίλτρων σας;\n\nΤίτλος: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"χωρίς παραμέτρους", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "πριν από ένα λεπτό", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Βρέθηκε σε:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "πριν από {{value}} λεπτά", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Επιστροφή", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "πριν από μια ώρα", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Κλείσιμο του παραθύρου", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "πριν από {{value}} ώρες", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Απενεργοποιήστε αυστηρό μπλοκάρισμα για {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "πριν από μια ημέρα", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Προσωρινά", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "πριν από {{value}} ημέρες", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Μόνιμα", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Προβολή Πίνακα Εργαλείων", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Εξαγωγή στο cloud storage", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Προβολή Αρχείου Καταγραφών Αιτημάτων Δικτύου", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Εισαγωγή από cloud storage", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "απενεργοποιημένο", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Εισαγωγή αποθηκευμένων στο νέφος ρυθμίσεων και συγχώνευση στις τρέχουσες ρυθμίσεις", - "description":"tooltip" + "docblockedPrompt1": { + "message": "Το uBlock₀ έχει αποτρέψει τη φόρτωση της παρακάτω σελίδας:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Εξαιτίας του ακόλουθου φίλτρου", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Το όνομα αυτής της συσκευής:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "χωρίς παραμέτρους", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Προειδοποίηση! Αλλάξτε αυτές τις ρυθμίσεις για προχωρημένους με δική σας ευθύνη.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Βρέθηκε σε:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Υποβολή", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Επιστροφή", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Εφαρμογή αλλαγών", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Κλείσιμο του παραθύρου", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Επαναφορά", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Απενεργοποιήστε αυστηρό μπλοκάρισμα για {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Προσωρινά", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Να επιτρέπονται προσωρινά μεγάλα στοιχεία πολυμέσων", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Μόνιμα", + "description": "English: Permanently" }, - "dummy":{ - "message":"Αυτή η καταχώρηση θα πρέπει να είναι τελευταία", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Εξαγωγή στο cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Εισαγωγή από cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Εισαγωγή αποθηκευμένων στο νέφος ρυθμίσεων και συγχώνευση στις τρέχουσες ρυθμίσεις", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Το όνομα αυτής της συσκευής:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Προειδοποίηση! Αλλάξτε αυτές τις ρυθμίσεις για προχωρημένους με δική σας ευθύνη.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Υποβολή", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Εφαρμογή αλλαγών", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Επαναφορά", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Να επιτρέπονται προσωρινά μεγάλα στοιχεία πολυμέσων", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Αυτή η καταχώρηση θα πρέπει να είναι τελευταία", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index 08df70990f392..0d02224110534 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -47,6 +47,14 @@ "message":"Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page.", "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, + "popupPowerSwitchInfo1":{ + "message":"Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description":"Message to be read by screen readers" + }, + "popupPowerSwitchInfo2":{ + "message":"Click to enable uBlock₀ for this site.", + "description":"Message to be read by screen readers" + }, "popupBlockedRequestPrompt":{ "message":"requests blocked", "description":"English: requests blocked" @@ -87,18 +95,50 @@ "message":"Toggle the blocking of all popups for this site", "description":"Tooltip for the no-popups per-site switch" }, + "popupTipNoPopups1":{ + "message":"Click to block all popups on this site", + "description":"Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2":{ + "message":"Click to no longer block all popups on this site", + "description":"Tooltip for the no-popups per-site switch" + }, "popupTipNoLargeMedia":{ "message":"Toggle the blocking of large media elements for this site", "description":"Tooltip for the no-large-media per-site switch" }, + "popupTipNoLargeMedia1":{ + "message":"Click to block large media elements on this site", + "description":"Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2":{ + "message":"Click to no longer block large media elements on this site", + "description":"Tooltip for the no-large-media per-site switch" + }, "popupTipNoCosmeticFiltering":{ "message":"Toggle cosmetic filtering for this site", "description":"Tooltip for the no-cosmetic-filtering per-site switch" }, + "popupTipNoCosmeticFiltering1":{ + "message":"Click to disable cosmetic filtering on this site", + "description":"Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2":{ + "message":"Click to enable cosmetic filtering on this site", + "description":"Tooltip for the no-cosmetic-filtering per-site switch" + }, "popupTipNoRemoteFonts":{ "message":"Toggle the blocking of remote fonts for this site", "description":"Tooltip for the no-remote-fonts per-site switch" }, + "popupTipNoRemoteFonts1":{ + "message":"Click to block remote fonts on this site", + "description":"Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2":{ + "message":"Click to no longer block remote fonts on this site", + "description":"Tooltip for the no-remote-fonts per-site switch" + }, "popupTipGlobalRules":{ "message":"Global rules: this column is for rules which apply to all sites.", "description":"Tooltip when hovering the top-most cell of the global-rules column." @@ -251,6 +291,10 @@ "message":"Block remote fonts", "description": "" }, + "settingsNoCSPReportsPrompt":{ + "message":"Block CSP reports", + "description": "background information: https://github.com/gorhill/uBlock/issues/3150" + }, "settingsStorageUsed":{ "message":"Storage used: {{value}} bytes", "description":"English: Storage used: {{}} bytes" @@ -319,9 +363,9 @@ "message":"Malware domains", "description":"English: Malware domains" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pGroupAnnoyances":{ + "message":"Annoyances", + "description":"The header identifying the filter lists in the category 'annoyances'" }, "3pGroupMultipurpose":{ "message":"Multipurpose", diff --git a/src/_locales/eo/messages.json b/src/_locales/eo/messages.json index bc93a6fe1d4e2..f6ed3e96f83b1 100644 --- a/src/_locales/eo/messages.json +++ b/src/_locales/eo/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Finfine rendimenta reklamoblokilo. Afabla por ĉefprocesoro kaj memoro.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Finfine rendimenta reklamoblokilo. Afabla por ĉefprocesoro kaj memoro.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Panelo", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Panelo", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Agordoj", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Agordoj", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filtriloj de eksteraj liverantoj", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtriloj de eksteraj liverantoj", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Miaj filtriloj", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Miaj filtriloj", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Miaj reguloj", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Miaj reguloj", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Blanklisto", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Blanklisto", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Protokolilo", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Protokolilo", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Pri", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Pri", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Altgradaj agordoj", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Altgradaj agordoj", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klako: malŝalti\/ŝalti uBlock₀ por ĉi tiu retejo.\n\nStir+klako: malŝalti uBlock₀ nur en ĉi tiu paĝo.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klako: malŝalti\/ŝalti uBlock₀ por ĉi tiu retejo.\n\nStir+klako: malŝalti uBlock₀ nur en ĉi tiu paĝo.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"blokitaj petoj", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"en ĉi tiu paĝo", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} aŭ {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "blokitaj petoj", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"ekde instalado", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "en ĉi tiu paĝo", + "description": "English: on this page" }, - "popupOr":{ - "message":"aŭ", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} aŭ {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Klaku por malfermi la panelon", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "ekde instalado", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "aŭ", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Malfermi reĝimon de elementoselektilo", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Klaku por malfermi la panelon", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Malfermi la protokolilon", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Baskuligi la blokadon de ŝprucfenestroj por ĉi tiu retejo", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Malfermi reĝimon de elementoselektilo", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Baskuligi la blokadon de grandaj aŭdvideaj elementoj por ĉi tiu retejo", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Malfermi la protokolilon", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Baskuligi ornaman filtradon por ĉi tiu retejo", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Baskuligi la blokadon de ŝprucfenestroj por ĉi tiu retejo", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Baskuligi la blokadon de foraj tiparoj por ĉi tiu retejo", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Ĝeneralaj reguloj: ĉi tiu kolumno estas por reguloj, kiuj aplikas al ĉiuj retejoj.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokaj reguloj: ĉi tiu kolumno estas por reguloj, kiuj aplikas nur al la nuna retejo.\nLokaj reguloj transpasas ĝeneralajn regulojn.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Baskuligi la blokadon de grandaj aŭdvideaj elementoj por ĉi tiu retejo", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Klaku por fari viajn ŝanĝojn konstante.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Klaku por malfari viajn ŝanĝojn.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"ĉio", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Baskuligi ornaman filtradon por ĉi tiu retejo", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"bildoj", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"De eksteraj liverantoj", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/bildoj de eksteraj liverantoj", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Baskuligi la blokadon de foraj tiparoj por ĉi tiu retejo", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"entekstaj skriptoj", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Skriptoj de propraj liverantoj", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"Skriptoj de eksteraj liverantoj", - "description":"" + "popupTipGlobalRules": { + "message": "Ĝeneralaj reguloj: ĉi tiu kolumno estas por reguloj, kiuj aplikas al ĉiuj retejoj.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Kadroj de eksteraj liverantoj", - "description":"" + "popupTipLocalRules": { + "message": "Lokaj reguloj: ĉi tiu kolumno estas por reguloj, kiuj aplikas nur al la nuna retejo.\nLokaj reguloj transpasas ĝeneralajn regulojn.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"konektitaj domajnoj", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Klaku por fari viajn ŝanĝojn konstante.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Klaku por malfari viajn ŝanĝojn.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Krei", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "ĉio", + "description": "" }, - "pickerPick":{ - "message":"Elekti", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "bildoj", + "description": "" }, - "pickerQuit":{ - "message":"Forlasi", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "De eksteraj liverantoj", + "description": "" }, - "pickerPreview":{ - "message":"Antaŭrigardo", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "CSS\/bildoj de eksteraj liverantoj", + "description": "" }, - "pickerNetFilters":{ - "message":"Retaj filtriloj", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "entekstaj skriptoj", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Ornamaj filtriloj", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Skriptoj de propraj liverantoj", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klako, Stir-klako", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "Skriptoj de eksteraj liverantoj", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Bloki elementon", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Kadroj de eksteraj liverantoj", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Kaŝi lokokupilojn de blokitaj elementoj", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "konektitaj domajnoj", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Montri la nombron de la blokitaj petoj sur la bildsimbolo", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Malŝalti butonajn informojn", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Krei", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Uzi kuntekstan menuon laŭeble", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Elekti", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Afabla por kolorblinduloj", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Forlasi", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ŝalti subtenon por nelokdependa konservado", - "description":"" + "pickerPreview": { + "message": "Antaŭrigardo", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Mi estas sperta uzanto (Nepra legaĵo<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Retaj filtriloj", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"altgradaj agordoj", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Ornamaj filtriloj", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Malŝalti antaŭvenigadon (por preventi ajnan konekton de blokitaj retaj petoj)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klako, Stir-klako", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Malŝalti ekzamenadon de ligiloj", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Bloki elementon", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Preventi likado de WebRTC de lokaj IP-adresoj", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Kaŝi lokokupilojn de blokitaj elementoj", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Defaŭlta konduto", - "description":"" + "settingsIconBadgePrompt": { + "message": "Montri la nombron de la blokitaj petoj sur la bildsimbolo", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Tiuj defaŭltaj kondutoj povas esti transpasitaj por ĉiuj retejoj", - "description":"" + "settingsTooltipsPrompt": { + "message": "Malŝalti butonajn informojn", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Malŝalti ornaman filtradon", - "description":"" + "settingsContextMenuPrompt": { + "message": "Uzi kuntekstan menuon laŭeble", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloki aŭdvideajn elementojn pli granda ol {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Afabla por kolorblinduloj", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloki forajn tiparojn", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Ŝalti subtenon por nelokdependa konservado", + "description": "" }, - "settingsStorageUsed":{ - "message":"Uzata konservado: {{value}} bitokoj", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Mi estas sperta uzanto (Nepra legaĵo<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Lasta restaŭro:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "altgradaj agordoj", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Lasta savkopio:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Malŝalti antaŭvenigadon (por preventi ajnan konekton de blokitaj retaj petoj)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} retaj filtriloj kaj {{cosmeticFilterCount}} ornamaj filtriloj de:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Malŝalti ekzamenadon de ligiloj", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} estas uzita de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Preventi likado de WebRTC de lokaj IP-adresoj", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Ĝisdatigi listojn de filtriloj aŭtomate.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Defaŭlta konduto", + "description": "" }, - "3pUpdateNow":{ - "message":"Ĝisdatigi nun", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Tiuj defaŭltaj kondutoj povas esti transpasitaj por ĉiuj retejoj", + "description": "" }, - "3pPurgeAll":{ - "message":"Malplenigi ĉiujn kaŝmemorojn", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Malŝalti ornaman filtradon", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analizi kaj eltrudi ornamajn filtrilojn.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Bloki aŭdvideajn elementojn pli granda ol {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Ŝalti ĉi tiun trajton pligrandigas la memoruzadon de uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Bloki forajn tiparojn", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignori ĝeneralajn ornamajn filtrilojn", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Uzata konservado: {{value}} bitokoj", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Lasta restaŭro:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Apliki ŝanĝojn", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Lasta savkopio:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklamoj", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} retaj filtriloj kaj {{cosmeticFilterCount}} ornamaj filtriloj de:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privateco", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} estas uzita de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domajno kun fiprogramaro", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Ĝisdatigi listojn de filtriloj aŭtomate.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Interkona retejo", - "description":"English: Social" + "3pUpdateNow": { + "message": "Ĝisdatigi nun", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Plurcela", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Malplenigi ĉiujn kaŝmemorojn", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regionoj, lingvoj", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analizi kaj eltrudi ornamajn filtrilojn.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Tajlorita", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Ŝalti ĉi tiun trajton pligrandigas la memoruzadon de uBlock₀.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Unu regulo por ĉiu linio. Prefiksitaj linioj kun ‘!’ estos ignorataj. Nevalidaj ligiloj estos ignorataj silente.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignori ĝeneralajn ornamajn filtrilojn", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"malaktuala", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Lasta ĝisdatigo: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Updating...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Apliki ŝanĝojn", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"A network error prevented the resource from being updated.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklamoj", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Unu filtrilo por ĉiu linio. Filtrilo povas esti ordinara gastignomo aŭ Adblock Plus-kongrua filtrilo. Prefiksitaj linioj kun ‘!’ estos ignorataj.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privateco", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importi kaj postaldoni", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domajno kun fiprogramaro", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Eksporti", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"miaj-statikaj-ublock-filtriloj_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Plurcela", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Apliki ŝanĝojn", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regionoj, lingvoj", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Daŭraj reguloj", - "description":"header" + "3pGroupCustom": { + "message": "Tajlorita", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Nedaŭraj reguloj", - "description":"header" + "3pExternalListsHint": { + "message": "Unu regulo por ĉiu linio. Prefiksitaj linioj kun ‘!’ estos ignorataj. Nevalidaj ligiloj estos ignorataj silente.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Malfari", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "malaktuala", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Apliki", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Lasta ĝisdatigo: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Redakti", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Updating...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Konservi", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Nuligi", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Unu filtrilo por ĉiu linio. Filtrilo povas esti ordinara gastignomo aŭ Adblock Plus-kongrua filtrilo. Prefiksitaj linioj kun ‘!’ estos ignorataj.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importi el dosiero...", - "description":"" + "1pImport": { + "message": "Importi kaj postaldoni", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Eksporti al dosiero", - "description":"" + "1pExport": { + "message": "Eksporti", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"miaj-dinamikaj-ublock-reguloj_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "miaj-statikaj-ublock-filtriloj_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Listo de viaj dinamikaj filtradaj reguloj.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Apliki ŝanĝojn", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Sintakso de reguloj: fonto celo tipo ago<\/code> (kompleta dokumentado<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Daŭraj reguloj", + "description": "header" }, - "whitelistPrompt":{ - "message":"Via listo de gastignomoj por kiuj uBlock₀ estos malŝaltata. Unu gastignomo por ĉiu linio. Nevalidaj gastignomoj estos ignorataj silente.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Nedaŭraj reguloj", + "description": "header" }, - "whitelistImport":{ - "message":"Importi kaj postaldoni", - "description":"English: Import and append" + "rulesRevert": { + "message": "Malfari", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Eksporti", - "description":"English: Export" + "rulesCommit": { + "message": "Apliki", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"mia-ublock-blanklisto_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Redakti", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Apliki ŝanĝojn", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Konservi", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Nuligi", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domajno", - "description":"English: Domain" + "rulesImport": { + "message": "Importi el dosiero...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"Ligilo", - "description":"English: URL" + "rulesExport": { + "message": "Eksporti al dosiero", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtrilo", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "miaj-dinamikaj-ublock-reguloj_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Ĉio", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Listo de viaj dinamikaj filtradaj reguloj.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Fonaj petoj", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Sintakso de reguloj: fonto celo tipo ago<\/code> (kompleta dokumentado<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtri protokolerojn", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Via listo de gastignomoj por kiuj uBlock₀ estos malŝaltata. Unu gastignomo por ĉiu linio. Nevalidaj gastignomoj estos ignorataj silente.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maksimuma nombro de protokoleroj", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importi kaj postaldoni", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kunteksto:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Eksporti", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "mia-ublock-blanklisto_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dinamika filtrado de ligiloj", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Apliki ŝanĝojn", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statika filtrado", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} retaj petoj de {{type}} {{br}}kiu ligilo estas la sama kiel {{url}} {{br}}kaj kiu devenas el {{origin}},{{br}}{{importance}} estas kongrua escepta filtrilo.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domajno", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloki", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "Ligilo", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permesi", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtrilo", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Ĉio", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"ajna tipo", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Fonaj petoj", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"de “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtri protokolerojn", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"de ie ajn", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maksimuma nombro de protokoleroj", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"krom se", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kunteksto:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"eĉ se", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statika filtrilo {{filter}} estas trovita en:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dinamika filtrado de ligiloj", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Ŝanĝoprotokolo", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statika filtrado", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Vikio", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} retaj petoj de {{type}} {{br}}kiu ligilo estas la sama kiel {{url}} {{br}}kaj kiu devenas el {{origin}},{{br}}{{importance}} estas kongrua escepta filtrilo.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Helpo", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloki", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Fontkodo (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Permesi", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Kontribuantoj", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tipo “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Savkopii al dosiero", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "ajna tipo", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"mia-ublock-savkopio_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "de “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Restaŭri el dosiero...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "de ie ajn", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Rekomencigi al defaŭltaj agordoj...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "krom se", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Ĉiuj viaj agordoj estos anstataŭigitaj per via savkopio kreita je {{time}} kaj uBlock₀ restartigos.\n\nĈu vi volas anstataŭigi ĉiujn de viaj ekzistantaj agordoj uzita la savkopio?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "eĉ se", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"La datumoj ne legeblas aŭ ĝi estas nevalida", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statika filtrilo {{filter}} estas trovita en:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Ĉiuj viaj agordoj estos forigita kaj uBlock₀ restartigos.\n\nĈu vi volas reagordi uBlock₀ al la defaŭltaj agordoj?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Ŝanĝoprotokolo", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"{{url}} ne konekteblas", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Vikio", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Ĉu vi volas aldoni la sekvan ligilon al viaj tajloritaj listoj de filtriloj?\n\nTitolo: \"{{title}}\"\nLigilo: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Helpo", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"antaŭ 1 minuto", - "description":"English: a minute ago" + "aboutCode": { + "message": "Fontkodo (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"antaŭ {{value}} minutoj", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Kontribuantoj", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"antaŭ 1 horo", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Savkopii al dosiero", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"antaŭ {{value}} horoj", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "mia-ublock-savkopio_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"antaŭ 1 tago", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Restaŭri el dosiero...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"antaŭ {{value}} tagoj", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Rekomencigi al defaŭltaj agordoj...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Montri panelon", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Ĉiuj viaj agordoj estos anstataŭigitaj per via savkopio kreita je {{time}} kaj uBlock₀ restartigos.\n\nĈu vi volas anstataŭigi ĉiujn de viaj ekzistantaj agordoj uzita la savkopio?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Montri protokolilon", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "La datumoj ne legeblas aŭ ĝi estas nevalida", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"ne aktiva", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Ĉiuj viaj agordoj estos forigita kaj uBlock₀ restartigos.\n\nĈu vi volas reagordi uBlock₀ al la defaŭltaj agordoj?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ preventis la ŝarĝadon de la sekva paĝo:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "{{url}} ne konekteblas", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Pro la sekva filtrilo", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Ĉu vi volas aldoni la sekvan ligilon al viaj tajloritaj listoj de filtriloj?\n\nTitolo: \"{{title}}\"\nLigilo: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"sen parametroj", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "antaŭ 1 minuto", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Trovita en:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "antaŭ {{value}} minutoj", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Reen", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "antaŭ 1 horo", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Fermi ĉi tiun fenestron", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "antaŭ {{value}} horoj", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Malŝalti striktan blokadon por {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "antaŭ 1 tago", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Nedaŭra", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "antaŭ {{value}} tagoj", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Daŭra", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Montri panelon", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Eksporti al nuba konservado", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Montri protokolilon", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importi el nuba konservado", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "ne aktiva", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importi el nuba konservado kaj kunfandi kun nunaj agordoj", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ preventis la ŝarĝadon de la sekva paĝo:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Pro la sekva filtrilo", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Nomo de ĉi tiu aparato:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "sen parametroj", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warning! Change these advanced settings at your own risk.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Trovita en:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Sendi", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Reen", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Apliki ŝanĝojn", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Fermi ĉi tiun fenestron", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Malfari", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Malŝalti striktan blokadon por {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bitokoj", - "description":"" + "docblockedDisableTemporary": { + "message": "Nedaŭra", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permesi grandajn aŭdvideajn elementojn nedaŭre", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Daŭra", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Eksporti al nuba konservado", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importi el nuba konservado", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importi el nuba konservado kaj kunfandi kun nunaj agordoj", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nomo de ĉi tiu aparato:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Sendi", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apliki ŝanĝojn", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Malfari", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bitokoj", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permesi grandajn aŭdvideajn elementojn nedaŭre", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/es/messages.json b/src/_locales/es/messages.json index 20d4f305e3f7d..cb47c4b825dfe 100644 --- a/src/_locales/es/messages.json +++ b/src/_locales/es/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Por fin, un bloqueador eficiente con uso mínimo de procesador y memoria.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Por fin, un bloqueador eficiente con uso mínimo de procesador y memoria.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Panel de control", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Panel de control", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Configuración", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Configuración", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filtros de terceros", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtros de terceros", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Mis filtros", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Mis filtros", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Mis reglas", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mis reglas", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista blanca", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Lista blanca", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Registro de peticiones de red", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Registro de peticiones de red", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Acerca de", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Acerca de", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Ajustes avanzados", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Ajustes avanzados", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Clic: desactivar\/activar uBlock₀ para este sitio.\n\nCtrl + clic: deshabilitar uBlock₀ sólo en esta página.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Clic: desactivar\/activar uBlock₀ para este sitio.\n\nCtrl + clic: deshabilitar uBlock₀ sólo en esta página.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"peticiones bloqueadas", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Clic para deshabilitar uBlock₀ en este sitio. \n\nCtrl+clic para deshabilitar uBlock₀ solo en esta página.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"en esta página", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Clic para habilitar uBlock₀ en este sitio.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} o {{percent}} %", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "peticiones bloqueadas", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"desde que se instaló", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "en esta página", + "description": "English: on this page" }, - "popupOr":{ - "message":"o", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} o {{percent}} %", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Clic para abrir el panel de control", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "desde que se instaló", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Activar el modo eliminación de elementos", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "o", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Activar el modo de selección de elementos", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Abrir Panel de control", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Ir al registro de peticiones", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Activar el modo eliminación de elementos", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Alternar bloqueo de todos los pop-ups para este sitio", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Activar el modo de selección de elementos", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Alternar bloqueo de elementos multimedia grandes para este sitio", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Ir al registro de peticiones", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Alternar filtros cosméticos para este sitio", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Alternar bloqueo de todos los pop-ups para este sitio", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Alternar bloqueo de fuentes remotas para este sitio", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Clic para bloquear todas las ventanas emergentes en este sitio", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Reglas globales: las reglas en esta columna se aplican a todos los sitios.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Clic para no bloquear más todas las ventanas emergentes en este sitio", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Reglas locales: las reglas en esta columna aplican solo al sitio actual.\nLas reglas locales anulan las reglas globales.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Alternar bloqueo de elementos multimedia grandes para este sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Haga clic para hacer sus cambios permanentes.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Clic para bloquear elementos multimedia grandes en este sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Haga clic para revertir sus cambios.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Clic para no bloquear más elementos multimedia grandes en este sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"todo", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Alternar filtros cosméticos para este sitio", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"Imágenes", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Clic para deshabilitar el filtrado cosmético en este sitio", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"De terceros", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Clic para habilitar el filtrado cosmético en este sitio", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/imágenes de terceros", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Alternar bloqueo de fuentes remotas para este sitio", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"Scripts embebidos", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Clic para bloquear fuentes remotas en este sitio", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Scripts del dominio", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Clic para no bloquear más fuentes remotas en este sitio", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"Scripts de terceros", - "description":"" + "popupTipGlobalRules": { + "message": "Reglas globales: las reglas en esta columna se aplican a todos los sitios.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Frames de terceros", - "description":"" + "popupTipLocalRules": { + "message": "Reglas locales: las reglas en esta columna aplican solo al sitio actual.\nLas reglas locales anulan las reglas globales.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"dominios conectados", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Haga clic para hacer sus cambios permanentes.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Haga clic para revertir sus cambios.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Crear", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "todo", + "description": "" }, - "pickerPick":{ - "message":"Elegir", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "Imágenes", + "description": "" }, - "pickerQuit":{ - "message":"Salir", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "De terceros", + "description": "" }, - "pickerPreview":{ - "message":"Vista previa", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css\/imágenes de terceros", + "description": "" }, - "pickerNetFilters":{ - "message":"Filtros de red", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "Scripts embebidos", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Filtros cosméticos", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Scripts del dominio", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Clic, Ctrl-clic", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "Scripts de terceros", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Bloquear elemento", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Frames de terceros", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ocultar marcadores de posición de los elementos bloqueados", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "dominios conectados", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Mostrar el número de peticiones bloqueadas en el icono", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Deshabilitar las descripciones emergentes", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Crear", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Hacer uso del menú contextual cuando sea posible", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Elegir", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Accesible para daltónicos", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Salir", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Habilitar almacenamiento en la nube", - "description":"" + "pickerPreview": { + "message": "Vista previa", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Soy usuario avanzado ( Lectura Obligatoria - Inglés<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Filtros de red", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"ajustes avanzados", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Filtros cosméticos", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Deshabilitar pre-carga de sitios (previene cualquier conexión para peticiones de red bloqueadas)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Clic, Ctrl-clic", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Deshabilitar auditoría de hipervínculos", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Bloquear elemento", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Impedir que WebRTC divulgue la dirección IP local", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Ocultar marcadores de posición de los elementos bloqueados", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Comportamiento predeterminado", - "description":"" + "settingsIconBadgePrompt": { + "message": "Mostrar el número de peticiones bloqueadas en el icono", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Es posible anular el comportamiento predeterminado para cada sitio", - "description":"" + "settingsTooltipsPrompt": { + "message": "Deshabilitar las descripciones emergentes", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Deshabilitar filtros cosméticos", - "description":"" + "settingsContextMenuPrompt": { + "message": "Hacer uso del menú contextual cuando sea posible", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloquear elementos multimedia mayores que {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Accesible para daltónicos", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloquear fuentes remotas", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Habilitar almacenamiento en la nube", + "description": "" }, - "settingsStorageUsed":{ - "message":"Almacenamiento usado: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Soy usuario avanzado ( Lectura Obligatoria - Inglés<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Última restauración:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "ajustes avanzados", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Último respaldo:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Deshabilitar pre-carga de sitios (previene cualquier conexión para peticiones de red bloqueadas)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtros de red y {{cosmeticFilterCount}} filtros cosméticos de:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Deshabilitar auditoría de hipervínculos", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} de {{total}} utilizados", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Impedir que WebRTC divulgue la dirección IP local", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Actualizar automáticamente la lista de filtros.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Comportamiento predeterminado", + "description": "" }, - "3pUpdateNow":{ - "message":"Actualizar ahora", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Es posible anular el comportamiento predeterminado para cada sitio", + "description": "" }, - "3pPurgeAll":{ - "message":"Vaciar todas las memorias caché", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Deshabilitar filtros cosméticos", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analizar y aplicar filtros cosméticos.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Bloquear elementos multimedia mayores que {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Habilitar esta opción aumenta el consumo de memoria de uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Bloquear fuentes remotas", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorar los filtros cosméticos genéricos", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Bloquear reportes CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Se recomienda habilitar esta opción para dispositivos poco potentes.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Almacenamiento usado: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista de servidores bloqueados", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Última restauración:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Aplicar cambios", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Último respaldo:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Anuncios", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtros de red y {{cosmeticFilterCount}} filtros cosméticos de:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privacidad", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} de {{total}} utilizados", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Dominios de malware", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Actualizar automáticamente la lista de filtros.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pUpdateNow": { + "message": "Actualizar ahora", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Multiusos", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Vaciar todas las memorias caché", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regiones, idiomas", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analizar y aplicar filtros cosméticos.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Personalizada", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Habilitar esta opción aumenta el consumo de memoria de uBlock₀<\/i>.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Una URL por línea. Las líneas que empiezan con ‘!’ serán ignoradas. Se omitirán las URL no válidas.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorar los filtros cosméticos genéricos", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Desactualizado.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Se recomienda habilitar esta opción para dispositivos poco potentes.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Última actualización: {{ago}}.\nHaz clic para actualizar ahora.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lista de servidores bloqueados", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Actualizando...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Aplicar cambios", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Un error de red impide que se actualicen los recursos.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Anuncios", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Un filtro por línea. Los filtros pueden ser un nombre de servidor, o un filtro compatible con Adblock Plus. Las líneas que comiencen con ‘!’ serán ignoradas.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privacidad", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importar y anexar", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Dominios de malware", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exportar", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Elementos molestos", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-mis-filtros-estaticos_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Multiusos", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Aplicar cambios", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regiones, idiomas", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Reglas permanentes", - "description":"header" + "3pGroupCustom": { + "message": "Personalizada", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Reglas temporales", - "description":"header" + "3pExternalListsHint": { + "message": "Una URL por línea. Las líneas que empiezan con ‘!’ serán ignoradas. Se omitirán las URL no válidas.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Revertir", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Desactualizado.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Establecer", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Última actualización: {{ago}}.\nHaz clic para actualizar ahora.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Editar", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Actualizando...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Guardar", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Un error de red impide que se actualicen los recursos.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Descartar", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Un filtro por línea. Los filtros pueden ser un nombre de servidor, o un filtro compatible con Adblock Plus. Las líneas que comiencen con ‘!’ serán ignoradas.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importar desde archivo...", - "description":"" + "1pImport": { + "message": "Importar y anexar", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exportar a archivo", - "description":"" + "1pExport": { + "message": "Exportar", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"ublock-mis-reglas-dinamicas_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-mis-filtros-estaticos_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Listado de sus reglas de filtrado dinámico.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Aplicar cambios", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Sintaxis de las reglas: origen destino tipo acción<\/code> ( documentación completa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Reglas permanentes", + "description": "header" }, - "whitelistPrompt":{ - "message":"Lista de servidores para los cuales se deshabilitará uBlock₀. Una entrada por línea. Se omitirán nombres de servidores inválidos.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Reglas temporales", + "description": "header" }, - "whitelistImport":{ - "message":"Importar y anexar", - "description":"English: Import and append" + "rulesRevert": { + "message": "Revertir", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exportar", - "description":"English: Export" + "rulesCommit": { + "message": "Establecer", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"ublock-mi-lista-de-permitidos_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Editar", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Aplicar cambios", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Guardar", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Descartar", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Dominio", - "description":"English: Domain" + "rulesImport": { + "message": "Importar desde archivo...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Exportar a archivo", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtro", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "ublock-mis-reglas-dinamicas_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Todas", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Listado de sus reglas de filtrado dinámico.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Peticiones ocultas", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Sintaxis de las reglas: origen destino tipo acción<\/code> ( documentación completa<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtrar entradas del registro", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Lista de servidores para los cuales se deshabilitará uBlock₀. Una entrada por línea. Se omitirán nombres de servidores inválidos.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Cantidad máxima de entradas del registro", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importar y anexar", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Contexto:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exportar", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "ublock-mi-lista-de-permitidos_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Filtrado dinámico de URL", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Aplicar cambios", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrado estático", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} peticiones de red tipo {{type}} {{br}}cuya dirección URL contenga {{url}} {{br}}y que se originen desde {{origin}},{{br}}{{importance}} exista una regla de excepción aplicable.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Dominio", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloquear", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permitir", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtro", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Todas", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"cualquier tipo", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Peticiones ocultas", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"desde “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtrar entradas del registro", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"desde cualquier lugar", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Cantidad máxima de entradas del registro", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"excepto cuando", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Contexto:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"incluso cuando", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtro estático {{filter}} encontrado en:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Filtrado dinámico de URL", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Registro de cambios", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Filtrado estático", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} peticiones de red tipo {{type}} {{br}}cuya dirección URL contenga {{url}} {{br}}y que se originen desde {{origin}},{{br}}{{importance}} exista una regla de excepción aplicable.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Soporte", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloquear", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Código fuente (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Permitir", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Colaboradores", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tipo “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Respaldar en archivo...", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "cualquier tipo", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-respaldo_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "desde “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Restaurar desde archivo...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "desde cualquier lugar", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Restablecer ajustes predeterminados...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "excepto cuando", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Toda la configuración se sobrescribirá utilizando datos respaldados en {{time}} y uBlock₀ se reiniciará. \n\n¿Sobrescribir toda la configuración existente utilizando datos de la copia de seguridad?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "incluso cuando", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Los datos no se pueden leer o son inválidos", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Filtro estático {{filter}} encontrado en:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Se borrará toda la configuración y uBlock₀ se reiniciará.\n\n¿Restaurar uBlock₀ a la configuración por defecto?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Registro de cambios", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Error de red: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: ¿Desea añadir la siguiente dirección a su lista de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Soporte", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"hace un minuto", - "description":"English: a minute ago" + "aboutCode": { + "message": "Código fuente (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"hace {{value}} minutos", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Colaboradores", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"hace 1 hora", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Respaldar en archivo...", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"hace {{value}} horas", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-respaldo_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"hace un día", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Restaurar desde archivo...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"hace {{value}} días", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Restablecer ajustes predeterminados...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Mostrar Panel de Control", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Toda la configuración se sobrescribirá utilizando datos respaldados en {{time}} y uBlock₀ se reiniciará. \n\n¿Sobrescribir toda la configuración existente utilizando datos de la copia de seguridad?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Mostrar Registro", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Los datos no se pueden leer o son inválidos", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"desactivado", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Se borrará toda la configuración y uBlock₀ se reiniciará.\n\n¿Restaurar uBlock₀ a la configuración por defecto?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin impidió la carga de la página:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Error de red: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Como resultado del siguiente filtro:", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: ¿Desea añadir la siguiente dirección a su lista de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"sin parámetros", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "hace un minuto", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Encontrado en:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "hace {{value}} minutos", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Regresar", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "hace 1 hora", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Cerrar esta ventana", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "hace {{value}} horas", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Deshabilitar bloqueo estricto para {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "hace un día", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporalmente", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "hace {{value}} días", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanentemente", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Mostrar Panel de control", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exportar datos a la nube", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Mostrar registro", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importar datos de la nube", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "desactivado", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importar desde la nube y anexar a la configuración actual", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin impidió la carga de la página:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Como resultado del siguiente filtro:", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Nombre de este dispositivo:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "sin parámetros", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"¡Alerta! Cambie estos ajustes avanzados bajo su propio riesgo.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Encontrado en:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Enviar", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Regresar", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Aplicar cambios", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Cerrar esta ventana", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Revertir", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Deshabilitar bloqueo estricto para {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporalmente", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permitir temporalmente elementos multimedia grandes", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanentemente", + "description": "English: Permanently" }, - "dummy":{ - "message":"Esta entrada debe ser la última", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exportar datos a la nube", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importar datos de la nube", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importar desde la nube y anexar a la configuración actual", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nombre de este dispositivo:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "¡Alerta! Cambie estos ajustes avanzados bajo su propio riesgo.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Enviar", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplicar cambios", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Revertir", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permitir temporalmente elementos multimedia grandes", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Esta entrada debe ser la última", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/et/messages.json b/src/_locales/et/messages.json index ae327f4ba3208..9de2b2462ebb8 100644 --- a/src/_locales/et/messages.json +++ b/src/_locales/et/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Lõpuks on valminud tõhus blokeerija. Protsessori- ja mälusõbralik.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Lõpuks on valminud tõhus blokeerija. Protsessori- ja mälusõbralik.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Töölaud", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Töölaud", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Seaded", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Seaded", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Kolmanda osapoole filtrid", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Kolmanda osapoole filtrid", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Minu filtrid", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Minu filtrid", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Minu reeglid", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Minu reeglid", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Valge loend", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Valge loend", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Võrgutaotluste logi", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Võrgutaotluste logi", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Teave", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Teave", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Täpsemad seaded", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Täpsemad seaded", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klõps: keela\/luba uBlock₀ sellel saidil.\n\nCtrl+klõps: keela uBlock₀ ainult sellel lehel.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klõps: keela\/luba uBlock₀ sellel saidil.\n\nCtrl+klõps: keela uBlock₀ ainult sellel lehel.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"blokeeritud taotlusi", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Klõpsa, et keelata uBlock₀ sellel saidil.\n\nCtrl+klõps, et keelata uBlock₀ ainult sellel lehel.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"sellel lehel", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Klõpsa, et lubada uBlock₀ sellel saidil.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} või {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "blokeeritud taotlusi", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"paigaldamise algusest", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "sellel lehel", + "description": "English: on this page" }, - "popupOr":{ - "message":"või", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} või {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Klõpsa, et avada töölaud", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "paigaldamise algusest", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Sisene elemendi hävitusrežiimi", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "või", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Sisene elemendi valikuolekusse", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Ava töölaud", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Avage logija", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Sisene elemendi hävitusrežiimi", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Keela hüpikaknad sellel saidil", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Sisene elemendi valikuolekusse", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Lülita mahukate meediaelementide blokeerimine siin saidil sisse\/välja", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Avage logija", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Keela ilufiltrid sellel saidil", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Keela hüpikaknad sellel saidil", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Luba väliste fontide blokeerimine sellel saidil", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Klõpsa, et keelata kõik hüpikaknad sellel saidil", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Üldised reeglid: selle veeru reeglid kehtivad kõikidele saitidele.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Klõpsa, et lubada kõik hüpikaknad sellel saidil", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Kohalikud reeglid: selle veeru reeglid kehtivad ainult praegusele saidile.\nKohalikud reeglid kirjutavad üldised reeglid üle.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Lülita mahukate meediaelementide blokeerimine siin saidil sisse\/välja", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Vajuta, et teha oma muudatused püsivaks.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Klõpsa, et keelata mahukad meediaelemendid sellel saidil", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Vajuta, et võtta muudatused tagasi.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Klõpsa, et lubada mahukad meediaelemendid sellel saidil", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"kõik", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Keela ilufiltrid sellel saidil", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"pildid", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Klõpsa, et keelata ilufiltrid sellel saidil", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"3. osapool", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Klõpsa, et lubada ilufiltrid sellel saidil", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"3. osapoole CSS\/pildid", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Luba väliste fontide blokeerimine sellel saidil", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"tekstisisesed skriptid", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Klõpsa, et keelata välisfondid selle saidil", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"1. osapoole skriptid", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Klõpsa, et lubada välisfondid selle saidil", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"3. osapoole skriptid", - "description":"" + "popupTipGlobalRules": { + "message": "Üldised reeglid: selle veeru reeglid kehtivad kõikidele saitidele.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"3. osapoole raamid", - "description":"" + "popupTipLocalRules": { + "message": "Kohalikud reeglid: selle veeru reeglid kehtivad ainult praegusele saidile.\nKohalikud reeglid kirjutavad üldised reeglid üle.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domeene ühendatud", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Vajuta, et teha oma muudatused püsivaks.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}}\/{{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Vajuta, et võtta muudatused tagasi.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Loo", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "kõik", + "description": "" }, - "pickerPick":{ - "message":"Vali", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "pildid", + "description": "" }, - "pickerQuit":{ - "message":"Välju", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "3. osapool", + "description": "" }, - "pickerPreview":{ - "message":"Eelvaade", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "3. osapoole CSS\/pildid", + "description": "" }, - "pickerNetFilters":{ - "message":"Võrgufiltrid", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "tekstisisesed skriptid", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Ilufiltrid", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "1. osapoole skriptid", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klõps, Ctrl-klõps", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "3. osapoole skriptid", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blokeeri element", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "3. osapoole raamid", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Peida blokeeritud elementide asukohad", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domeene ühendatud", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Kuva ikoonil blokeeritud elementide arv", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}}\/{{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Keela näpunäited", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Loo", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Kasuta sobivusel kontekstmenüüd", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Vali", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Värvipimeduse-sõbralik", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Välju", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Luba pilves hoiustamise tugi", - "description":"" + "pickerPreview": { + "message": "Eelvaade", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Olen kogenud kasutaja (Vajalik lugemus<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Võrgufiltrid", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"täpsemad seaded", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Ilufiltrid", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Keela eellaadimine (et vältida ühendusi blokeeritud võrgutaotlustele)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klõps, Ctrl-klõps", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Keela hüperlingi auditeerimine", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blokeeri element", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Tõkesta WebRTC'l kohalike IP-aadresside lekitamist", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Peida blokeeritud elementide asukohad", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Vaikeväärtused", - "description":"" + "settingsIconBadgePrompt": { + "message": "Kuva ikoonil blokeeritud elementide arv", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Neid vaikeväärtusi saab saitide põhiselt eraldi määrata", - "description":"" + "settingsTooltipsPrompt": { + "message": "Keela näpunäited", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Keela ilufiltrid", - "description":"" + "settingsContextMenuPrompt": { + "message": "Kasuta sobivusel kontekstmenüüd", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokeeri meediaelemendid, mis on suuremad kui {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Värvipimeduse-sõbralik", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Keela välised fondid", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Luba pilves hoiustamise tugi", + "description": "" }, - "settingsStorageUsed":{ - "message":"Mahtu kasutatud: {{value}} baiti", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Olen kogenud kasutaja (Vajalik lugemus<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Viimane taastus:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "täpsemad seaded", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Viimane varundus:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Keela eellaadimine (et vältida ühendusi blokeeritud võrgutaotlustele)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} võrgufiltrit + {{cosmeticFilterCount}} ilufiltrit:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Keela hüperlingi auditeerimine", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"kasutusel {{used}}\/{{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Tõkesta WebRTC'l kohalike IP-aadresside lekitamist", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Uuenda filtrite loendeid automaatselt.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Vaikeväärtused", + "description": "" }, - "3pUpdateNow":{ - "message":"Uuenda kohe", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Neid vaikeväärtusi saab saitide põhiselt eraldi määrata", + "description": "" }, - "3pPurgeAll":{ - "message":"Tühjenda kõik vahemälud", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Keela ilufiltrid", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Tuvasta ja rakenda ilufiltrid.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blokeeri meediaelemendid, mis on suuremad kui {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Selle valiku lubamine suurendab uBlock₀<\/i>'i mälu kasutavust.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Keela välised fondid", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Eira üldiseid ilufiltreid.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Keela lehe turvareeglite (CSP-de) aruanded", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Selle valiku lubamine on soovitatav vähem võimekates seadmetes.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Mahtu kasutatud: {{value}} baiti", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Blokeeritud domeenide loendid", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Viimane taastus:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Kinnita muudatused", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Viimane varundus:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklaamid", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} võrgufiltrit + {{cosmeticFilterCount}} ilufiltrit:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privaatsus", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "kasutusel {{used}}\/{{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Pahavara domeenid", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Uuenda filtrite loendeid automaatselt.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Sotsiaalsed", - "description":"English: Social" + "3pUpdateNow": { + "message": "Uuenda kohe", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Mitmeotstarbelised", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Tühjenda kõik vahemälud", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regioonid, keeled", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Tuvasta ja rakenda ilufiltrid.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Kohandatud", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Selle valiku lubamine suurendab uBlock₀<\/i>'i mälu kasutavust.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Üks URL rea kohta, märgiga ‘!’ algavaid ridu eiratakse. Vigased URLid jäetakse vahele.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Eira üldiseid ilufiltreid.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"vananenud", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Selle valiku lubamine on soovitatav vähem võimekates seadmetes.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Viimane uuendus: {{ago}}.\nUuendamiseks vajutage.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Blokeeritud domeenide loendid", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Uuendamine...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Kinnita muudatused", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Ressursi uuendamist takistas võrgu viga.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklaamid", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Üks filter rea kohta, filtriks võib olla tavaline domeenilist või Adblock Plusiga-ühilduv filter. Märgiga ‘!’ algavaid ridu eiratakse.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privaatsus", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Impordi ja lisa", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Pahavara domeenid", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Ekspordi", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Tüütused", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"minu-ublocki-staatilised-filtrid_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Mitmeotstarbelised", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Kinnita muudatused", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regioonid, keeled", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Igavesed reeglid", - "description":"header" + "3pGroupCustom": { + "message": "Kohandatud", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Ajutised reeglid", - "description":"header" + "3pExternalListsHint": { + "message": "Üks URL rea kohta, märgiga ‘!’ algavaid ridu eiratakse. Vigased URLid jäetakse vahele.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Ennista", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "vananenud", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Rakenda", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Viimane uuendus: {{ago}}.\nUuendamiseks vajutage.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Muuda", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Uuendamine...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Salvesta", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Ressursi uuendamist takistas võrgu viga.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Tühista", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Üks filter rea kohta, filtriks võib olla tavaline domeenilist või Adblock Plusiga-ühilduv filter. Märgiga ‘!’ algavaid ridu eiratakse.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Impordi failist...", - "description":"" + "1pImport": { + "message": "Impordi ja lisa", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Ekspordi faili", - "description":"" + "1pExport": { + "message": "Ekspordi", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"minu-ublocki-dünaamilised-reeglid_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "minu-ublocki-staatilised-filtrid_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Sinu dünaamiliste filtrite reeglide nimekiri.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Kinnita muudatused", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Reegli süntaks: allikas sihtkoht tüüp tegevus<\/code> (kogu dokumentatsioon<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Igavesed reeglid", + "description": "header" }, - "whitelistPrompt":{ - "message":"Valge nimekirja direktiivid määravad, millistel veebilehtedel peaks uBlock Origin keelatud olema. Üks domeen rea kohta. Sobimatuid direktiive vaikselt ignoreeritakse ja kommenteeritakse välja.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Ajutised reeglid", + "description": "header" }, - "whitelistImport":{ - "message":"Impordi ja lisa", - "description":"English: Import and append" + "rulesRevert": { + "message": "Ennista", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Ekspordi", - "description":"English: Export" + "rulesCommit": { + "message": "Rakenda", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"minu-ublocki-valge-loend_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Muuda", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Kinnita muudatused", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Salvesta", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tüüp", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Tühista", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domeen", - "description":"English: Domain" + "rulesImport": { + "message": "Impordi failist...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Ekspordi faili", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "minu-ublocki-dünaamilised-reeglid_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Kõik", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Sinu dünaamiliste filtrite reeglide nimekiri.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Telgitagus", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Reegli süntaks: allikas sihtkoht tüüp tegevus<\/code> (kogu dokumentatsioon<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtreeri logikirjeid", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Valge nimekirja direktiivid määravad, millistel veebilehtedel peaks uBlock Origin keelatud olema. Üks domeen rea kohta. Sobimatuid direktiive vaikselt ignoreeritakse ja kommenteeritakse välja.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maksimaalne logikirjete arv", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Impordi ja lisa", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Ekspordi", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tüüp:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "minu-ublocki-valge-loend_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dünaamiline URL'i filter", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Kinnita muudatused", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Staatiline filtreerimine", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tüüp", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} võrgupäringud {{type}} {{br}}mille URL-aadress vastab väärtusele {{url}} {{br}}ja mis pärineb {{origin}},{{br}}{{importance}} on olemas vastav erandfilter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domeen", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokeeri", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Luba", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tüübiga “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Kõik", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"mistahes tüübiga", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Telgitagus", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"domeenilt “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtreeri logikirjeid", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"mistahes domeenilt", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maksimaalne logikirjete arv", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"välja arvatud, kui", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"isegi, kui", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tüüp:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Staatiline filter {{filter}} asub:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dünaamiline URL'i filter", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Muudatuste logi", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Staatiline filtreerimine", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Viki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} võrgupäringud {{type}} {{br}}mille URL-aadress vastab väärtusele {{url}} {{br}}ja mis pärineb {{origin}},{{br}}{{importance}} on olemas vastav erandfilter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Tugi", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokeeri", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Lähtekood (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Luba", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Toetajad", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tüübiga “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Varunda faili", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "mistahes tüübiga", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"minu-ublocki-varundus_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "domeenilt “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Taasta failist...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "mistahes domeenilt", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Taasta vaikeseadetele...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "välja arvatud, kui", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Kõik seaded kirjutatakse üle, kasutades varundust kuupäevast {{time}} ning uBlock₀ taaskäivitatakse.\n\nKirjutan üle kõik praegused seaded varundusandmetega?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "isegi, kui", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Andmeid ei suudetud lugeda või on vigased", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Staatiline filter {{filter}} asub:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Kõik seaded kustutatakse ning uBlock₀ taaskäivitatakse.\n\nTaastan uBlock₀'i algseadetele?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Muudatuste logi", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Võrgu viga: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Viki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Lisan järgneva URLi sinu kohandatud filtrite nimekirja?\n\nPealkiri: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Tugi", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"minuti eest", - "description":"English: a minute ago" + "aboutCode": { + "message": "Lähtekood (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuti eest", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Toetajad", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"tunni eest", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Varunda faili", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} tunni eest", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "minu-ublocki-varundus_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"eile", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Taasta failist...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} päeva tagasi", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Taasta vaikeseadetele...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Kuva töölaud", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Kõik seaded kirjutatakse üle, kasutades varundust kuupäevast {{time}} ning uBlock₀ taaskäivitatakse.\n\nKirjutan üle kõik praegused seaded varundusandmetega?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Kuva logija", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Andmeid ei suudetud lugeda või on vigased", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"väljas", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Kõik seaded kustutatakse ning uBlock₀ taaskäivitatakse.\n\nTaastan uBlock₀'i algseadetele?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin on keelanud järgneva lehe laadimise:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Võrgu viga: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Järgneva filtri tõttu", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Lisan järgneva URLi sinu kohandatud filtrite nimekirja?\n\nPealkiri: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"parameetriteta", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "minuti eest", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Asub filtrites:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minuti eest", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Mine tagasi", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "tunni eest", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Sulge see aken", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} tunni eest", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Keela karm blokeerimine {{hostname}} jaoks", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "eile", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Ajutiselt", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} päeva tagasi", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Püsivalt", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Kuva töölaud", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Ekspordi pilvehoidlasse", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Kuva logija", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Impordi pilvehoidlast", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "väljas", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Impordi pilvekettalt ja ühilda praeguste seadetega", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin on keelanud järgneva lehe laadimise:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Järgneva filtri tõttu", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Selle seadme nimi:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "parameetriteta", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Hoiatus! Muuda täpsemaid seadeid oma vastutusel.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Asub filtrites:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Saada", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Mine tagasi", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Kinnita muudatused", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Sulge see aken", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Ennista", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Keela karm blokeerimine {{hostname}} jaoks", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"baiti", - "description":"" + "docblockedDisableTemporary": { + "message": "Ajutiselt", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Luba ajutiselt mahukad meediaelemendid", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Püsivalt", + "description": "English: Permanently" }, - "dummy":{ - "message":"See sisestus peab olema viimane", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Ekspordi pilvehoidlasse", + "description": "tooltip" + }, + "cloudPull": { + "message": "Impordi pilvehoidlast", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Impordi pilvekettalt ja ühilda praeguste seadetega", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Selle seadme nimi:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Hoiatus! Muuda täpsemaid seadeid oma vastutusel.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Saada", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Kinnita muudatused", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Ennista", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "baiti", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Luba ajutiselt mahukad meediaelemendid", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "See sisestus peab olema viimane", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/eu/messages.json b/src/_locales/eu/messages.json index a0ecb8c3ac774..983e2e50ed25b 100644 --- a/src/_locales/eu/messages.json +++ b/src/_locales/eu/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Behingoz, blokeatzaile eraginkor bat. PUZ eta memorian arina.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Behingoz, blokeatzaile eraginkor bat. PUZ eta memorian arina.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Kontrol panela", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Kontrol panela", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ezarpenak", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ezarpenak", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Hirugarrengoen iragazkiak", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Hirugarrengoen iragazkiak", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Nire iragazkiak", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Nire iragazkiak", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Nire arauak", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Nire arauak", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Zerrenda zuria", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Zerrenda zuria", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Egunkaria", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Egunkaria", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Honi buruz", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Honi buruz", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Ezarpen aurreratuak", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Ezarpen aurreratuak", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klik: gaitu\/ezgaitu uBlock₀ gune honetan.\n\nKtrl+klik: ezgaitu uBlock₀ orri honetan soilik.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klik: gaitu\/ezgaitu uBlock₀ gune honetan.\n\nKtrl+klik: ezgaitu uBlock₀ orri honetan soilik.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"blokeatutako eskariak", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"orri honetan", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} edo %{{percent}}", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "blokeatutako eskariak", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"instalaziotik", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "orri honetan", + "description": "English: on this page" }, - "popupOr":{ - "message":"edo", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} edo %{{percent}}", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Ireki kontrol panela", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "instalaziotik", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Elementuak lekuz aldatzeko modua", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "edo", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Elementuak hautatzeko modua", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Ireki kontrol panela", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Ireki egunkaria", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Elementuak lekuz aldatzeko modua", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Txandakatu laster-leihoen blokeoa gune honetan", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Elementuak hautatzeko modua", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Txandakatu multimedia elementu handiak blokeatzea gune honetan", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Ireki egunkaria", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Txandakatu iragazki kosmetikoa gune honetan", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Txandakatu laster-leihoen blokeoa gune honetan", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Txandakatu urruneko letra tipoen blokeoa gune honetan", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Arau orokorrak: Zutabe hau gune guztietan aplikatzen diren arauentzat da.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Tokiko arauak: Zutabe hau soilik uneko gunean aplikatuko diren arauentzat da. Tokiko arauek arau orokorrak gainidazten dituzte.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Txandakatu multimedia elementu handiak blokeatzea gune honetan", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Sakatu aldaketak gordetzeko.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Sakatu aldaketak desegiteko.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"guztiak", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Txandakatu iragazki kosmetikoa gune honetan", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"irudiak", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"Hirugarrengoak", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"Hirugarrengoen css\/irudiak", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Txandakatu urruneko letra tipoen blokeoa gune honetan", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"barne scriptak", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"bertako scriptak", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"hirugarrengoen scriptak", - "description":"" + "popupTipGlobalRules": { + "message": "Arau orokorrak: Zutabe hau gune guztietan aplikatzen diren arauentzat da.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"hirugarrengoen markoak", - "description":"" + "popupTipLocalRules": { + "message": "Tokiko arauak: Zutabe hau soilik uneko gunean aplikatuko diren arauentzat da. Tokiko arauek arau orokorrak gainidazten dituzte.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"konektatutako domeinuak", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Sakatu aldaketak gordetzeko.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} \/ {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Sakatu aldaketak desegiteko.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Sortu", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "guztiak", + "description": "" }, - "pickerPick":{ - "message":"Hautatu", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "irudiak", + "description": "" }, - "pickerQuit":{ - "message":"Irten", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "Hirugarrengoak", + "description": "" }, - "pickerPreview":{ - "message":"Aurreikusi", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "Hirugarrengoen css\/irudiak", + "description": "" }, - "pickerNetFilters":{ - "message":"Sare iragazkiak", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "barne scriptak", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Iragazki kosmetikoak", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "bertako scriptak", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ktrl-klik", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "hirugarrengoen scriptak", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blokeatu elementua", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "hirugarrengoen markoak", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ezkutatu blokeatutako elementuen hutsuneak", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "konektatutako domeinuak", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Bistaratu blokeatutako eskari kopurua ikonoan", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} \/ {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Desgaitu argibideak", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Sortu", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Erabili laster-menua egokia denean", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Hautatu", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Kolore-itsuentzat egokia", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Irten", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Gaitu hodei biltegiratzearen euskarria", - "description":"" + "pickerPreview": { + "message": "Aurreikusi", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Erabiltzaile aurreratua naiz (Irakurri beharrekoa<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Sare iragazkiak", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"ezarpen aurreratuak", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Iragazki kosmetikoak", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Desgaitu aurrez-kargatzea (blokeatutako sare eskaeretako edozein konexio galarazteko)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klik, Ktrl-klik", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Desgaitu loturen auditoretza", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blokeatu elementua", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Galarazi WebRTCk tokiko IP helbidea iragartzea", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Ezkutatu blokeatutako elementuen hutsuneak", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Lehenetsitako portaera", - "description":"" + "settingsIconBadgePrompt": { + "message": "Bistaratu blokeatutako eskari kopurua ikonoan", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Lehenetsitako portaera hauek gunez gune gainidatzi daitezke", - "description":"" + "settingsTooltipsPrompt": { + "message": "Desgaitu argibideak", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Desgaitu iragazki kosmetikoa", - "description":"" + "settingsContextMenuPrompt": { + "message": "Erabili laster-menua egokia denean", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokeatu {{input:number}} kB baino handiagoak diren multimedia elementuak", - "description":"" + "settingsColorBlindPrompt": { + "message": "Kolore-itsuentzat egokia", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokeatu urruneko letra-tipoak", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Gaitu hodei biltegiratzearen euskarria", + "description": "" }, - "settingsStorageUsed":{ - "message":"Erabilitako biltegiratzea: {{value}} byte", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Erabiltzaile aurreratua naiz (Irakurri beharrekoa<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Azken berreskuratzea:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "ezarpen aurreratuak", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Azken babeskopia:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Desgaitu aurrez-kargatzea (blokeatutako sare eskaeretako edozein konexio galarazteko)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} sare iragazki + {{cosmeticFilterCount}} iragazki kosmetiko hemendik:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Desgaitu loturen auditoretza", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} erabilita, guztira {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Galarazi WebRTCk tokiko IP helbidea iragartzea", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Automatikoki eguneratu iragazkien zerrenda.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Lehenetsitako portaera", + "description": "" }, - "3pUpdateNow":{ - "message":"Eguneratu orain", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Lehenetsitako portaera hauek gunez gune gainidatzi daitezke", + "description": "" }, - "3pPurgeAll":{ - "message":"Garbitu cache guztiak", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Desgaitu iragazki kosmetikoa", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Prozesatu eta ezarri iragazki kosmetikoak.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blokeatu {{input:number}} kB baino handiagoak diren multimedia elementuak", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Ezaugarri hau gaitzeak uBlock₀en memoria erabilera handitzen du.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blokeatu urruneko letra-tipoak", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ezikusi iragazki kosmetiko orokorrak", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Ahalmen gutxiagoko gailuetan aukera hau gaitzea aholkatzen da.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Erabilitako biltegiratzea: {{value}} byte", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Azken berreskuratzea:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Aplikatu aldaketak", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Azken babeskopia:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Iragarkiak", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} sare iragazki + {{cosmeticFilterCount}} iragazki kosmetiko hemendik:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Pribatutasuna", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} erabilita, guztira {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Malware domeinuak", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Automatikoki eguneratu iragazkien zerrenda.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Gizarte sareak", - "description":"English: Social" + "3pUpdateNow": { + "message": "Eguneratu orain", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Helburu anitzekoak", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Garbitu cache guztiak", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Eskualdeak, hizkuntzak", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Prozesatu eta ezarri iragazki kosmetikoak.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Pertsonala", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Ezaugarri hau gaitzeak uBlock₀en memoria erabilera handitzen du.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"URL bat lerroko. Hasieran ‘’ duten lerroak ezikusiko dira. Baliogabeko URLak isilean ezikusiko dira.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ezikusi iragazki kosmetiko orokorrak", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Zaharkituta.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Ahalmen gutxiagoko gailuetan aukera hau gaitzea aholkatzen da.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Azken eguneraketa: {{ago}}.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Eguneratzen...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Aplikatu aldaketak", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Sare errore batek baliabidea eguneratzea eragotzi du.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Iragarkiak", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Iragazki bat lerroko. Iragazkia hostalari izen soila izan daiteke, edo Adblock Plusekin bateragarria den iragazki bat. Hasieran ‘’ duten lerroak ezikusiko dira.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Pribatutasuna", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Inportatu eta gehitu", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Malware domeinuak", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Esportatu", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Eragozpenak", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"nire-ublock-iragazki-estatikoak_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Helburu anitzekoak", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Aplikatu aldaketak", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Eskualdeak, hizkuntzak", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Behin betiko arauak", - "description":"header" + "3pGroupCustom": { + "message": "Pertsonala", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Behin behineko arauak", - "description":"header" + "3pExternalListsHint": { + "message": "URL bat lerroko. Hasieran ‘’ duten lerroak ezikusiko dira. Baliogabeko URLak isilean ezikusiko dira.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Baztertu", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Zaharkituta.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Behin betiko bihurtu", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Azken eguneraketa: {{ago}}.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Aldatu", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Eguneratzen...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Gorde", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Sare errore batek baliabidea eguneratzea eragotzi du.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Baztertu", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Iragazki bat lerroko. Iragazkia hostalari izen soila izan daiteke, edo Adblock Plusekin bateragarria den iragazki bat. Hasieran ‘’ duten lerroak ezikusiko dira.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Inportatu fitxategitik...", - "description":"" + "1pImport": { + "message": "Inportatu eta gehitu", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Esportatu fitxategira", - "description":"" + "1pExport": { + "message": "Esportatu", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"nire-ublock-arau-dinamikoak_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "nire-ublock-iragazki-estatikoak_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Zure iragazki dinamikoen arau zerrenda.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Aplikatu aldaketak", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Arauen sintaxia: jatorria helburua mota ekintza<\/code>(Dokumentazio osoa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Behin betiko arauak", + "description": "header" }, - "whitelistPrompt":{ - "message":"Zerrenda zuriaren direktibek uBlock zeintzu web orrietan desgaituko den zehazten dute. Sarrera bat lerroko. Baliogabeko ostalari izenak ezikusiko dira.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Behin behineko arauak", + "description": "header" }, - "whitelistImport":{ - "message":"Inportatu eta gehitu", - "description":"English: Import and append" + "rulesRevert": { + "message": "Baztertu", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Esportatu", - "description":"English: Export" + "rulesCommit": { + "message": "Behin betiko bihurtu", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"nire-ublock-zerrendazuria_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Aldatu", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Aplikatu aldaketak", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Gorde", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Mota", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Baztertu", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domeinua", - "description":"English: Domain" + "rulesImport": { + "message": "Inportatu fitxategitik...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Esportatu fitxategira", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Iragazkia", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "nire-ublock-arau-dinamikoak_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Guztiak", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Zure iragazki dinamikoen arau zerrenda.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Atzeko planoan", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Arauen sintaxia: jatorria helburua mota ekintza<\/code>(Dokumentazio osoa<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"iragazi egunkariko sarrerak", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Zerrenda zuriaren direktibek uBlock zeintzu web orrietan desgaituko den zehazten dute. Sarrera bat lerroko. Baliogabeko ostalari izenak ezikusiko dira.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Egunkariaren gehieneko sarrera kopurua", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Inportatu eta gehitu", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Testuingurua:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Esportatu", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Mota:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "nire-ublock-zerrendazuria_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"URL iragazketa dinamikoa", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Aplikatu aldaketak", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Iragazketa estatikoa", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Mota", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} {{type}} motako sare eskariak {{br}}URL helbidea {{url}} helbidearekin bat datorrenean {{br}}eta jatorria {{origin}} denean,{{br}}{{importance}} bat datorren salbuespen iragazki bat badago.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domeinua", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokeatu", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Baimendu", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Iragazkia", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"mota “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Guztiak", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"edozein mota", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Atzeko planoan", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"hemendik “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "iragazi egunkariko sarrerak", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"edonondik", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Egunkariaren gehieneko sarrera kopurua", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"kenduta", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Testuingurua:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"nahiz eta", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Mota:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"{{filter}} iragazki estatiko aurkitu da hemen:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "URL iragazketa dinamikoa", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Aldaketa egunkaria", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Iragazketa estatikoa", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} {{type}} motako sare eskariak {{br}}URL helbidea {{url}} helbidearekin bat datorrenean {{br}}eta jatorria {{origin}} denean,{{br}}{{importance}} bat datorren salbuespen iragazki bat badago.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Laguntza", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokeatu", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Iturburu kodea (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Baimendu", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Parte-hartzaileak", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "mota “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Egin babeskopia fitxategian", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "edozein mota", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"nire-ublock-babeskopia_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "hemendik “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Berreskuratu fitxategitik...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "edonondik", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Leheneratu lehenetsitako ezarpenetara...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "kenduta", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Zure ezarpen guztiak gainidatziko dira {{time}}ko datuak erabiliz, eta uBlock₀ berrabiaraziko da.\n\nGainidatzi ezarpen guztiak babeskopiako datuekin?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "nahiz eta", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Datuak ezin dira irakurri edo baliogabeak dira", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "{{filter}} iragazki estatiko aurkitu da hemen:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Zure ezarpen guztiak ezabatuko dira, eta uBlock₀ berrabiaraziko da.\n\nLeheneratu uBlock₀ jatorrizko ezarpenetara?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Aldaketa egunkaria", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Sare-errorea: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Gehitu honako URL hauek zure iragazki pertsonalizatuen zerrendara?\n\nIzenburua: \"{{title}}\"\nURLa: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Laguntza", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"duela minutu bat", - "description":"English: a minute ago" + "aboutCode": { + "message": "Iturburu kodea (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"duela {{value}} minutu", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Parte-hartzaileak", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"duela ordu bat", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Egin babeskopia fitxategian", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"duela {{value}} ordu", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "nire-ublock-babeskopia_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"duela egun bat", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Berreskuratu fitxategitik...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"duela {{value}} egun", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Leheneratu lehenetsitako ezarpenetara...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Bistaratu kontrol panela", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Zure ezarpen guztiak gainidatziko dira {{time}}ko datuak erabiliz, eta uBlock₀ berrabiaraziko da.\n\nGainidatzi ezarpen guztiak babeskopiako datuekin?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Bistaratu egunkaria", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Datuak ezin dira irakurri edo baliogabeak dira", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"itzalita", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Zure ezarpen guztiak ezabatuko dira, eta uBlock₀ berrabiaraziko da.\n\nLeheneratu uBlock₀ jatorrizko ezarpenetara?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ek orri hau kargatzea galarazi du:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Sare-errorea: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Iragazki hau dela eta", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Gehitu honako URL hauek zure iragazki pertsonalizatuen zerrendara?\n\nIzenburua: \"{{title}}\"\nURLa: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"parametrorik gabe", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "duela minutu bat", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Hemen aurkitua:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "duela {{value}} minutu", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Atzera", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "duela ordu bat", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Itxi leiho hau", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "duela {{value}} ordu", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Ezgaitu blokeatze zorrotza {{hostname}} gunean", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "duela egun bat", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Une batez", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "duela {{value}} egun", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Behin betiko", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Bistaratu kontrol panela", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Esportatu hodei biltegiratzera", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Bistaratu egunkaria", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Inportatu hodei biltegiratzetik", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "itzalita", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Inportatu hodeiko biltegiratzetik eta nahastu oraingo ezarpenekin", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ek orri hau kargatzea galarazi du:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Iragazki hau dela eta", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Gailu honen izena:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "parametrorik gabe", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Abisua! Ez aldatu ezarpen aurreratu hauek zertan ari zaren ez badakizu.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Hemen aurkitua:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Bidali", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Atzera", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Aplikatu aldaketak", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Itxi leiho hau", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Baztertu", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Ezgaitu blokeatze zorrotza {{hostname}} gunean", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"byte", - "description":"" + "docblockedDisableTemporary": { + "message": "Une batez", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Une batez baimendu multimedia elementu handiak", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Behin betiko", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Esportatu hodei biltegiratzera", + "description": "tooltip" + }, + "cloudPull": { + "message": "Inportatu hodei biltegiratzetik", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Inportatu hodeiko biltegiratzetik eta nahastu oraingo ezarpenekin", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Gailu honen izena:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Abisua! Ez aldatu ezarpen aurreratu hauek zertan ari zaren ez badakizu.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Bidali", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplikatu aldaketak", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Baztertu", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Une batez baimendu multimedia elementu handiak", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/fa/messages.json b/src/_locales/fa/messages.json index d769279dda8ae..0b11de1688da6 100644 --- a/src/_locales/fa/messages.json +++ b/src/_locales/fa/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"بالاخره، یک بلاکر کارآمد. کم حجم بر روی پردازنده و حافظه.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "بالاخره، یک بلاکر کارآمد. کم حجم بر روی پردازنده و حافظه.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — داشبورد", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — داشبورد", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"تنظیمات", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "تنظیمات", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"فیلتر های خارجی", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "فیلتر های خارجی", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"فیلترهای من", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "فیلترهای من", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"قوانین من", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "قوانین من", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"لیست سپید", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "لیست سپید", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — لاگ درخواست های شبکه", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — لاگ درخواست های شبکه", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"در باره", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "در باره", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"تنظیمات پیشرفته", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "تنظیمات پیشرفته", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"کلیک: غیر فعال\/ فعال کردن uBlock₀ برای این سایت.\n\nکنترل+کلیک: غیر فعال کردن uBlock₀ فقط برای همین صفحه.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "کلیک: غیر فعال\/ فعال کردن uBlock₀ برای این سایت.\n\nکنترل+کلیک: غیر فعال کردن uBlock₀ فقط برای همین صفحه.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"درخواست مسدود شده", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"در این صفحه", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} یا {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "درخواست مسدود شده", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"از زمان نصب", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "در این صفحه", + "description": "English: on this page" }, - "popupOr":{ - "message":"یا", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} یا {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"باز کردن داشبورد", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "از زمان نصب", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"ورود به حالت انتخاب اشیاء", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "یا", + "description": "English: or" }, - "popupTipPicker":{ - "message":"ورود به حالت انتخاب اشیاء", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "باز کردن داشبورد", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"رفتن به لاگ درخواست", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "ورود به حالت انتخاب اشیاء", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"تغییر وضعیت انسداد همه ی پنجره های این سایت", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "ورود به حالت انتخاب اشیاء", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"تغییر وضعیت انسداد عناصر مدیای حجیم برای این سایت", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "رفتن به لاگ درخواست", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"تغییر وضعیت فیلترزیباسازی در این صفحه", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "تغییر وضعیت انسداد همه ی پنجره های این سایت", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"تغییر وضعیت انسداد فونت های از راه دور برای این سایت", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"قوانین همگانی: این ستون برای قوانینی است که به تمامی سایت ها اعمال می شود.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"قوانین محلی: این ستون برای قوانینی است که تنها در این وب‌گاه اعمال می شود.\nقوانین محلی بر قوانین سراسری برتری دارد.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "تغییر وضعیت انسداد عناصر مدیای حجیم برای این سایت", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"برای دائمی سازی تغییرات کلیک کنید.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"برای برگشت تغییرات کلیک کنید.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"همه", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "تغییر وضعیت فیلترزیباسازی در این صفحه", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"تصاویر", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"3rd-party", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"تصاویر\/css سایت های ثالث", - "description":"" + "popupTipNoRemoteFonts": { + "message": "تغییر وضعیت انسداد فونت های از راه دور برای این سایت", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"اسکریپت های درون خطی", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"اسکریپت های 1st-party", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"اسکریپت های 3rd-party", - "description":"" + "popupTipGlobalRules": { + "message": "قوانین همگانی: این ستون برای قوانینی است که به تمامی سایت ها اعمال می شود.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"فریم های 3rd-party", - "description":"" + "popupTipLocalRules": { + "message": "قوانین محلی: این ستون برای قوانینی است که تنها در این وب‌گاه اعمال می شود.\nقوانین محلی بر قوانین سراسری برتری دارد.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"دامنه های دست خورده", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "برای دائمی سازی تغییرات کلیک کنید.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"تعداد {{count}} از {{total}} تا", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "برای برگشت تغییرات کلیک کنید.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"ایجاد", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "همه", + "description": "" }, - "pickerPick":{ - "message":"انتخاب", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "تصاویر", + "description": "" }, - "pickerQuit":{ - "message":"خروج", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "3rd-party", + "description": "" }, - "pickerPreview":{ - "message":"پیش نمایش", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "تصاویر\/css سایت های ثالث", + "description": "" }, - "pickerNetFilters":{ - "message":"فیلترهای شبکه", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "اسکریپت های درون خطی", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"فیلترهای انتخابی", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "اسکریپت های 1st-party", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"کلیک، کنترل-کلیک", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "اسکریپت های 3rd-party", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"بلاک کردن این شیء", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "فریم های 3rd-party", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"مخفی کردن نگاهدارنده اشیاء بلاک شده", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "دامنه های دست خورده", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"نمایش تعداد درخواست های بلاک شده بر روی آیکون", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "تعداد {{count}} از {{total}} تا", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"غیر فعال سازی راهنماها", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "ایجاد", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"استفاده از منوی متنی در زمانهای لازم", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "انتخاب", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"بهینه سازی کور رنگی", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "خروج", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"فعال سازی پشتیبانی ذخیره سازی ابری", - "description":"" + "pickerPreview": { + "message": "پیش نمایش", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"من کاربر حرفه ای هستم (لازم است بخوانید<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "فیلترهای شبکه", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"تنظیمات پیشرفته", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "فیلترهای انتخابی", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"غیر فعال کردن واکشی اولیه (برای جلوگیری از هر گونه اتصال برای درخواست های شبکه مسدود شده)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "کلیک، کنترل-کلیک", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"غیر فعال سازی پیوندهای نظارتی \/ هدایتی", - "description":"English: " + "pickerContextMenuEntry": { + "message": "بلاک کردن این شیء", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"جلوگیری WebRTC از افشاسازی آدرس های IP محلی", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "مخفی کردن نگاهدارنده اشیاء بلاک شده", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"رفتار پیش فرض", - "description":"" + "settingsIconBadgePrompt": { + "message": "نمایش تعداد درخواست های بلاک شده بر روی آیکون", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"این رفتارهای پیش فرض بسته به هر وب‌گاهیی می تواند باطل شود", - "description":"" + "settingsTooltipsPrompt": { + "message": "غیر فعال سازی راهنماها", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"غیر فعال‌سازی انسداد تزیینی", - "description":"" + "settingsContextMenuPrompt": { + "message": "استفاده از منوی متنی در زمانهای لازم", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"انسداد عناصر مدیایی حجیم تر از {{input:number}} کیلوبایت", - "description":"" + "settingsColorBlindPrompt": { + "message": "بهینه سازی کور رنگی", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"انسداد فونت های از راه دور", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "فعال سازی پشتیبانی ذخیره سازی ابری", + "description": "" }, - "settingsStorageUsed":{ - "message":"فضای مصرفی: {{value}} بایت", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "من کاربر حرفه ای هستم (لازم است بخوانید<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"آخرین بازیابی:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "تنظیمات پیشرفته", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"آخرین پشتیبانی:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "غیر فعال کردن واکشی اولیه (برای جلوگیری از هر گونه اتصال برای درخواست های شبکه مسدود شده)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} فیلتر های شبکه + {{cosmeticFilterCount}} فرم های فیلتر انتخابی:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "غیر فعال سازی پیوندهای نظارتی \/ هدایتی", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"تعداد {{used}} از {{total}} مورد استفاده شده", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "جلوگیری WebRTC از افشاسازی آدرس های IP محلی", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"بروز رسانی خودکار لیست فیلتر.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "رفتار پیش فرض", + "description": "" }, - "3pUpdateNow":{ - "message":"اکنون به روز رسانی شود", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "این رفتارهای پیش فرض بسته به هر وب‌گاهیی می تواند باطل شود", + "description": "" }, - "3pPurgeAll":{ - "message":"پاکسازی تمام انبارها", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "غیر فعال‌سازی انسداد تزیینی", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"تجزیه و اجرای فیلترهای انتخابی.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "انسداد عناصر مدیایی حجیم تر از {{input:number}} کیلوبایت", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

فعال کردن این قابلیت مصرف حافظه ی uBlock<\/i>را افزایش میدهد.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "انسداد فونت های از راه دور", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "فضای مصرفی: {{value}} بایت", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"فهرست میزبان های مسدود شده", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "آخرین بازیابی:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"اعمال تغییرات", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "آخرین پشتیبانی:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"تبلیغات", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} فیلتر های شبکه + {{cosmeticFilterCount}} فرم های فیلتر انتخابی:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"حریم خصوصی", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "تعداد {{used}} از {{total}} مورد استفاده شده", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"دامنه های مخرب", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "بروز رسانی خودکار لیست فیلتر.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"اجتماعی", - "description":"English: Social" + "3pUpdateNow": { + "message": "اکنون به روز رسانی شود", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"چند منظوره", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "پاکسازی تمام انبارها", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"مناطق، زبانها", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "تجزیه و اجرای فیلترهای انتخابی.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"سفارشی", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

فعال کردن این قابلیت مصرف حافظه ی uBlock<\/i>را افزایش میدهد.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"هر آدرس در یک خط. خطوطی با پیشوند ‘!’ در نظر گرفته نمیشوند. آدرس های نامعتبر نیز در سکوت نادیده گرفته میشوند.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"منقضی شده", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"آخرین به روز رسانی: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "فهرست میزبان های مسدود شده", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"درحال بروزرسانی...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "اعمال تغییرات", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"یک خطای شبکه از بروزشدن منابع جلوگیری کرد.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "تبلیغات", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"یک فیلتر در هر خط. یک فیلتر می تواند آدرس هاست ساده یا فیلتر سازگار با Adblock plus باشد. خطوط با پیشوند ‘!’ نادیده گرفته می شوند.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "حریم خصوصی", + "description": "English: Privacy" }, - "1pImport":{ - "message":"وارد کردن و الحاق", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "دامنه های مخرب", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"خروجي گرفتن", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "چند منظوره", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"اعمال تغییرات", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "مناطق، زبانها", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"قوانین دائمی", - "description":"header" + "3pGroupCustom": { + "message": "سفارشی", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"قوانین موقت", - "description":"header" + "3pExternalListsHint": { + "message": "هر آدرس در یک خط. خطوطی با پیشوند ‘!’ در نظر گرفته نمیشوند. آدرس های نامعتبر نیز در سکوت نادیده گرفته میشوند.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"بازگرداندن", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "منقضی شده", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"ذخیره در منبع", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "آخرین به روز رسانی: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"ویرایش", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "درحال بروزرسانی...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"ذخيره", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "یک خطای شبکه از بروزشدن منابع جلوگیری کرد.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"لغو", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "یک فیلتر در هر خط. یک فیلتر می تواند آدرس هاست ساده یا فیلتر سازگار با Adblock plus باشد. خطوط با پیشوند ‘!’ نادیده گرفته می شوند.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"وارد کردن از فایل...", - "description":"" + "1pImport": { + "message": "وارد کردن و الحاق", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"خروجی گرفتن به فایل...", - "description":"" + "1pExport": { + "message": "خروجي گرفتن", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"لیست قوانین فیلترینگ پویای شما.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "اعمال تغییرات", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"نحوه استفاده: source destination type action<\/code> (مستندات کامل<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "قوانین دائمی", + "description": "header" }, - "whitelistPrompt":{ - "message":"لیست شما از هاست هایی که uBlock₀ در آنها غیرفعال خواهد شد. یک ورودی در هر خط. هاست های نامعتبر بدون اشاره ای نادیده گرفته می شوند.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "قوانین موقت", + "description": "header" }, - "whitelistImport":{ - "message":"وارد کردن و الحاق", - "description":"English: Import and append" + "rulesRevert": { + "message": "بازگرداندن", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"خروجي گرفتن", - "description":"English: Export" + "rulesCommit": { + "message": "ذخیره در منبع", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "ویرایش", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"اعمال تغییرات", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "ذخيره", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"نوع", - "description":"English: Type" + "rulesEditDiscard": { + "message": "لغو", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"دامنه", - "description":"English: Domain" + "rulesImport": { + "message": "وارد کردن از فایل...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"آدرس", - "description":"English: URL" + "rulesExport": { + "message": "خروجی گرفتن به فایل...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"فیلتر", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"همه", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "لیست قوانین فیلترینگ پویای شما.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"پشت صحنه", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "نحوه استفاده: source destination type action<\/code> (مستندات کامل<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"فیلتر کردن مطالب لاگ", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "لیست شما از هاست هایی که uBlock₀ در آنها غیرفعال خواهد شد. یک ورودی در هر خط. هاست های نامعتبر بدون اشاره ای نادیده گرفته می شوند.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"بیشترین تعداد مطالب لاگ", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "وارد کردن و الحاق", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"زمینه:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "خروجي گرفتن", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"نوع:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"فیلترینگ آدرس اینترنتی پویا", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "اعمال تغییرات", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"فیلترینگ ایستا", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "نوع", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} درخواست های شبکه از {{type}} {{br}} هر آدرس اینترنتی مطابقت داده می شود {{url}} {{br}}و هر چه شد{{origin}},{{br}}{{importance}} یک فیلتر تطبیق استثنا وجود دارد.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "دامنه", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"انسداد", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "آدرس", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"مجاز", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "فیلتر", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"نوع “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "همه", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"هر نوعی", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "پشت صحنه", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"از “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "فیلتر کردن مطالب لاگ", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"از هر جایی", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "بیشترین تعداد مطالب لاگ", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"بجز وقتی", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "زمینه:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"حتی اگر", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "نوع:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"انسداد ایستا {{filter}} یاقت شد در:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "فیلترینگ آدرس اینترنتی پویا", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"تغییرات اخیر", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "فیلترینگ ایستا", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"ویکی", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} درخواست های شبکه از {{type}} {{br}} هر آدرس اینترنتی مطابقت داده می شود {{url}} {{br}}و هر چه شد{{origin}},{{br}}{{importance}} یک فیلتر تطبیق استثنا وجود دارد.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"پشتیبانی", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "انسداد", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"سورس کد (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "مجاز", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"مشارکت کنندگان", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "نوع “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"پشتیبان گیری در فایل", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "هر نوعی", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "از “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"بازیابی از فایل...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "از هر جایی", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"تنظیم مجدد تنظیمات پیش فرض...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "بجز وقتی", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"تمام تنظیمات با استفاده از پشتیبان گیری در {{time}}، رونویسی شده و uBlock₀ مجدد راه اندازی میشود.\n\nتمام تنظیمات موجود با استفاده از داده های پشتیبانی رونویسی شود؟", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "حتی اگر", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"داده ها نمی تواند خوانده شوند و یا نامعتبر اند", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "انسداد ایستا {{filter}} یاقت شد در:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"تمام تنظیمات شده حذف و uBlock دوباره راه اندازی خواهد شد.\n\nتنظیم مجدد uBlock به تنظیمات کارخانه؟", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "تغییرات اخیر", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"قادر به اتصال به {{url}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "ویکی", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: لینک زیر به لیست فیلتر ها اضافه شود؟\n\nعنوان: \"{{title}}\"\nآدرس: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "پشتیبانی", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"1 دقیقه پیش", - "description":"English: a minute ago" + "aboutCode": { + "message": "سورس کد (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} دقیقه پیش", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "مشارکت کنندگان", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"یک ساعت پیش", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "پشتیبان گیری در فایل", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} ساعت قبل", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"دیروز", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "بازیابی از فایل...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} روز قبل", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "تنظیم مجدد تنظیمات پیش فرض...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"نمایش داشبورد", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "تمام تنظیمات با استفاده از پشتیبان گیری در {{time}}، رونویسی شده و uBlock₀ مجدد راه اندازی میشود.\n\nتمام تنظیمات موجود با استفاده از داده های پشتیبانی رونویسی شود؟", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"نمایش درخواست ثبت شبکه", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "داده ها نمی تواند خوانده شوند و یا نامعتبر اند", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"خاموش", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "تمام تنظیمات شده حذف و uBlock دوباره راه اندازی خواهد شد.\n\nتنظیم مجدد uBlock به تنظیمات کارخانه؟", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"ublock از بارگذاری این صفحات جلوگیری کرده:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "قادر به اتصال به {{url}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"بخاطر فیلتر زیر", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: لینک زیر به لیست فیلتر ها اضافه شود؟\n\nعنوان: \"{{title}}\"\nآدرس: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"بدون پارامترها", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "1 دقیقه پیش", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"یافته شده در:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} دقیقه پیش", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"بازگشت به عقب", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "یک ساعت پیش", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"بستن این پنجره", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} ساعت قبل", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"غیر فعال کردن بلاک برای {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "دیروز", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"موقتا", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} روز قبل", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"دائمی", - "description":"English: Permanently" + "showDashboardButton": { + "message": "نمایش داشبورد", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"صدور به فضای ذخیره سازی ابری", - "description":"tooltip" + "showNetworkLogButton": { + "message": "نمایش درخواست ثبت شبکه", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"ورود از فضای ذخیره سازی ابری", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "خاموش", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"ورود از فضای ذخیره سازی ابری و ادغام با تنظیمات فعلی", - "description":"tooltip" + "docblockedPrompt1": { + "message": "ublock از بارگذاری این صفحات جلوگیری کرده:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "بخاطر فیلتر زیر", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"نام این وسیله:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "بدون پارامترها", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"هشدار! این تنظیمات پیشرفته را با مسئولیت خود تغییر دهید.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "یافته شده در:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"ثبت", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "بازگشت به عقب", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"اعمال تغییرات", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "بستن این پنجره", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"بازگشت", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "غیر فعال کردن بلاک برای {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"بایت", - "description":"" + "docblockedDisableTemporary": { + "message": "موقتا", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"اجازه موقت عناصر مدیای حجیم", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "دائمی", + "description": "English: Permanently" }, - "dummy":{ - "message":"این باید آخرین مطلب باشد", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "صدور به فضای ذخیره سازی ابری", + "description": "tooltip" + }, + "cloudPull": { + "message": "ورود از فضای ذخیره سازی ابری", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "ورود از فضای ذخیره سازی ابری و ادغام با تنظیمات فعلی", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "نام این وسیله:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "هشدار! این تنظیمات پیشرفته را با مسئولیت خود تغییر دهید.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "ثبت", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "اعمال تغییرات", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "بازگشت", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "بایت", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "اجازه موقت عناصر مدیای حجیم", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "این باید آخرین مطلب باشد", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/fi/messages.json b/src/_locales/fi/messages.json index c91b47cc96637..a00212a955a18 100644 --- a/src/_locales/fi/messages.json +++ b/src/_locales/fi/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Viimeinkin tehokas ja kevyt mainosten estäjä.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Viimeinkin tehokas ja kevyt mainosten estäjä.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Hallintapaneeli", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Hallintapaneeli", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Asetukset", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Asetukset", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"3:nen osapuolen suodattimet", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "3:nen osapuolen suodattimet", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Minun suodattimet", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Minun suodattimet", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Omat säännöt", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Omat säännöt", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Valkolista", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Valkolista", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Verkkopyyntöjen loki", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Verkkopyyntöjen loki", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Tietoja", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Tietoja", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Lisäasetukset", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Lisäasetukset", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Painallus: poista käytöstä\/ota käyttöön uBlock₀ tällä sivustolla.\n\nCtrl+painallus: poista uBlock₀ käytöstä vain tällä sivulla.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Painallus: poista käytöstä\/ota käyttöön uBlock₀ tällä sivustolla.\n\nCtrl+painallus: poista uBlock₀ käytöstä vain tällä sivulla.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"pyyntöjä estetty", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Klikkaa poistaksesi uBlock₀:n käytöstä tällä sivustolla.\n\nCtrl+klikkaus poistaaksesi uBlock₀:n käytöstä vain tällä sivulla.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"tällä sivulla", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Klikkaa ottaaksesi uBlock₀:n käyttöön tällä sivustolla.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} tai {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "pyyntöjä estetty", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"asennuksen jälkeen", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "tällä sivulla", + "description": "English: on this page" }, - "popupOr":{ - "message":"tai", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} tai {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Avaa hallintapaneeli napsauttamalla", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "asennuksen jälkeen", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "tai", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Siirry elementtien valintaan", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Hallintapaneelityökaluun", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Näytä pyyntöjen loki", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Aktivoi elementtien piilotus\/palautus -poimintatyökalu", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Aktivoi ponnahdusikkunoiden esto tälle sivulle", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Siirry elementtien valintaan", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Ota käyttöön suurien mediaelementtien estäminen tälle sivustolle", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Näytä pyyntöjen loki", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Aktivoi kosmeettinen suodatus tälle sivulle", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Aktivoi ponnahdusikkunoiden esto tälle sivulle", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Estä etäladattavat fontit tällä sivulla", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Klikkaa estääksesi kaikki ponnahdusikkunat tällä sivustolla", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Yleiset säännöt: tämä sarake on säännöille, joita käytetään kaikille sivustoille.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Klikkaa salliaksesi kaikki ponnahdusikkunat tällä sivustolla", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Paikalliset säännöt: tämä sarake on säännöille, joita käytetään vain nykyiselle sivustolle.\nPaikalliset säännöt ohittavat yleiset säännöt.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Ota käyttöön suurien mediaelementtien estäminen tälle sivustolle", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Paina tehdäksesi muutoksesi pysyviksi.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Klikkaa estääksesi isot mediaelementit tällä sivustolla", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Paina kumotaksesi muutoksesi.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Klikkaa salliaksesi isot mediaelementit tällä sivustolla", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"kaikki", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Aktivoi kosmeettinen suodatus tälle sivulle", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"kuvat", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Klikkaa poistaaksesi käytöstä kosmeettinen suodatus tällä sivustolla", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"3. osapuoli", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Klikkaa ottaaksesi käyttöön kosmeettinen suodatus tällä sivustolla", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"3. osapuolen css\/kuvat", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Estä etäladattavat fontit tällä sivulla", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"upotetut skriptit", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Klikkaa estääksesi ulkoiset kirjasimet tällä sivustolla", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"1:sen osapuolen skriptit", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Klikkaa salliaksesi ulkoiset kirjasimet tällä sivustolla", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"3:nen osapuolen skriptit", - "description":"" + "popupTipGlobalRules": { + "message": "Yleiset säännöt: tämä sarake on säännöille, joita käytetään kaikille sivustoille.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"3:nen osapuolen kehykset", - "description":"" + "popupTipLocalRules": { + "message": "Paikalliset säännöt: tämä sarake on säännöille, joita käytetään vain nykyiselle sivustolle.\nPaikalliset säännöt ohittavat yleiset säännöt.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"yhdistetyt verkkotunnukset", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Paina tehdäksesi muutoksesi pysyviksi.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}}\/{{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Paina kumotaksesi muutoksesi.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Luo", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "kaikki", + "description": "" }, - "pickerPick":{ - "message":"Valitse", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "kuvat", + "description": "" }, - "pickerQuit":{ - "message":"Lopeta", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "3. osapuoli", + "description": "" }, - "pickerPreview":{ - "message":"Esikatsele", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "3. osapuolen css\/kuvat", + "description": "" }, - "pickerNetFilters":{ - "message":"Verkkosuodattimet", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "upotetut skriptit", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kosmeettiset suodattimet", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "1:sen osapuolen skriptit", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Painallus, Ctrl-painallus", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "3:nen osapuolen skriptit", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Estä elementti", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "3:nen osapuolen kehykset", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Piilota estettyjen elementtien paikanpitäjät", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "aktiiviset verkkotunnusyhteydet", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Näytä estetyt pyynnöt työkalupalkin kuvakkeessa", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}}\/{{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Poista käytöstä työkaluvinkit", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Luo", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Käytä sisältövalikkoa, kun mahdollista", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Valitse", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Mukauta värisokeille", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Lopeta", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ota käyttöön tuki pilvitallennukselle", - "description":"" + "pickerPreview": { + "message": "Esikatsele", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Olen edistynyt käyttäjä (Lue tämä<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Verkkosuodattimet", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"lisäasetukset", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kosmeettiset suodattimet", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Estä linkkien esihaku (jotta sitä kautta ei voi ladata estettyä sisältöä)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Painallus, Ctrl-painallus", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Estä linkkien seuranta", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Estä elementti", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Estä WebRTC:tä vuotamasta paikallista IP-osoitetta", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Piilota estettyjen elementtien paikanpitäjät", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Oletustoiminto", - "description":"" + "settingsIconBadgePrompt": { + "message": "Näytä estetyt pyynnöt työkalupalkin kuvakkeessa", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Nämä oletustoiminnot voidaan ohittaa sivustokohtaisesti", - "description":"" + "settingsTooltipsPrompt": { + "message": "Poista käytöstä työkaluvinkit", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Poista kosmeettinen suodatus käytöstä", - "description":"" + "settingsContextMenuPrompt": { + "message": "Käytä sisältövalikkoa, kun mahdollista", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Estä mediaelementit, jotka ovat suurempia kuin {{input:number}} kt", - "description":"" + "settingsColorBlindPrompt": { + "message": "Aktivoi vaihtoehtoiset värit puna-vihervärien sijaan", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Estä etäladattavat kirjasimet", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Ota käyttöön tuki pilvitallennukselle", + "description": "" }, - "settingsStorageUsed":{ - "message":"Tilaa käytetty: {{value}} tavua", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Olen edistynyt käyttäjä (Lue tämä<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Viimeisin palautus:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "lisäasetukset", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Viimeisin varmuuskopio:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Estä linkkien esihaku (jotta sitä kautta ei voi ladata estettyä sisältöä)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} verkkosuodatinta ja {{cosmeticFilterCount}} kosmeettista suodatinta kohteesta:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Estä linkkien seuranta", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"käytetty {{used}}\/{{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Estä WebRTC:tä vuotamasta paikallista IP-osoitetta", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Päivitä suodatinlista automaattisesti.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Oletustoiminto", + "description": "" }, - "3pUpdateNow":{ - "message":"Päivitä", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Nämä oletustoiminnot voidaan ohittaa sivustokohtaisesti", + "description": "" }, - "3pPurgeAll":{ - "message":"Tyhjennä välimuisti", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Poista kosmeettinen suodatus käytöstä", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Jäsennä ja pakota käyttöön kosmeettiset suodattimet.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Estä mediaelementit, jotka ovat suurempia kuin {{input:number}} kt", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Tämä ominaisuus nostaa uBlock₀<\/i>in muistinkäyttöä.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Estä etäladattavat kirjasimet", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Jätä huomioitta geneeriset kosmeettiset suodattimet", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Estä CSP-raportit", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

On suositeltavaa sallia tämä vaihtoehto vähemmän tehokkailla laitteilla.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Tilaa käytetty: {{value}} tavua", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista estetyistä isännistä", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Viimeisin palautus:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Vahvista muutokset", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Viimeisin varmuuskopio:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Mainokset", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} verkkosuodatinta ja {{cosmeticFilterCount}} kosmeettista suodatinta kohteesta:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Tietosuoja", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "käytetty {{used}}\/{{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Malware domains", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Päivitä suodatinlista automaattisesti.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Sosiaalinen", - "description":"English: Social" + "3pUpdateNow": { + "message": "Päivitä", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Monikäyttöinen", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Tyhjennä välimuisti", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Alueet, kielet", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Jäsennä ja pakota käyttöön kosmeettiset suodattimet.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Mukautettu", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Tämä ominaisuus nostaa uBlock₀<\/i>in muistinkäyttöä.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Yksi URL-osoite kullekin riville. Rivit, joiden alussa on ‘!’, jätetään huomiotta. Epäkelvot osoitteet ohitetaan ilman ilmoitusta.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Jätä huomioitta geneeriset kosmeettiset suodattimet", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"vanhentunut", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

On suositeltavaa sallia tämä vaihtoehto vähemmän tehokkailla laitteilla.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Viimeisin päivitys: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lista estetyistä isännistä", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Päivitetään...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Vahvista muutokset", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Verkkovirhe esti resurssin päivittämisen.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Mainokset", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Yksi suodatin kullekin riville. Suodatin voi olla pelkkä osoite tai Adblock Plus -yhteensopiva suodatin. Rivit, joiden alussa on ‘!’, jätetään huomiotta.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Tietosuoja", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Tuo ja liitä loppuun", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Malware domains", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Vie", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Harmit", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"staattiset-ublock-suodattimeni_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Monikäyttöinen", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Vahvista muutokset", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Alueet, kielet", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Pysyvät säännöt", - "description":"header" + "3pGroupCustom": { + "message": "Mukautettu", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Väliaikaiset säännöt", - "description":"header" + "3pExternalListsHint": { + "message": "Yksi URL-osoite kullekin riville. Rivit, joiden alussa on ‘!’, jätetään huomiotta. Epäkelvot osoitteet ohitetaan ilman ilmoitusta.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Kumoa", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "vanhentunut", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Lähetä", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Viimeisin päivitys: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Muokkaa", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Päivitetään...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Tallenna", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Verkkovirhe esti resurssin päivittämisen.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Hylkää", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Yksi suodatin kullekin riville. Suodatin voi olla pelkkä osoite tai Adblock Plus -yhteensopiva suodatin. Rivit, joiden alussa on ‘!’, jätetään huomiotta.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Tuo tiedostosta...", - "description":"" + "1pImport": { + "message": "Tuo ja liitä loppuun", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Vie tiedostoon...", - "description":"" + "1pExport": { + "message": "Vie", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"dynaamiset-ublock-saantoni_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "staattiset-ublock-suodattimeni_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Lista dynaamisista suodatussäännöistäsi.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Vahvista muutokset", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Säännön syntaksi: lähde kohde tyyppi toiminto<\/code> (täysi dokumentaatio<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Pysyvät säännöt", + "description": "header" }, - "whitelistPrompt":{ - "message":"Lista osoitteista, joissa haluat kytkeä uBlock₀:n pois päältä. Kirjoita yksi osoite kullekin riville. Virheelliset säännöt ohitetaan.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Väliaikaiset säännöt", + "description": "header" }, - "whitelistImport":{ - "message":"Tuo ja lisää", - "description":"English: Import and append" + "rulesRevert": { + "message": "Kumoa", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Vie", - "description":"English: Export" + "rulesCommit": { + "message": "Lähetä", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"minun-ublock-valkolista_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Muokkaa", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Vahvista muutokset", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Tallenna", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tyyppi", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Hylkää", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Verkkotunnus", - "description":"English: Domain" + "rulesImport": { + "message": "Tuo tiedostosta...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL-Osoite", - "description":"English: URL" + "rulesExport": { + "message": "Vie tiedostoon...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Suodatin", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "dynaamiset-ublock-saantoni_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Kaikki", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Lista dynaamisista suodatussäännöistäsi.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Kulissien takana", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Säännön syntaksi: lähde kohde tyyppi toiminto<\/code> (täysi dokumentaatio<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"suodata lokimerkinnät", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Lista osoitteista, joissa haluat kytkeä uBlock₀:n pois päältä. Kirjoita yksi osoite kullekin riville. Virheelliset säännöt ohitetaan.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maksimi määrä lokimerkintöjä", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Tuo ja lisää", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Konteksti:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Vie", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tyyppi:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "minun-ublock-valkolista_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynaaminen URL-suodatus", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Vahvista muutokset", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Staattinen suodatus", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tyyppi", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} verkkopyyntö {{type}}, {{br}}jonka URL-osoite vastaa {{url}} {{br}}ja joka on peräisin {{origin}},{{br}}{{importance}} löytyy vastaava poikkeussuodatin.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Verkkotunnus", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Estä", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL-Osoite", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Salli", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Suodatin", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tyyppi \"{{type}}\"", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Kaikki", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"kaikki tyypit", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Kulissien takana", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"kohteesta \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "suodata lokimerkinnät", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"kaikkialta", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maksimi määrä lokimerkintöjä", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"paitsi jos", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Konteksti:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"vaikka", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tyyppi:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Staattinen suodatus {{filter}} löytyi:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynaaminen URL-suodatus", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Muutosloki", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Staattinen suodatus", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} verkkopyyntö {{type}}, {{br}}jonka URL-osoite vastaa {{url}} {{br}}ja joka on peräisin {{origin}},{{br}}{{importance}} löytyy vastaava poikkeussuodatin.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Tuki", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Estä", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Lähdekoodi (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Salli", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Kehittäjät", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tyyppi \"{{type}}\"", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Varmuuskopioi tiedostoon", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "kaikki tyypit", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"minun-ublock-varmuuskopio_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "kohteesta \"{{origin}}\"", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Palauta tiedostosta...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "kaikkialta", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Palauta oletusasetukset...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "paitsi jos", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Kaikki asetuksesi korvataan käyttäen tietoja, jotka on varmuuskopioitu {{time}} ja uBlock₀ käynnistyy uudelleen.\nPäällekirjoitetaanko kaikki nykyiset asetukset käyttäen varmuuskopioituja tietoja?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "vaikka", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Tietoa ei voitu lukea, tai se on viallista", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Staattinen suodatus {{filter}} löytyi:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Kaikki asetuksesi poistetaan ja uBlock₀ käynnistyy uudelleen. \n\nPalautetaanko uBlock₀ oletusasetuksiin?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Muutosloki", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Yhteyttä ei voitu muodostaa osoitteeseen: {{url}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Lisää seuraava URL-osoite mukautettujen suodattimien luetteloihisi?\n\nNimi: \"{{title}}\"\nURL-osoite: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Tuki", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"minuutti sitten", - "description":"English: a minute ago" + "aboutCode": { + "message": "Lähdekoodi (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuuttia sitten", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Kehittäjät", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"tunti sitten", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Varmuuskopioi tiedostoon", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} tuntia sitten", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "minun-ublock-varmuuskopio_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"päivä sitten", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Palauta tiedostosta...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} päivää sitten", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Palauta oletusasetukset...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Näytä Hallintapaneeli", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Kaikki asetuksesi korvataan käyttäen tietoja, jotka on varmuuskopioitu {{time}} ja uBlock₀ käynnistyy uudelleen.\nPäällekirjoitetaanko kaikki nykyiset asetukset käyttäen varmuuskopioituja tietoja?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Näytä loki", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Tietoa ei voitu lukea, tai se on viallista", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"pois päältä", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Kaikki asetuksesi poistetaan ja uBlock₀ käynnistyy uudelleen. \n\nPalautetaanko uBlock₀ oletusasetuksiin?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin on estänyt seuraavaa sivua lataamasta:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Yhteyttä ei voitu muodostaa osoitteeseen: {{url}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Seuraavan suodattimen takia", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Lisää seuraava URL-osoite mukautettujen suodattimien luetteloihisi?\n\nNimi: \"{{title}}\"\nURL-osoite: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"ilman parametrejä", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "minuutti sitten", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Löytyy:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minuuttia sitten", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Mene takaisin", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "tunti sitten", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Sulje tämä ikkuna", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} tuntia sitten", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Poista tiukka estäminen {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "päivä sitten", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Tilapäisesti", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} päivää sitten", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Pysyvästi", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Näytä Hallintapaneeli", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Vie pilveen", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Näytä loki", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Tuo pilvestä", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "pois päältä", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Tuo pilvestä ja yhdistä nykyisten asetuksen kanssa", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin on estänyt seuraavaa sivua lataamasta:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Seuraavan suodattimen takia", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Tämän laitteen nimi:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "ilman parametrejä", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Varoitus! Muuta näitä lisäasetuksia vain omalla riskillä.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Löytyy:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Lähetä", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Mene takaisin", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Vahvista muutokset", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Sulje tämä ikkuna", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Kumoa", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Poista tiukka estäminen {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"tavua", - "description":"" + "docblockedDisableTemporary": { + "message": "Tilapäisesti", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Salli tilapäisesti suuret mediaelementit", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Pysyvästi", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Vie pilveen", + "description": "tooltip" + }, + "cloudPull": { + "message": "Tuo pilvestä", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Tuo pilvestä ja yhdistä nykyisten asetuksen kanssa", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Tämän laitteen nimi:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Varoitus! Muuta näitä lisäasetuksia vain omalla riskillä.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Lähetä", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Vahvista muutokset", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Kumoa", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "tavua", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Salli tilapäisesti suuret mediaelementit", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/fil/messages.json b/src/_locales/fil/messages.json index 1139ad675e49e..bebc7f404bdce 100644 --- a/src/_locales/fil/messages.json +++ b/src/_locales/fil/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Sa wakas! Isang magaling na blocker para sa Chromium-based browsers. Magaan sa CPU at memory.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Sa wakas! Isang magaling na blocker para sa Chromium-based browsers. Magaan sa CPU at memory.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashboard", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashboard", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Mga Setting", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Mga Setting", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"3rd-party na mga filter", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "3rd-party na mga filter", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Ang iyong filters", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Ang iyong (mga) filters", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Mga patakaran", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mga patakaran", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Whitelist", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock - Talaan", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock - Talaan", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"About", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Tungkol dito", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Mga pinalawig na ayos", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Mga pinalawig na ayos", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Click: disable\/enable µBlock para sa site na to.\n\nCtrl+click: disable µBlock para lang sa pahina na to.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Click: paganahin (o 'wag paganahin) ang uBlock₀ para sa websayt na to.\n\nCtrl+click: 'wag paganahin ang uBlock₀ para lang sa pahina na to.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"i-block ang mga request", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"sa pahina na to", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} o {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "mga na-block na request", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"noong ininstall", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "sa pahina na to", + "description": "English: on this page" }, - "popupOr":{ - "message":"o", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} o {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"i-click para buksan ang dashboard", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "simula noong ininstall", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Buksan ang element zapper na paraan", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "o", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Buksan ang element picker mode", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Pindutin upang mabuksan ang dashboard", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Pumunta sa request log", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Buksan ang element zapper na paraan", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Palit-ayos sa paghalang ng mga labasin sa site", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Buksan ang element picker mode", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Palit-ayos sa paghalang ng mga malaking media element sa site", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Pumunta sa request log", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Toggle cosmetic filtering for this site", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Palit-ayos sa paghalang ng mga labasin sa site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Toggle the blocking of remote fonts for this site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Global rules: this column is for rules which apply to all sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Palit-ayos sa paghalang ng mga malaking media element sa site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Click to make your changes permanent.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Click to revert your changes.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"all", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Palit-ayos ng panala ng itsura para sa site na ito", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"images", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"3rd-party", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"3rd-party css\/images", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Palit-ayos sa paghalang ng malayuang itsura ng titik para sa site na ito", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scripts", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"1st-party scripts", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"3rd-party scripts", - "description":"" + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"3rd-party frames", - "description":"" + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domains connected", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Pindutin upang maging permanente ang mga pagbabago.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} out of {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Create", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "lahat", + "description": "" }, - "pickerPick":{ - "message":"Pick", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "mga imahe", + "description": "" }, - "pickerQuit":{ - "message":"Quit", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "Pang-tatlo na personalidad", + "description": "" }, - "pickerPreview":{ - "message":"Preview", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "3rd-party css\/images", + "description": "" }, - "pickerNetFilters":{ - "message":"Network filters", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Cosmetic filters", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "1st-party scripts", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl-click", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "3rd-party scripts", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Block element", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "3rd-party frames", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Hide placeholders of blocked elements", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "mga nakonektang domain", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Show the number of blocked requests on the icon", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} na domain sa {{total}} na domain", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Disable tooltips", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Idagdag ang rule", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Make use of context menu where appropriate", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Pumili ng bagong elemento", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Color-blind friendly", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Bumalik sa pahina", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Enable cloud storage support", - "description":"" + "pickerPreview": { + "message": "Tingnan ang pagbabago", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"I am an advanced user (required reading<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Network filters", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"advanced settings", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Cosmetic filters", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disable pre-fetching (to prevent any connection for blocked network requests)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disable hyperlink auditing", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Paghalang sa elemento", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Prevent WebRTC from leaking local IP addresses", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Hide placeholders of blocked elements", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Default behavior", - "description":"" + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"These default behaviors can be overridden on a per-site basis", - "description":"" + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Disable cosmetic filtering", - "description":"" + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Block media elements larger than {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Color-blind friendly", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Block remote fonts", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" }, - "settingsStorageUsed":{ - "message":"Storage used: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "I am an advanced user (required reading<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Last restore:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Last backup:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} used out of {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Auto-update filter lists", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" }, - "3pUpdateNow":{ - "message":"Update now", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" }, - "3pPurgeAll":{ - "message":"Purge all caches", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Parse and enforce cosmetic filters", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Storage used: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Last restore:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Isumite ang mga pagbabago", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Ads", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Pribado", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Mga Malware domains", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Auto-update filter lists", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pUpdateNow": { + "message": "Update now", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Multipurpose", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regions, languages", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Custom", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Out of date.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Last update: {{ago}}.\nClick to force an update.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Updating...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Isumite ang mga pagbabago", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"A network error prevented the resource from being updated.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Ads", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Pribado", + "description": "English: Privacy" }, - "1pImport":{ - "message":"I-Import at idugtong", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Mga Malware domains", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"I-Export", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Multipurpose", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Apply changes", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regions, languages", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Permanent rules", - "description":"header" + "3pGroupCustom": { + "message": "Custom", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Temporary rules", - "description":"header" + "3pExternalListsHint": { + "message": "One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Revert", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Out of date.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Commit", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Edit", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Updating...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Save", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Discard", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Import from file...", - "description":"" + "1pImport": { + "message": "I-Import at idugtong", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Export to file", - "description":"" + "1pExport": { + "message": "I-Export", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"List of your dynamic filtering rules.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Isumite ang mga pagbabago", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Permanent rules", + "description": "header" }, - "whitelistPrompt":{ - "message":"The whitelist directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Temporary rules", + "description": "header" }, - "whitelistImport":{ - "message":"Import and append", - "description":"English: Import and append" + "rulesRevert": { + "message": "Revert", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Export", - "description":"English: Export" + "rulesCommit": { + "message": "Commit", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Edit", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Apply changes", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Save", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Discard", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domain", - "description":"English: Domain" + "rulesImport": { + "message": "Import from file...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Export to file", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"All", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Behind the scene", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Rule syntax: source destination type action<\/code> (full documentation<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filter log entries", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "The whitelist directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maximum number of log entries", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Import and append", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Export", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamic URL filtering", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Isumite ang mga pagbabago", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Static filtering", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Block", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Allow", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "All", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"any type", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Behind the scene", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"from “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filter log entries", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"from anywhere", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maximum number of log entries", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"except when", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"even if", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamic URL filtering", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Change log", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Static filtering", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Block", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Source code (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Allow", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Contributors", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Back up to file", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Restore from file...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Reset to default settings...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Change log", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Hindi maka-connect sa {{url}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Support", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"a minute ago", - "description":"English: a minute ago" + "aboutCode": { + "message": "Source code (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutes ago", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Contributors", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"an hour ago", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Back up to file", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} hours ago", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"a day ago", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Restore from file...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} days ago", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Reset to default settings...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Show Dashboard", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Show Logger", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"off", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Hindi maka-connect sa {{url}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Because of the following filter", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"without parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "a minute ago", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Found in:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minutes ago", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Go back", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "an hour ago", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Close this window", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} hours ago", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Disable strict blocking for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "a day ago", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporarily", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} days ago", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanently", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Export to cloud storage", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Import from cloud storage", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Import from cloud storage and merge with current settings", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Because of the following filter", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"This device name:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warning! Change these advanced settings at your own risk.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Found in:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Submit", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Go back", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Apply changes", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Close this window", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Revert", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporarily", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Temporarily allow large media elements", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanently", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "This device name:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Submit", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Revert", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/fr/messages.json b/src/_locales/fr/messages.json index 9d78553d06430..1b84357596230 100644 --- a/src/_locales/fr/messages.json +++ b/src/_locales/fr/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Un bloqueur de nuisances efficace, qui ménagera votre processeur et votre mémoire vive.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Un bloqueur de nuisances efficace, qui ménagera votre processeur et votre mémoire vive.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Tableau de bord", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Tableau de bord", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Paramètres", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Paramètres", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Listes de filtres", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Listes de filtres", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Mes filtres", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Mes filtres", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Mon filtrage dynamique", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mon filtrage dynamique", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Liste blanche", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Liste blanche", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Journal des requêtes réseau", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Journal des requêtes réseau", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"À propos", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "À propos", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Paramètres avancés", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Paramètres avancés", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Clic : Désactiver\/Activer uBlock₀ pour ce site.\n\nCtrl+clic : Désactiver uBlock₀ uniquement sur cette page.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Clic : Désactiver\/Activer uBlock₀ pour ce site.\n\nCtrl+clic : Désactiver uBlock₀ uniquement sur cette page.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"Requêtes bloquées", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Cliquez pour désactiver uBlock₀ pour ce site\n\nCtrl+Clic pour désactiver uBlock₀ uniquement pour cette page", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"sur cette page :", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Cliquez pour activer uBlock₀ pour ce site", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}}, soit {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "Requêtes bloquées", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"depuis toujours :", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "sur cette page :", + "description": "English: on this page" }, - "popupOr":{ - "message":"soit", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}}, soit {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Ouvrir le Tableau de bord", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "depuis toujours :", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Entrer en mode Zappeur", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "soit", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Entrer en mode Sélecteur", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Ouvrir le Tableau de bord", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Ouvrir le journal des requêtes", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Entrer en mode Zappeur", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Activer\/Désactiver le blocage des fenêtres pop-ups pour ce site", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Entrer en mode Sélecteur", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Bloquer\/Autoriser le chargement d'éléments médias à taille plus importante pour ce site", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Ouvrir le journal des requêtes", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Activer\/Désactiver le filtrage esthétique pour ce site", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Activer\/Désactiver le blocage des fenêtres pop-ups pour ce site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Autoriser\/Bloquer le téléchargement des polices d'écriture distantes pour ce site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Cliquez pour bloquer toutes les pop-ups de ce site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Règles globales : Cette colonne concerne des règles qui s'appliquent partout.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Cliquez pour cesser de bloquer toutes les pop-up de ce site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Règles locales : Cette colonne concerne des règles qui ne s'appliquent que sur le site actuellement visité.\nLes règles locales supplantent les règles globales.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Bloquer\/Autoriser le chargement d'éléments médias à taille plus importante pour ce site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Cliquez pour rendre les changements opérés permanents.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Cliquez pour bloquer les médias de grande taille sur ce site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Cliquez pour annuler les changements opérés.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Cliquez pour cesser de bloquer les médias de grande taille sur ce site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"Tout", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Activer\/Désactiver le filtrage esthétique pour ce site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"Images", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Cliquez pour désactiver le filtrage esthétique sur ce site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"Tierce-partie", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Cliquez pour activer le filtrage esthétique sur ce site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/Images de tierce-partie", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Autoriser\/Bloquer le téléchargement des polices d'écriture distantes pour ce site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"Scripts embarqués", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Cliquez pour bloquer les polices d'écriture distantes sur ce site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Scripts du domaine de la page", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Cliquez pour cesser de bloquer les polices d'écriture distantes sur ce site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"Scripts de tierce-partie", - "description":"" + "popupTipGlobalRules": { + "message": "Règles globales : Cette colonne concerne des règles qui s'appliquent partout.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Cadres de tierce-partie", - "description":"" + "popupTipLocalRules": { + "message": "Règles locales : Cette colonne concerne des règles qui ne s'appliquent que sur le site actuellement visité.\nLes règles locales supplantent les règles globales.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"Domaines connectés", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Cliquez pour rendre les changements opérés permanents.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} sur un total de {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Cliquez pour annuler les changements opérés.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Créer", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "Tout", + "description": "" }, - "pickerPick":{ - "message":"Cibler", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "Images", + "description": "" }, - "pickerQuit":{ - "message":"Quitter", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "Tierce-partie", + "description": "" }, - "pickerPreview":{ - "message":"Aperçu", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "CSS\/Images de tierce-partie", + "description": "" }, - "pickerNetFilters":{ - "message":"Filtres de réseau", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "Scripts embarqués", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Filtres esthétiques", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Scripts du domaine de la page", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Clic, Ctrl-clic", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "Scripts de tierce-partie", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Bloquer cet élément", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Cadres de tierce-partie", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Cacher les espaces réservés aux éléments bloqués", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "Domaines connectés", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Afficher le nombre de requêtes bloquées sur l'icône", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} sur un total de {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Désactiver les infobulles", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Créer", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Utiliser le menu contextuel si possible", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Cibler", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Mode Daltonien", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Quitter", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Activer le stockage des paramètres dans le nuage", - "description":"" + "pickerPreview": { + "message": "Aperçu", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Activer les fonctionnalités avancées (À lire<\/a>, page en Anglais)", - "description":"" + "pickerNetFilters": { + "message": "Filtres de réseau", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"Paramètres avancés", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Filtres esthétiques", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Désactiver la prédiction des actions sur le réseau (afin d'empêcher toute connexion pour les requêtes réseau bloquées)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Clic, Ctrl-clic", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Désactiver l'audit hyperlien", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Bloquer cet élément", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Empêcher la fuite des adresses IP locales via WebRTC", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Cacher les espaces réservés aux éléments bloqués", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Comportement par défaut", - "description":"" + "settingsIconBadgePrompt": { + "message": "Afficher le nombre de requêtes bloquées sur l'icône", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Ces comportements par défaut peuvent être remplacés au cas par cas", - "description":"" + "settingsTooltipsPrompt": { + "message": "Désactiver les infobulles", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Désactiver le filtrage esthétique", - "description":"" + "settingsContextMenuPrompt": { + "message": "Utiliser le menu contextuel si possible", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloquer les éléments médias d'une taille supérieure à {{input:number}} Ko", - "description":"" + "settingsColorBlindPrompt": { + "message": "Mode Daltonien", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloquer les polices d'écriture distantes", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Activer le stockage des paramètres dans le nuage", + "description": "" }, - "settingsStorageUsed":{ - "message":"Espace de stockage utilisé : {{value}} octet(s)", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Activer les fonctionnalités avancées (À lire<\/a>, page en Anglais)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Date de la dernière restauration :", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "Paramètres avancés", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Date de la dernière sauvegarde :", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Désactiver la prédiction des actions sur le réseau (afin d'empêcher toute connexion pour les requêtes réseau bloquées)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtre(s) réseau et {{cosmeticFilterCount}} filtre(s) esthétique(s) sont actuellement en vigueur :", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Désactiver l'audit hyperlien", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} utilisé(s) sur un total de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Empêcher la fuite des adresses IP locales via WebRTC", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Mettre à jour les listes de filtres sélectionnées automatiquement", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Comportement par défaut", + "description": "" }, - "3pUpdateNow":{ - "message":"Mettre à jour maintenant", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Ces comportements par défaut peuvent être remplacés au cas par cas", + "description": "" }, - "3pPurgeAll":{ - "message":"Vider tous les caches", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Désactiver le filtrage esthétique", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Utiliser en plus les règles esthétiques", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Bloquer les éléments médias d'une taille supérieure à {{input:number}} Ko", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

L'activation de cette fonctionnalité augmente l'empreinte mémoire de uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Bloquer les polices d'écriture distantes", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorer les filtres esthétiques génériques", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Bloquer les rapports CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Il est recommandé d'activer ce paramètre sur des appareils modestes.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Espace de stockage utilisé : {{value}} octet(s)", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listes prédéfinies d'hôtes à bloquer", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Date de la dernière restauration :", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Appliquer", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Date de la dernière sauvegarde :", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Publicités", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtre(s) réseau et {{cosmeticFilterCount}} filtre(s) esthétique(s) sont actuellement en vigueur :", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Confidentialité", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} utilisé(s) sur un total de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domaines malveillants", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Mettre à jour les listes de filtres sélectionnées automatiquement", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Réseaux sociaux", - "description":"English: Social" + "3pUpdateNow": { + "message": "Mettre à jour maintenant", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Tout usage", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Vider tous les caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Régions, langages", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Utiliser en plus les règles esthétiques", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Vos propres listes", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

L'activation de cette fonctionnalité augmente l'empreinte mémoire de uBlock₀.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Une adresse Web par ligne. Les lignes débutant par un ‘!’ seront ignorées. Les adresses Web invalides seront ignorées sans avertissement.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorer les filtres esthétiques génériques", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Obsolète", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Il est recommandé d'activer ce paramètre sur des appareils modestes.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Dernière mise à jour effectuée : {{ago}}\nCliquez pour forcer la mise à jour", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Listes prédéfinies d'hôtes à bloquer", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Mise à jour en cours...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Appliquer", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Une erreur réseau a empêché la mise à jour de la ressource.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Publicités", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Une règle par ligne. Une règle peut être un simple nom d'hôte, ou encore un filtre respectant la syntaxe des filtres Adblock Plus. Les lignes débutant par ‘!’ seront ignorées.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Confidentialité", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importer", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domaines malveillants", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exporter", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Nuisances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"mes-filtres-statiques-ublock_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Tout usage", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Appliquer", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Régions, langages", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Règles permanentes", - "description":"header" + "3pGroupCustom": { + "message": "Vos propres listes", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Règles temporaires", - "description":"header" + "3pExternalListsHint": { + "message": "Une adresse Web par ligne. Les lignes débutant par un ‘!’ seront ignorées. Les adresses Web invalides seront ignorées sans avertissement.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Rétablir", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Obsolète", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Appliquer", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Dernière mise à jour effectuée : {{ago}}\nCliquez pour forcer la mise à jour", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Éditer", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Mise à jour en cours...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Enregistrer", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Une erreur réseau a empêché la mise à jour de la ressource.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Annuler", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Une règle par ligne. Une règle peut être un simple nom d'hôte, ou encore un filtre respectant la syntaxe des filtres Adblock Plus. Les lignes débutant par ‘!’ seront ignorées.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importer à partir du fichier", - "description":"" + "1pImport": { + "message": "Importer", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exporter vers un fichier", - "description":"" + "1pExport": { + "message": "Exporter", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"mes-regles-de-filtrage-dynamique-ublock_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "mes-filtres-statiques-ublock_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Liste de vos règles de filtrage dynamique", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Appliquer", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Syntaxe : source destination type action<\/code> (Documentation complète en Anglais<\/a>)", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Règles permanentes", + "description": "header" }, - "whitelistPrompt":{ - "message":"La liste blanche indique à uBlock Origin sur quels sites Web il ne doit pas opérer de filtrage. Renseignez une exception par ligne. Toute entrée invalide sera ignorée et vous n'en serez pas averti(e).", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Règles temporaires", + "description": "header" }, - "whitelistImport":{ - "message":"Importer", - "description":"English: Import and append" + "rulesRevert": { + "message": "Rétablir", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exporter", - "description":"English: Export" + "rulesCommit": { + "message": "Appliquer", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"ma-liste-blanche-ublock-{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Éditer", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Appliquer", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Enregistrer", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Annuler", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domaine", - "description":"English: Domain" + "rulesImport": { + "message": "Importer à partir du fichier", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Exporter vers un fichier", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtre", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "mes-regles-de-filtrage-dynamique-ublock_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Tout", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Liste de vos règles de filtrage dynamique", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Requêtes en coulisses", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Syntaxe : source destination type action<\/code> (Documentation complète en Anglais<\/a>)", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"Filtrer les entrées du journal", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "La liste blanche indique à uBlock Origin sur quels sites Web il ne doit pas opérer de filtrage. Renseignez une exception par ligne. Toute entrée invalide sera ignorée et vous n'en serez pas averti(e).", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Nombre maximum d'entrées à conserver dans le journal", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importer", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Contexte :", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exporter", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type :", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "ma-liste-blanche-ublock-{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Filtrage dynamique de l'URL", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Appliquer", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrage statique", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} les requêtes réseau de {{type}} {{br}} dont l'adresse Web correspond à {{url}} {{br}} qui provient du domaine {{origin}}, {{br}}{{importance}} il y a un filtre d'exception correspondant", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domaine", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloquer", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Autoriser", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtre", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type \"{{type}}\"", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Tout", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"tout type", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Requêtes en coulisses", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"\"{{origin}}\"", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "Filtrer les entrées du journal", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"de n'importe où", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Nombre maximum d'entrées à conserver dans le journal", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"sauf quand", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Contexte :", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"même s'", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Type :", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtre statique {{filter}} trouvé dans :", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Filtrage dynamique de l'URL", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Journal des changements (en Anglais)", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Filtrage statique", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Documentation (en Anglais)", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} les requêtes réseau de {{type}} {{br}} dont l'adresse Web correspond à {{url}} {{br}} qui provient du domaine {{origin}}, {{br}}{{importance}} il y a un filtre d'exception correspondant", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Support (en Anglais)", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloquer", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Code Source (Licence GPLv3, en Anglais)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Autoriser", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Contributeurs", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "type \"{{type}}\"", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Exporter vers un fichier", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "tout type", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"mes-donnees-ublock_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\"", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Importer depuis un fichier", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "de n'importe où", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Paramètres par défaut", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "sauf quand", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Vos paramètres seront remplacés par les données sauvegardées le {{time}}, puis uBlock₀ redémarrera.\n\nProcéder à l'importation ?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "même s'", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Les données ne peuvent être lues ou sont invalides", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Filtre statique {{filter}} trouvé dans :", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Vos paramètres seront effacés, puis uBlock₀ redémarrera.\n\nProcéder à la réinitialisation des paramètres ?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Journal des changements (en Anglais)", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Erreur réseau : {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Documentation (en Anglais)", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀ : Ajouter la ressource Web suivante à votre sélection de listes de filtrage ?\n\nTitre : \"{{title}}\"\nURL : {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Support (en Anglais)", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"Il y a une minute", - "description":"English: a minute ago" + "aboutCode": { + "message": "Code Source (Licence GPLv3, en Anglais)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"Il y a {{value}} minutes", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Contributeurs", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"Il y a une heure", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Exporter vers un fichier", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"Il y a {{value}} heures", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "mes-donnees-ublock_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"Il y a un jour", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Importer depuis un fichier", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"Il y a {{value}} jours", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Paramètres par défaut", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Afficher le Tableau de bord", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Vos paramètres seront remplacés par les données sauvegardées le {{time}}, puis uBlock₀ redémarrera.\n\nProcéder à l'importation ?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Voir le Journal", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Les données ne peuvent être lues ou sont invalides", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"Arrêt", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Vos paramètres seront effacés, puis uBlock₀ redémarrera.\n\nProcéder à la réinitialisation des paramètres ?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ a empêché le chargement de la page suivante :", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Erreur réseau : {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"À cause du filtre suivant :", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀ : Ajouter la ressource Web suivante à votre sélection de listes de filtrage ?\n\nTitre : \"{{title}}\"\nURL : {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"sans paramètres", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "Il y a une minute", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Trouvé dans :", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "Il y a {{value}} minutes", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Retour", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "Il y a une heure", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Fermer cette fenêtre", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "Il y a {{value}} heures", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Désactiver le blocage strict du domaine {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "Il y a un jour", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"De manière temporaire", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "Il y a {{value}} jours", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"De manière définitive", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Afficher le Tableau de bord", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exporter vers le stockage dans le nuage", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Voir le Journal", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importer depuis le stockage dans le nuage", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "Arrêt", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importer depuis le stockage dans le nuage et fusionner avec les réglages actuels", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ a empêché le chargement de la page suivante :", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "À cause du filtre suivant :", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Nom de ce périphérique :", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "sans paramètres", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Attention, modifiez ces paramètres avancés à vos risques et périls.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Trouvé dans :", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Appliquer", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Retour", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Appliquer", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Fermer cette fenêtre", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Rétablir", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Désactiver le blocage strict du domaine {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"octets", - "description":"" + "docblockedDisableTemporary": { + "message": "De manière temporaire", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Autoriser temporairement le chargement d'éléments médias à taille plus importante", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "De manière définitive", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exporter vers le stockage dans le nuage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importer depuis le stockage dans le nuage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importer depuis le stockage dans le nuage et fusionner avec les réglages actuels", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nom de ce périphérique :", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Attention, modifiez ces paramètres avancés à vos risques et périls.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Appliquer", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Appliquer", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Rétablir", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "octets", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Autoriser temporairement le chargement d'éléments médias à taille plus importante", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/fy/messages.json b/src/_locales/fy/messages.json index e46ccbb440ee8..44e5a14314fae 100644 --- a/src/_locales/fy/messages.json +++ b/src/_locales/fy/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Einlik, in effisjinte adblocker. Brûkt hast gjin prosessorkrêft of ûnthâld.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Einlik, in effisjinte adblocker. Brûkt hast gjin prosessorkrêft of ûnthâld.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashboerd", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashboerd", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ynstellingen", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ynstellingen", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filters fan tredden", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filters fan tredden", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Myn filters", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Myn filters", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Myn rigels", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Myn rigels", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Whitelist", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Lochboek", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Lochboek", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Oer", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Oer", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Avansearre ynstellingen", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Avansearre ynstellingen", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klikke: uBlock₀ foar dizze website yn-\/útskeakelje.\n\nCtrl+klikke: uBlock₀ inkeld foar dizze side útskeakelje.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klikke: uBlock₀ foar dizze website yn-\/útskeakelje.\n\nCtrl+klikke: uBlock₀ inkeld foar dizze side útskeakelje.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"blokkearre fersiken", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Klik om uBlock₀ foar dizze website út te skeakeljen.\n\nCtrl+klik om uBlock₀ inkeld foar dizze side út te skeakeljen.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"op dizze side", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Klik om uBlock₀ foar dizze website yn te skeakeljen.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} fan {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "blokkearre fersiken", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"sûnt ynstallaasje", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "op dizze side", + "description": "English: on this page" }, - "popupOr":{ - "message":"of", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} fan {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Klik om it dashboerd te iepenjen", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "sûnt ynstallaasje", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Elemintwiskmodus iepenje", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "of", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Elemintkiesmodus iepenje", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Dashboerd iepenje", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Lochboek iepenje", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Elemintwiskmodus iepenje", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Alle pop-ups foar dizze website yn-\/útskeakelje", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Elemintkiesmodus iepenje", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Grutte media-eleminten foar dizze website yn-\/útskeakelje", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Lochboek iepenje", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Kosmetyske filters foar dizze website yn-\/útskeakelje", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Alle pop-ups foar dizze website yn-\/útskeakelje", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Blokkearjen fan eksterne lettertypen foar dizze website yn-\/útskeakelje", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Klik om alle pop-ups op dizze website te blokkearjen", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globale rigels: dizze kolom is foar rigels dy't op alle websites fan tapassing binne.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Klik om alle pop-ups op dizze website net mear te blokkearjen", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokale rigels: dizze kolom is foar rigels dy't allinnich op de aktuele website fan tapassing binne.\nLokale rigels hawwe foarrang op globale rigels.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Grutte media-eleminten foar dizze website yn-\/útskeakelje", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Klik om jo wizigingen permanint te meitsjen.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Klik om grutte media-eleminten op dizze website te blokkearjen", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Klik om jo wizigingen werom te draaien.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Klik om grutte media-eleminten op dizze website net mear te blokkearjen", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"alles", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Kosmetyske filters foar dizze website yn-\/útskeakelje", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"ôfbyldingen", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Klik om kosmetyske filters op dizze website út te skeakeljen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"fan tredden", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Klik om kosmetyske filters op dizze website yn te skeakeljen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/ôfbyldingen fan tredden", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Blokkearjen fan eksterne lettertypen foar dizze website yn-\/útskeakelje", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"ynline skripts", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Klik om eksterne lettertypen op dizze website te blokkearjen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"skripts fan de websites sels", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Klik om eksterne lettertypen op dizze website net mear te blokkearjen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"skripts fan tredden", - "description":"" + "popupTipGlobalRules": { + "message": "Globale rigels: dizze kolom is foar rigels dy't op alle websites fan tapassing binne.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"frames fan tredden", - "description":"" + "popupTipLocalRules": { + "message": "Lokale rigels: dizze kolom is foar rigels dy't allinnich op de aktuele website fan tapassing binne.\nLokale rigels hawwe foarrang op globale rigels.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"ferbûne domeinen", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Klik om jo wizigingen permanint te meitsjen.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} fan de {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Klik om jo wizigingen werom te draaien.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Meitsje", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "alles", + "description": "" }, - "pickerPick":{ - "message":"Kieze", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "ôfbyldingen", + "description": "" }, - "pickerQuit":{ - "message":"Slute", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "fan tredden", + "description": "" }, - "pickerPreview":{ - "message":"Foarbyld", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css\/ôfbyldingen fan tredden", + "description": "" }, - "pickerNetFilters":{ - "message":"Netfilters", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "ynline skripts", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kosmetyske filters", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "skripts fan de websites sels", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "skripts fan tredden", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Elemint blokkearje", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "frames fan tredden", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Tydlike oantsjutting fan blokkearre eleminten ferstopje", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "ferbûne domeinen", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"It tal blokkearre oanfragen op it ikoan toane", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} fan de {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Tooltips útskeakelje", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Meitsje", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Wêr mooglik gebrûk meitsje fan it kontekstmenu", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Kieze", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Kleureblynfreonlik", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Slute", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Stipe foar cloudûnthâld ynskeakelje", - "description":"" + "pickerPreview": { + "message": "Foarbyld", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Ik bin in betûfte brûker (Lês dit earst<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Netfilters", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"avansearre ynstellingen", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kosmetyske filters", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Pre-fetching útskeakelje (om eltse ferbining foar blokkearre netwurkfersiken foar te kommen)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Auditing fan keppelingen útskeakelje", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Elemint blokkearje", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"It lekken fan it lokale IP-adres fia WebRTC opkeare", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Tydlike oantsjutting fan blokkearre eleminten ferstopje", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Standertgedrach", - "description":"" + "settingsIconBadgePrompt": { + "message": "It tal blokkearre oanfragen op it ikoan toane", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Dizze standertgedragingen kinne foar eltse website oerskreaun wurde", - "description":"" + "settingsTooltipsPrompt": { + "message": "Tooltips útskeakelje", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Kosmetyske filters útskeakelje", - "description":"" + "settingsContextMenuPrompt": { + "message": "Wêr mooglik gebrûk meitsje fan it kontekstmenu", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Media-eleminten grutter as {{input:number}} kB blokkearje", - "description":"" + "settingsColorBlindPrompt": { + "message": "Kleureblynfreonlik", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Eksterne lettertypen blokkearje", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Stipe foar cloudûnthâld ynskeakelje", + "description": "" }, - "settingsStorageUsed":{ - "message":"Brûkte ûnthâldromte: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Ik bin in betûfte brûker (Lês dit earst<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Lêste werstel:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "avansearre ynstellingen", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Lêste reservekopy:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Pre-fetching útskeakelje (om eltse ferbining foar blokkearre netwurkfersiken foar te kommen)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} netwurkfilters + {{cosmeticFilterCount}} kosmetyske filters fan:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Auditing fan keppelingen útskeakelje", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} gebrûk fan {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "It lekken fan it lokale IP-adres fia WebRTC opkeare", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Filterlisten automatysk fernije.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Standertgedrach", + "description": "" }, - "3pUpdateNow":{ - "message":"No fernije", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Dizze standertgedragingen kinne foar eltse website oerskreaun wurde", + "description": "" }, - "3pPurgeAll":{ - "message":"Alle buffers leegje", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Kosmetyske filters útskeakelje", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Kosmetyske filters ynlêze en tapasse.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Media-eleminten grutter as {{input:number}} kB blokkearje", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

It ynskeakeljen fan dizze funksje ferheget it ûnthâldgebrûk fan uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Eksterne lettertypen blokkearje", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Algemiene kosmetyske filters negearje", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "CSP-rapporten blokkearje", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It wurdt oanrekommandearre dizze opsje op minder krêftige apparaten yn te skeakeljen.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Brûkte ûnthâldromte: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"List fan blokkearre hosts", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Lêste werstel:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Wizigingen tapasse", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Lêste reservekopy:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Advertinsjes", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} netwurkfilters + {{cosmeticFilterCount}} kosmetyske filters fan:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privacy", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} gebrûk fan {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Malwaredomeinen", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Filterlisten automatysk fernije.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Sosjaal", - "description":"English: Social" + "3pUpdateNow": { + "message": "No fernije", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Multifunksjoneel", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Alle buffers leegje", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Gebieden, talen", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Kosmetyske filters ynlêze en tapasse.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Oanpast", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

It ynskeakeljen fan dizze funksje ferheget it ûnthâldgebrûk fan uBlock₀.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Ien URL per rigel. Rigels begjinnend mei ‘!’ wurde negearre. Unjildige URL's wurde stil negearre.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Algemiene kosmetyske filters negearje", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Ferâldere.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It wurdt oanrekommandearre dizze opsje op minder krêftige apparaten yn te skeakeljen.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Lêste fernijing: {{ago}}.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "List fan blokkearre hosts", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Fernijt…", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Wizigingen tapasse", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"In netwurkflater hat opkeard dat de boarne bywurke waard.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Advertinsjes", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Ien filter per rigel. Ien filter kin in gewoane hostnamme of ien Adblock Plus-kompatibel filter wêze. Rigels begjinnend mei ‘!’ wurde negearre.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privacy", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Ymportearje en tafoegje", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Malwaredomeinen", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Eksportearje", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Ungeriif", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"myn-ublock-statyske-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Multifunksjoneel", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Wizigingen tapasse", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Gebieden, talen", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Permaninte rigels", - "description":"header" + "3pGroupCustom": { + "message": "Oanpast", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Tydlike rigels", - "description":"header" + "3pExternalListsHint": { + "message": "Ien URL per rigel. Rigels begjinnend mei ‘!’ wurde negearre. Unjildige URL's wurde stil negearre.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Tebeksette", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Ferâldere.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Tapasse", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Lêste fernijing: {{ago}}.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Bewurkje", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Fernijt…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Bewarje", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "In netwurkflater hat opkeard dat de boarne bywurke waard.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Annulearje", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Ien filter per rigel. Ien filter kin in gewoane hostnamme of ien Adblock Plus-kompatibel filter wêze. Rigels begjinnend mei ‘!’ wurde negearre.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Ut bestân ymportearje…", - "description":"" + "1pImport": { + "message": "Ymportearje en tafoegje", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Nei bestân eksportearje", - "description":"" + "1pExport": { + "message": "Eksportearje", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"myn-ublock-dynamyske-rigels_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "myn-ublock-statyske-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"List fan jo dynamyske filterrigels.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Wizigingen tapasse", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Rigelsyntaks: boarne bestimming type aksje<\/code> (folsleine dokumintaasje<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Permaninte rigels", + "description": "header" }, - "whitelistPrompt":{ - "message":"De whitelist-ynstruksjes skriuwe foar op hokker websiden uBlock Origin útskeakele wurde moat. Ien fermelding per rigel. Unjildige ynstruksjes wurde sûnder meidieling negearre en útskeakele.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Tydlike rigels", + "description": "header" }, - "whitelistImport":{ - "message":"Ymportearje en tafoegje", - "description":"English: Import and append" + "rulesRevert": { + "message": "Tebeksette", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Eksportearje", - "description":"English: Export" + "rulesCommit": { + "message": "Tapasse", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"myn-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Bewurkje", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Wizigingen tapasse", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Bewarje", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Annulearje", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domein", - "description":"English: Domain" + "rulesImport": { + "message": "Ut bestân ymportearje…", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Nei bestân eksportearje", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "myn-ublock-dynamyske-rigels_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Alles", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "List fan jo dynamyske filterrigels.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Achter de skermen", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Rigelsyntaks: boarne bestimming type aksje<\/code> (folsleine dokumintaasje<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"lochboekitems filterje", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "De whitelist-ynstruksjes skriuwe foar op hokker websiden uBlock Origin útskeakele wurde moat. Ien fermelding per rigel. Unjildige ynstruksjes wurde sûnder meidieling negearre en útskeakele.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maksimum oantal lochboekitems", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Ymportearje en tafoegje", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Eksportearje", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "myn-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamyske URL-filtering", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Wizigingen tapasse", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statysk filterje", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} netwurkfersiken fan {{type}} {{br}}wêrfan de URL lyk is oan {{url}} {{br}}en dy komme fan {{origin}},{{br}}{{importance}} der is in oerienkomstich útsûnderingsfilter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domein", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokkearje", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Tastean", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Alles", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"elts type", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Achter de skermen", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"fan “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "lochboekitems filterje", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"fan oeral wei", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maksimum oantal lochboekitems", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"útsein as", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"sels as", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statysk filter {{filter}} fûn yn:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamyske URL-filtering", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Wizigingenlochboek", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statysk filterje", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} netwurkfersiken fan {{type}} {{br}}wêrfan de URL lyk is oan {{url}} {{br}}en dy komme fan {{origin}},{{br}}{{importance}} der is in oerienkomstich útsûnderingsfilter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Stipe", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokkearje", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Boarnekoade (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Tastean", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Meiwurkers", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Reservekopy nei bestân", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "elts type", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"myn-ublock-reservekopy_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "fan “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Ut bestân werstelle…", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "fan oeral wei", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Nei de standertynstellingen weromsette…", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "útsein as", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Al jo ynstellingen sille oerskreaun wurde mei de reservekopygegevens fan {{time}} en uBlock₀ sil werstart wurde.\n\nBinne jo wis dat jo alle besteande ynstellingen oerskriuwe wolle mei de reservekopygegevens?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "sels as", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"De gegevens koene net lêzen wurde of binne ûnjildich", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statysk filter {{filter}} fûn yn:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Al jo ynstellingen sille fuortsmiten wurde, wêrnei uBlock₀ werstart.\n\nYnstellingen dochs werstelle nei de standertwearden?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Wizigingenlochboek", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Netwurkflater: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: De folgjende URL oan jo oanpaste filterlisten tafoegje?\n\nTitel: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Stipe", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"in minút lyn", - "description":"English: a minute ago" + "aboutCode": { + "message": "Boarnekoade (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuten lyn", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Meiwurkers", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"in oere lyn", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Reservekopy nei bestân", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} oeren lyn", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "myn-ublock-reservekopy_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"in dei lyn", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Ut bestân werstelle…", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dagen lyn", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Nei de standertynstellingen weromsette…", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Dashboerd toane", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Al jo ynstellingen sille oerskreaun wurde mei de reservekopygegevens fan {{time}} en uBlock₀ sil werstart wurde.\n\nBinne jo wis dat jo alle besteande ynstellingen oerskriuwe wolle mei de reservekopygegevens?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Lochboek toane", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "De gegevens koene net lêzen wurde of binne ûnjildich", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"útskeakele", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Al jo ynstellingen sille fuortsmiten wurde, wêrnei uBlock₀ werstart.\n\nYnstellingen dochs werstelle nei de standertwearden?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin hat it laden fan de folgjende side opkeard:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Netwurkflater: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Fanwege it folgjende filter", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: De folgjende URL oan jo oanpaste filterlisten tafoegje?\n\nTitel: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"sûnder parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "in minút lyn", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Fûn yn:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minuten lyn", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Tebekgean", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "in oere lyn", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Dit finster slute", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} oeren lyn", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Strikte blokkearring foar {{hostname}} útskeakelje", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "in dei lyn", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Tydlik", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} dagen lyn", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanint", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Dashboerd toane", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Eksportearje nei cloudûnthâld", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Lochboek toane", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Ymportearje fan cloudûnthâld", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "útskeakele", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Ut cloudopslach ymportearje en gearfoegje mei aktuele ynstellingen", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin hat it laden fan de folgjende side opkeard:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"…\n…", - "description":"" + "docblockedPrompt2": { + "message": "Fanwege it folgjende filter", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Apparaatnamme:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "sûnder parameters", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warskôging! Wizigje dizze avansearre ynstellingen op eigen risiko.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Fûn yn:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Ferstjoere", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Tebekgean", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Wizigingen tapasse", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Dit finster slute", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Tebeksette", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Strikte blokkearring foar {{hostname}} útskeakelje", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Tydlik", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Grutte media-eleminten tydlik tastean", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanint", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Eksportearje nei cloudûnthâld", + "description": "tooltip" + }, + "cloudPull": { + "message": "Ymportearje fan cloudûnthâld", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Ut cloudopslach ymportearje en gearfoegje mei aktuele ynstellingen", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Apparaatnamme:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warskôging! Wizigje dizze avansearre ynstellingen op eigen risiko.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Ferstjoere", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Wizigingen tapasse", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Tebeksette", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Grutte media-eleminten tydlik tastean", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/gl/messages.json b/src/_locales/gl/messages.json index 26c7a3eeb829e..40cee338de996 100644 --- a/src/_locales/gl/messages.json +++ b/src/_locales/gl/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Ó fin, un bloqueador eficiente que non chupa toda a memoria e o procesador.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Ó fin, un bloqueador eficiente que non chupa toda a memoria e o procesador.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Panel de control", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Panel de control", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Configuración", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Configuración", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filtros de terceiros", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtros de terceiros", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Os meus filtros", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Os meus filtros", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"As miñas regras", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "As miñas regras", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista branca", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Lista branca", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Rexistro de peticións de rede", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Rexistro de peticións de rede", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Sobre", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Sobre", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Configuración avanzada", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Configuración avanzada", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Click: desactivar\/activar uBlock₀ neste sitio.\n\nCtrl+click: desactivar o uBlock₀ só nesta páxina.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Click: desactivar\/activar uBlock₀ neste sitio.\n\nCtrl+click: desactivar o uBlock₀ só nesta páxina.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"peticións bloqueadas", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click: desactivar\/activar uBO neste sitio.\n\nCtrl+click: desactivar o uBO só nesta páxina.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"nesta páxina", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click: activar uBO neste sitio.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} ou {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "peticións bloqueadas", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"dende a instalación", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "nesta páxina", + "description": "English: on this page" }, - "popupOr":{ - "message":"ou", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} ou {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Fai click para abrir o panel de control", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "dende a instalación", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Activar o modo \"eliminación de elementos\"", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "ou", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Ir ó modo do selector de elementos", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Fai click para abrir o panel de control", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Ir ó rexistro de peticións", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Activar o modo \"eliminación de elementos\"", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Activar todas as xanelas emerxentes nesta páxina", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Ir ó modo do selector de elementos", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Activar\/desactivar o bloqueo de elementos multimedia grandes para este sitio", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Ir ó rexistro de peticións", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Activar o filtrado cosmético nesta páxina", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Activar todas as xanelas emerxentes nesta páxina", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Activar o bloqueo de fontes remotas para esta páxina", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click: bloquear todos os elementos emerxentes neste sitio", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Reglas globais: esta columna é para as reglas que afectan a todos os sitios.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click: deixar de bloquear todos os elementos emerxentes neste sitio", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Reglas locais: esta columna é para as reglas que afectan só a un sitio. As reglas locais anteponse ás globais.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Activar\/desactivar o bloqueo de elementos multimedia grandes para este sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Fai click para gardar os cambios.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click: bloquear todos elementos multimedia de gran tamaño neste sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Fai click para desfacer os cambios.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click: deixar de bloquear todos elementos multimedia de gran tamaño neste sitio", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"todo", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Activar o filtrado cosmético nesta páxina", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"imaxes", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click: desactivar filtrado cosmético neste sitio", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"de terceiros", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click: activar filtrado cosmético neste sitio", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"Imaxes\/css de terceiros", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Activar o bloqueo de fontes remotas para esta páxina", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"Scripts embebidos", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click: bloquear fontes remotas neste sitio", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Scripts de dominio", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click: deixar de bloquear fontes remotas neste sitio", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"Scripts de terceiros", - "description":"" + "popupTipGlobalRules": { + "message": "Reglas globais: esta columna é para as reglas que afectan a todos os sitios.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Frames de terceiros", - "description":"" + "popupTipLocalRules": { + "message": "Reglas locais: esta columna é para as reglas que afectan só a un sitio. As reglas locais anteponse ás globais.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"dominios conectados", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Fai click para gardar os cambios.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Fai click para desfacer os cambios.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Crear", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "todo", + "description": "" }, - "pickerPick":{ - "message":"Escoller", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "imaxes", + "description": "" }, - "pickerQuit":{ - "message":"Saír", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "de terceiros", + "description": "" }, - "pickerPreview":{ - "message":"Vista previa", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "Imaxes\/css de terceiros", + "description": "" }, - "pickerNetFilters":{ - "message":"Filtros da rede", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "Scripts embebidos", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Filtros cosméticos", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Scripts de dominio", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl-click", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "Scripts de terceiros", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Bloquear elemento", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Frames de terceiros", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Agochar marcadores de posición dos elementos bloqueados", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "dominios conectados", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Amosar o número de peticións bloqueadas no icono", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Desactivar axuda emerxente", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Crear", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Empregar o menú contextual cando sexa posible", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Escoller", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Accesible para daltónicos", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Saír", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Activar soporte para almacenamento na nube", - "description":"" + "pickerPreview": { + "message": "Vista previa", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Sonche un usuario experto (Precisas ler isto<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Filtros da rede", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"configuración avanzada", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Filtros cosméticos", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Desactivar a precarga de sitios (prevén calquera conexión para peticións de red bloqueadas)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Desactivar a auditoría de hiperligazóns\/señais (beacons<\/i>)", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Bloquear elemento", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Impedir que o WebRTC revele os enderezos IP locais", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Agochar marcadores de posición dos elementos bloqueados", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Comportamento predefinido", - "description":"" + "settingsIconBadgePrompt": { + "message": "Amosar o número de peticións bloqueadas no icono", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Estes comportamentos predefinidos poden ser modificados para cada páxina en particular", - "description":"" + "settingsTooltipsPrompt": { + "message": "Desactivar axuda emerxente", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Desactivar o filtrado cosmético", - "description":"" + "settingsContextMenuPrompt": { + "message": "Empregar o menú contextual cando sexa posible", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloquear elementos os audiovisuais meirandes de {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Accesible para daltónicos", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloquear fontes remotas", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Activar soporte para almacenamento na nube", + "description": "" }, - "settingsStorageUsed":{ - "message":"Almacenamento empregado: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Sonche un usuario experto (Precisas ler isto<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Última recuperación:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "configuración avanzada", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Última copia de seguridade:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Desactivar a precarga de sitios (prevén calquera conexión para peticións de red bloqueadas)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Desactivar a auditoría de hiperligazóns\/señais (beacons<\/i>)", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"Empregados {{used}} de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Impedir que o WebRTC revele os enderezos IP locais", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Actualización automática das listas de filtros.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Comportamento predefinido", + "description": "" }, - "3pUpdateNow":{ - "message":"Actualizar agora", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Estes comportamentos predefinidos poden ser modificados para cada páxina en particular", + "description": "" }, - "3pPurgeAll":{ - "message":"Vaciar todas as cachés", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Desactivar o filtrado cosmético", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analizar e aplicar filtros cosméticos.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Bloquear elementos os audiovisuais meirandes de {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Activar esta opción incrementará o uso de memoria do uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Bloquear fontes remotas", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorar os filtros cosméticos xenéricos", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Recomendámosche activar esta opción sobre todo nos dispositivos menos potentes.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Almacenamento empregado: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista dos servidores bloqueados", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Última recuperación:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Aplicar os cambios", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Última copia de seguridade:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Anuncios", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privacidade", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "Empregados {{used}} de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Dominios de malware<\/i>", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Actualización automática das listas de filtros.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pUpdateNow": { + "message": "Actualizar agora", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Multipropósito", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Vaciar todas as cachés", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Rexións, linguaxes", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analizar e aplicar filtros cosméticos.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Personalizado", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Activar esta opción incrementará o uso de memoria do uBlock₀<\/i>.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Un enderezo por liña. As liñas prefixadas con ‘!’ seranche ignoradas, así como os enderezos inválidos.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorar os filtros cosméticos xenéricos", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Desactualizada.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Recomendámosche activar esta opción sobre todo nos dispositivos menos potentes.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Última actualización: {{ago}}\nFai click para forzar a actualización.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lista dos servidores bloqueados", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Actualizando...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Aplicar os cambios", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Un erro de rede está a impedir que se actualicen os recursos.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Anuncios", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Un filtro por cada liña. O filtro pode ser un nome de servidor, ou un filtro compatible co Adblock Plus. As liñas que comecen con ‘!’ seranche ignoradas.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privacidade", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importar e anexar", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Dominios de malware<\/i>", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exportar", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"o-meu-ublock-filtros-estaticos_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Multipropósito", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Aplicar cambios", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Rexións, linguaxes", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Regras permanentes", - "description":"header" + "3pGroupCustom": { + "message": "Personalizado", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Regras temporais", - "description":"header" + "3pExternalListsHint": { + "message": "Un enderezo por liña. As liñas prefixadas con ‘!’ seranche ignoradas, así como os enderezos inválidos.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Reverter", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Desactualizada.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Estabelecer", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Última actualización: {{ago}}\nFai click para forzar a actualización.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Editar", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Actualizando...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Gardar", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Un erro de rede está a impedir que se actualicen os recursos.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Descartar", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Un filtro por cada liña. O filtro pode ser un nome de servidor, ou un filtro compatible co Adblock Plus. As liñas que comecen con ‘!’ seranche ignoradas.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importar dun arquivo...", - "description":"" + "1pImport": { + "message": "Importar e anexar", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exportar a un arquivo", - "description":"" + "1pExport": { + "message": "Exportar", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"o-meu-ublock-regras-dinamicas_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "o-meu-ublock-filtros-estaticos_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Listado coas túas regras de filtrado dinámico.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Aplicar cambios", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Sintaxe das regras: orixe destino tipo acción<\/code> (documentación completa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Regras permanentes", + "description": "header" }, - "whitelistPrompt":{ - "message":"A lista branca é a túa lista de nomes de servidor nos que o uBlock₀ estará desactivado. Ten unha entrada por cada liña, e os nomes de servidor non válidos serán ignorados.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Regras temporais", + "description": "header" }, - "whitelistImport":{ - "message":"Importar e anexar", - "description":"English: Import and append" + "rulesRevert": { + "message": "Reverter", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exportar", - "description":"English: Export" + "rulesCommit": { + "message": "Estabelecer", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"o-meu-ublock-lista-branca_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Editar", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Aplicar os cambios", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Gardar", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Descartar", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Dominio", - "description":"English: Domain" + "rulesImport": { + "message": "Importar dun arquivo...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"Enderezo", - "description":"English: URL" + "rulesExport": { + "message": "Exportar a un arquivo", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtro", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "o-meu-ublock-regras-dinamicas_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Todas", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Listado coas túas regras de filtrado dinámico.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Peticións ocultas", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Sintaxe das regras: orixe destino tipo acción<\/code> (documentación completa<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtras as entradas de rexistro", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "A lista branca é a túa lista de nomes de servidor nos que o uBlock₀ estará desactivado. Ten unha entrada por cada liña, e os nomes de servidor non válidos serán ignorados.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Número máximo de entradas de rexistro", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importar e anexar", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Contexto:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exportar", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "o-meu-ublock-lista-branca_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Filtrado dinámico do enderezo", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Aplicar os cambios", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrado estático", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} peticións de rede tipo {{type}} {{br}} nas cales o enderezo contenga {{url}} {{br}}e que teñan como orixe {{origin}},{{br}}{{importance}} haxa un filtro de excepción aplicable.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Dominio", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloquear", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "Enderezo", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permitir", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtro", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Todas", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"calquera tipo", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Peticións ocultas", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"dende “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtras as entradas de rexistro", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"dende calquera sitio", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Número máximo de entradas de rexistro", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"agás cando", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Contexto:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"aínda cando", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtro estático {{filter}}atopado en:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Filtrado dinámico do enderezo", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Rexistro de cambios", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Filtrado estático", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} peticións de rede tipo {{type}} {{br}} nas cales o enderezo contenga {{url}} {{br}}e que teñan como orixe {{origin}},{{br}}{{importance}} haxa un filtro de excepción aplicable.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Asistencia", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloquear", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Código fonte (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Permitir", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Colaboradores", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tipo “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Facer copia de seguridade nun arquivo", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "calquera tipo", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-copia-seguridade_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "dende “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Recuperar dende arquivo...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "dende calquera sitio", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Restabelecer os axustes por defecto...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "agás cando", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Todas as túas preferencias serán rescritas, usando os datos rexistrados no {{time}}, e o uBlock₀ reiniciará. Queres sobrescribir toda a configuración existente empregando os datos da copia de seguridade?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "aínda cando", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Os datos son inválidos ou non poden ser lidos", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Filtro estático {{filter}}atopado en:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Eliminaranse todas as túas preferencias, e reiniciará o uBlock₀. Queres resetear o uBlock₀ á configuración por defecto?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Rexistro de cambios", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Erro da rede: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Engadir o seguinte enderezo á túa lista de filtros personalizados?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Asistencia", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"fai un minuto", - "description":"English: a minute ago" + "aboutCode": { + "message": "Código fonte (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"fai {{value}} minutos", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Colaboradores", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"fai unha hora", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Facer copia de seguridade nun arquivo", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"fai {{value}} horas", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-copia-seguridade_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"fai un día", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Recuperar dende arquivo...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"fai {{value}} días", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Restabelecer os axustes por defecto...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Amosar no Panel de control", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Todas as túas preferencias serán rescritas, usando os datos rexistrados no {{time}}, e o uBlock₀ reiniciará. Queres sobrescribir toda a configuración existente empregando os datos da copia de seguridade?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Amosar o rexistro de peticións da rede", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Os datos son inválidos ou non poden ser lidos", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"desactivado", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Eliminaranse todas as túas preferencias, e reiniciará o uBlock₀. Queres resetear o uBlock₀ á configuración por defecto?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"O uBlock₀ impediu cargar a seguinte páxina:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Erro da rede: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Por mor deste filtro:", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Engadir o seguinte enderezo á túa lista de filtros personalizados?\n\nTitle: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"sen parámetros", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "fai un minuto", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Atopado en:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "fai {{value}} minutos", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Retroceder", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "fai unha hora", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Pechar esta xanela", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "fai {{value}} horas", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Desactivar o bloqueo estricto en {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "fai un día", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporalmente", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "fai {{value}} días", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanentemente", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Amosar no Panel de control", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exportar ó almacenamento na nube", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Amosar o rexistro de peticións da rede", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importar dende o almacenamento na nube", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "desactivado", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importar dende a nube e combinar coas preferencias actuais", - "description":"tooltip" + "docblockedPrompt1": { + "message": "O uBlock₀ impediu cargar a seguinte páxina:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"... ...", - "description":"" + "docblockedPrompt2": { + "message": "Por mor deste filtro:", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"O nome deste dispositivo:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "sen parámetros", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Ollo! Non cambies estas configuracións avanzadas senón sabes ben o que estás a facer.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Atopado en:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Enviar", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Retroceder", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Aplicar os cambios", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Pechar esta xanela", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Reverter", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Desactivar o bloqueo estricto en {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporalmente", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permitir temporalmente os elementos multimedia grandes", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanentemente", + "description": "English: Permanently" }, - "dummy":{ - "message":"Esta ten que ser a derradeira entrada", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exportar ó almacenamento na nube", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importar dende o almacenamento na nube", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importar dende a nube e combinar coas preferencias actuais", + "description": "tooltip" + }, + "cloudNoData": { + "message": "... ...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "O nome deste dispositivo:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Ollo! Non cambies estas configuracións avanzadas senón sabes ben o que estás a facer.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Enviar", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplicar os cambios", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Reverter", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permitir temporalmente os elementos multimedia grandes", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Esta ten que ser a derradeira entrada", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/he/messages.json b/src/_locales/he/messages.json index ca742bd185d15..bc00586e8764f 100644 --- a/src/_locales/he/messages.json +++ b/src/_locales/he/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"סוף סוף, חוסם יעיל. קל על המעבד והזיכרון.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "סוף סוף, חוסם יעיל. קל על המעבד והזיכרון.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — פאנל הקונפיגורציות", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — פאנל הקונפיגורציות", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"הגדרות", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "הגדרות", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"מסננים צד-3", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "מסננים צד-3", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"המסננים שלי", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "המסננים שלי", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"החוקים שלי", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "החוקים שלי", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"רשימה לבנה", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "רשימה לבנה", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — מתעד הבקשות", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — מתעד הבקשות", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"אודות", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "אודות", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"הגדרות מתקדמות", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "הגדרות מתקדמות", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"לחיצה: כבה\/הפעל את uBlock₀ לאתר זה לצמיתות.\n\nCtrl+לחיצה: כבה את uBlock₀ רק בדף זה.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "לחיצה: כבה\/הפעל את uBlock₀ לאתר זה לצמיתות.\n\nCtrl+לחיצה: כבה את uBlock₀ רק בדף זה.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"בקשות שנחסמו", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "לחיצה: כבה את uBlock₀ לאתר זה.\n\nCtrl+לחיצה: כבה את uBlock₀ רק בדף זה.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"בדף זה", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "לחץ על מנת להפעיל את uBlock₀ באתר זה.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} או {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "בקשות שנחסמו", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"מאז ההתקנה", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "בדף זה", + "description": "English: on this page" }, - "popupOr":{ - "message":"או", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} או {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"פתח את פאנל הקונפיגורציות", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "מאז ההתקנה", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"היכנס למצב מחיקת אלמנט באופן זמני", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "או", + "description": "English: or" }, - "popupTipPicker":{ - "message":"היכנס למצב בחירת אלמנט", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "פתח את פאנל הקונפיגורציות", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"פתח את מתעד הבקשות", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "היכנס למצב מחיקת אלמנט באופן זמני", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"הפעל\/כבה את החסימה של חלונות קופצים באתר זה", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "היכנס למצב בחירת אלמנט", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"הפעל\/כבה את החסימה של אלמנטי מדיה גדולים באתר זה", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "פתח את מתעד הבקשות", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"הפעל\/כבה מסננים קוסמטיים באתר זה", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "הפעל\/כבה את החסימה של חלונות קופצים באתר זה", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"הפעל\/כבה את החסימה של פונטים חיצוניים באתר זה", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "לחץ על מנת לחסום חלונות קופצים באתר זה", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"חוקים גלובליים: עמודה זו היא עבור חוקים אשר תקפים לכל האתרים.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "לחץ על מנת לבטל את החסימה של חלונות קופצים באתר זה", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"חוקים לוקאליים: עמודה זו היא עבור חוקים אשר תקפים לאתר הנוכחי בלבד.\nחוקים לוקאליים דורסים את החוקים הגלובליים.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "הפעל\/כבה את החסימה של אלמנטי מדיה גדולים באתר זה", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"לחץ על מנת להפוך את השינויים שלך לקבועים.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "לחץ על מנת לחסום אלמנטי מדיה גדולים באתר זה", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"לחץ על מנת לבטל את השינויים שלך.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "לחץ על מנת לבטל את החסימה של אלמנטי מדיה גדולים באתר זה", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"הכל", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "הפעל\/כבה מסננים קוסמטיים באתר זה", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"תמונות", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "לחץ על מנת לכבות מסננים קוסמטיים באתר זה", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"צד-3", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "לחץ על מנת להפעיל מסננים קוסמטיים באתר זה", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/תמונות צד-3", - "description":"" + "popupTipNoRemoteFonts": { + "message": "הפעל\/כבה את החסימה של פונטים חיצוניים באתר זה", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"סקריפטים מוטמעים", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "לחץ על מנת לחסום פונטים חיצוניים באתר זה", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"סקריפטים צד-1", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "לחץ על מנת לבטל את החסימה של פונטים חיצוניים באתר זה", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"סקריפטים צד-3", - "description":"" + "popupTipGlobalRules": { + "message": "חוקים גלובליים: עמודה זו היא עבור חוקים אשר תקפים לכל האתרים.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"מסגרות צד-3", - "description":"" + "popupTipLocalRules": { + "message": "חוקים לוקאליים: עמודה זו היא עבור חוקים אשר תקפים לאתר הנוכחי בלבד.\nחוקים לוקאליים דורסים את החוקים הגלובליים.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"דומיינים שהתחברת אליהם", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "לחץ על מנת להפוך את השינויים שלך לקבועים.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} מתוך {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "לחץ על מנת לבטל את השינויים שלך.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"צור", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "הכל", + "description": "" }, - "pickerPick":{ - "message":"בחר", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "תמונות", + "description": "" }, - "pickerQuit":{ - "message":"צא", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "צד-3", + "description": "" }, - "pickerPreview":{ - "message":"תצוגה מקדימה", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css\/תמונות צד-3", + "description": "" }, - "pickerNetFilters":{ - "message":"מסנני רשת", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "סקריפטים מוטמעים", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"מסננים קוסמטיים", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "סקריפטים צד-1", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"לחיצה, Ctrl+לחיצה", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "סקריפטים צד-3", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"חסום אלמנט", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "מסגרות צד-3", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"הסתר את המקום שנשאר מחסימה של אלמנטים", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "דומיינים שהתחברת אליהם", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"הראה את מספר הבקשות החסומות על האייקון", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} מתוך {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"כבה רמזים צצים", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "צור", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"הצגת הפריט 'חסום אלמנט' בתפריט הלחצן הימני איפה שאפשר", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "בחר", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"ידידותי לעיוורי צבעים", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "צא", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"הפעל אחסון בענן", - "description":"" + "pickerPreview": { + "message": "תצוגה מקדימה", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"אני משתמש מתקדם (נדרש לקרוא<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "מסנני רשת", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"הגדרות מתקדמות", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "מסננים קוסמטיים", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"כבה אחזור מוקדם של משאבים (על מנת למנוע מחיבורים של בקשות רשת חסומות להישלח)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "לחיצה, Ctrl+לחיצה", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"חסום Hyperlink auditing", - "description":"English: " + "pickerContextMenuEntry": { + "message": "חסום אלמנט", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"מנע מ WebRTC להדליף כתובות IP לוקאליות", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "הסתר את המקום שנשאר מחסימה של אלמנטים", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"התנהגות ברירת מחדל", - "description":"" + "settingsIconBadgePrompt": { + "message": "הראה את מספר הבקשות החסומות על האייקון", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"התנהגויות ברירת מחדל אלו יכולות להיקבע עבור כל אתר בנפרד", - "description":"" + "settingsTooltipsPrompt": { + "message": "כבה רמזים צצים", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"כבה מסננים קוסמטיים", - "description":"" + "settingsContextMenuPrompt": { + "message": "הצגת הפריט 'חסום אלמנט' בתפריט הלחצן הימני איפה שאפשר", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"חסום אלמנטי מדיה הגדולים מ {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "ידידותי לעיוורי צבעים", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"חסום פונטים חיצוניים", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "הפעל אחסון בענן", + "description": "" }, - "settingsStorageUsed":{ - "message":"אחסון בשימוש: {{value}} בתים", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "אני משתמש מתקדם (נדרש לקרוא<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"שחזור אחרון:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "הגדרות מתקדמות", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"גיבוי אחרון:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "כבה אחזור מוקדם של משאבים (על מנת למנוע מחיבורים של בקשות רשת חסומות להישלח)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} מסנני רשת + {{cosmeticFilterCount}} מסננים קוסמטיים מתוך:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "חסום Hyperlink auditing", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} בשימוש מתוך {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "מנע מ WebRTC להדליף כתובות IP לוקאליות", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"עדכן אוטומטית את רשימות המסננים.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "התנהגות ברירת מחדל", + "description": "" }, - "3pUpdateNow":{ - "message":"עדכן כעת", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "התנהגויות ברירת מחדל אלו יכולות להיקבע עבור כל אתר בנפרד", + "description": "" }, - "3pPurgeAll":{ - "message":"נקה את כל זיכרוני המטמון", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "כבה מסננים קוסמטיים", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"פרסר ואפשר מסננים קוסמטיים.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "חסום אלמנטי מדיה הגדולים מ {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

הפעלת פיצ'ר זה מעלה את צריכת הזיכרון של uBlock₀<\/i><\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "חסום פונטים חיצוניים", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"התעלם ממסננים קוסמטיים כלליים", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "חסום דיווחי CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

מומלץ לאפשר הגדרה זו במכשירים חלשים יותר.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "אחסון בשימוש: {{value}} בתים", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"רשימה של דומיינים חסומים", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "שחזור אחרון:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"החל שינויים", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "גיבוי אחרון:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"פרסומות", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} מסנני רשת + {{cosmeticFilterCount}} מסננים קוסמטיים מתוך:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"פרטיות", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} בשימוש מתוך {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"דומיינים של תוכנות זדוניות", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "עדכן אוטומטית את רשימות המסננים.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"חברתי", - "description":"English: Social" + "3pUpdateNow": { + "message": "עדכן כעת", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"רב תכליתי", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "נקה את כל זיכרוני המטמון", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"אזורים, שפות", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "פרסר ואפשר מסננים קוסמטיים.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"מותאם אישית", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

הפעלת פיצ'ר זה מעלה את צריכת הזיכרון של uBlock₀<\/i><\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"כתובת אחת בכל שורה. שורות עם קידומת ‘!’ לא יפורשו. כתובות לא חוקיות לא יפורשו ולא תהיה התראה לכך.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "התעלם ממסננים קוסמטיים כלליים", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"לא עדכני.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

מומלץ לאפשר הגדרה זו במכשירים חלשים יותר.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"עדכון אחרון: {{ago}}.\nלחץ על מנת לאלץ עידכון.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "רשימה של דומיינים חסומים", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"מעדכן...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "החל שינויים", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"בעיית רשת מנעה מהמשאב להתעדכן.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "פרסומות", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"מסנן אחד לכל שורה. המסנן יכול להיות דומיין פשוט, או מסנן המותאם ל- Adblock Plus. שורות עם קידומת ‘!’ לא יפורשו.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "פרטיות", + "description": "English: Privacy" }, - "1pImport":{ - "message":"ייבא וצרף", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "דומיינים של תוכנות זדוניות", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"ייצוא", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "מטרדים", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "רב תכליתי", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"החל שינויים", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "אזורים, שפות", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"חוקים קבועים", - "description":"header" + "3pGroupCustom": { + "message": "מותאם אישית", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"חוקים זמניים", - "description":"header" + "3pExternalListsHint": { + "message": "כתובת אחת בכל שורה. שורות עם קידומת ‘!’ לא יפורשו. כתובות לא חוקיות לא יפורשו ולא תהיה התראה לכך.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"החזר למצב הקודם", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "לא עדכני.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"החל", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "עדכון אחרון: {{ago}}.\nלחץ על מנת לאלץ עידכון.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"ערוך", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "מעדכן...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"שמור", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "בעיית רשת מנעה מהמשאב להתעדכן.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"בטל", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "מסנן אחד לכל שורה. המסנן יכול להיות דומיין פשוט, או מסנן המותאם ל- Adblock Plus. שורות עם קידומת ‘!’ לא יפורשו.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"ייבא מקובץ...", - "description":"" + "1pImport": { + "message": "ייבא וצרף", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"ייצא לקובץ...", - "description":"" + "1pExport": { + "message": "ייצוא", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"רשימת חוקי המסננים הדינאמיים שלך.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "החל שינויים", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"סינטקס חוק: פעולה סוג יעד מקור<\/code> (תיעוד מלא<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "חוקים קבועים", + "description": "header" }, - "whitelistPrompt":{ - "message":"הרשומות ברשימה הלבנה מציינות באילו דפי אינטרנט uBlock Origin לא יהיה פעיל. רשומה אחת בכל שורה. רשומות לא חוקיות תתעלמנה בשקט ויסומנו כהערות.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "חוקים זמניים", + "description": "header" }, - "whitelistImport":{ - "message":"ייבא וצרף", - "description":"English: Import and append" + "rulesRevert": { + "message": "החזר למצב הקודם", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"ייצוא", - "description":"English: Export" + "rulesCommit": { + "message": "החל", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "ערוך", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"החל שינויים", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "שמור", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"סוג", - "description":"English: Type" + "rulesEditDiscard": { + "message": "בטל", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"דומיין", - "description":"English: Domain" + "rulesImport": { + "message": "ייבא מקובץ...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"כתובת", - "description":"English: URL" + "rulesExport": { + "message": "ייצא לקובץ...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"מסנן", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"כל הטאבים", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "רשימת חוקי המסננים הדינאמיים שלך.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"מאחורי הקלעים", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "סינטקס חוק: פעולה סוג יעד מקור<\/code> (תיעוד מלא<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"סנן רשומות", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "הרשומות ברשימה הלבנה מציינות באילו דפי אינטרנט uBlock Origin לא יהיה פעיל. רשומה אחת בכל שורה. רשומות לא חוקיות תתעלמנה בשקט ויסומנו כהערות.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"מספר רשומות מקסימליות", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "ייבא וצרף", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"קונטקטס:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "ייצוא", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"סוג:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"סינון URL דינאמי", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "החל שינויים", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"סינון סטאטי", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "סוג", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} בקשות רשת מסוג {{type}} {{br}} שה URL שלהן הוא {{url}} {{br}} ואשר מגיע מהאתר {{origin}},{{br}}{{importance}} קיים כבר מסנן שמתיר להעביר בקשות רשת אלה.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "דומיין", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"חסום", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "כתובת", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"אפשר", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "מסנן", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"מסוג \"{{type}}\"", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "כל הטאבים", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"כל סוג", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "מאחורי הקלעים", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"מתוך \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "סנן רשומות", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"מכל מקום", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "מספר רשומות מקסימליות", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"אך לא כאשר", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "קונטקטס:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"גם אם", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "סוג:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"המסנן הסטאטי {{filter}} נמצא ב:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "סינון URL דינאמי", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"רשימת שינויים", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "סינון סטאטי", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"ויקי", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} בקשות רשת מסוג {{type}} {{br}} שה URL שלהן הוא {{url}} {{br}} ואשר מגיע מהאתר {{origin}},{{br}}{{importance}} קיים כבר מסנן שמתיר להעביר בקשות רשת אלה.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"תמיכה", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "חסום", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"קוד מקור (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "אפשר", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"תורמים", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "מסוג \"{{type}}\"", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"גבה לקובץ", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "כל סוג", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "מתוך \"{{origin}}\"", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"שחזר מקובץ...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "מכל מקום", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"אפס להגדרות ברירת מחדל...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "אך לא כאשר", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"כל ההגדרות שלך יוחלפו בנתונים שגובו ב {{time}}, ו uBlock₀ יופעל מחדש.\n\nהאם להחליף את כל ההגדרות הקיימות בנתונים המגובים?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "גם אם", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"לא הוצלח לקרוא את המידע או שהוא פגום", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "המסנן הסטאטי {{filter}} נמצא ב:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"כל ההגדרות שלך יימחקו, ו uBlock₀ יופעל מחדש.\n\nלאפס את uBlock₀ להגדרות ברירת מחדל?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "רשימת שינויים", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"בעיית רשת: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "ויקי", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: הוסף את הכתובת הבאה לרשימת הפילטרים המותאמים אישית שלך?\n\nכותרת: \"{{title}}\"\nכתובת URL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "תמיכה", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"לפני דקה", - "description":"English: a minute ago" + "aboutCode": { + "message": "קוד מקור (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"לפני {{value}} דקות", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "תורמים", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"לפני שעה", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "גבה לקובץ", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"לפני {{value}} שעות", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"לפני יום", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "שחזר מקובץ...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"לפני {{value}} ימים", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "אפס להגדרות ברירת מחדל...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"הצג את פאנל הקונפיגורציות", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "כל ההגדרות שלך יוחלפו בנתונים שגובו ב {{time}}, ו uBlock₀ יופעל מחדש.\n\nהאם להחליף את כל ההגדרות הקיימות בנתונים המגובים?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"הצג את המתעד", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "לא הוצלח לקרוא את המידע או שהוא פגום", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"מכובה", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "כל ההגדרות שלך יימחקו, ו uBlock₀ יופעל מחדש.\n\nלאפס את uBlock₀ להגדרות ברירת מחדל?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin מנע מהעמוד הבא להיטען:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "בעיית רשת: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"בגלל המסנן הבא", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: הוסף את הכתובת הבאה לרשימת הפילטרים המותאמים אישית שלך?\n\nכותרת: \"{{title}}\"\nכתובת URL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"ללא פרמטרים", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "לפני דקה", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"נמצא ב:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "לפני {{value}} דקות", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"חזור אחורה", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "לפני שעה", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"סגור חלון זה", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "לפני {{value}} שעות", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"בטל חסימה נוקשה עבור {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "לפני יום", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"זמנית", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "לפני {{value}} ימים", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"לצמיתות", - "description":"English: Permanently" + "showDashboardButton": { + "message": "הצג את פאנל הקונפיגורציות", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"ייצא לאחסון ענן", - "description":"tooltip" + "showNetworkLogButton": { + "message": "הצג את המתעד", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"ייבא מאחסון ענן", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "מכובה", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"ייבא מהגיבוי בענן ומזג עם ההגדרות הקיימות", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin מנע מהעמוד הבא להיטען:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "בגלל המסנן הבא", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"שם המכשיר:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "ללא פרמטרים", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"אזהרה! שינוי הגדרות אלו על אחריותך בלבד.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "נמצא ב:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"שלח", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "חזור אחורה", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"החל שינויים", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "סגור חלון זה", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"החזר למצב הקודם", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "בטל חסימה נוקשה עבור {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"בתים", - "description":"" + "docblockedDisableTemporary": { + "message": "זמנית", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"זמנית אפשר אלמנטי מדיה גדולים", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "לצמיתות", + "description": "English: Permanently" }, - "dummy":{ - "message":"ערך זה חייב להיות האחרון", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "ייצא לאחסון ענן", + "description": "tooltip" + }, + "cloudPull": { + "message": "ייבא מאחסון ענן", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "ייבא מהגיבוי בענן ומזג עם ההגדרות הקיימות", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "שם המכשיר:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "אזהרה! שינוי הגדרות אלו על אחריותך בלבד.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "שלח", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "החל שינויים", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "החזר למצב הקודם", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "בתים", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "זמנית אפשר אלמנטי מדיה גדולים", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "ערך זה חייב להיות האחרון", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/hi/messages.json b/src/_locales/hi/messages.json index 7933b27faea20..9f02e4d59c2bc 100644 --- a/src/_locales/hi/messages.json +++ b/src/_locales/hi/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"आख़िरकार, क्रोमियम-बेस्ड ब्राउज़रों के लिए एक कुशल अवरोधक। CPU और स्मृति पर आसान।", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "आख़िरकार, क्रोमियम-बेस्ड ब्राउज़रों के लिए एक कुशल अवरोधक। CPU और स्मृति पर आसान।", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — डैशबोर्ड", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — डैशबोर्ड", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"सेटिंग्स", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "सेटिंग्स", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"तृतीय-पक्ष फ़िल्टर", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "तृतीय-पक्ष फ़िल्टर", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"मेरे फिल्टर", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "मेरे फिल्टर", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"मेरे नियम", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "मेरे नियम", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"सफेद सूची", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "सफेद सूची", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"यूब्लॉक — नेटवर्क रिक्वेस्ट लॉग", - "description":"Title for the logger window" + "statsPageName": { + "message": "यूब्लॉक — नेटवर्क रिक्वेस्ट लॉग", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"जानकारी", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "जानकारी", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"उन्नत सेटिंग्स", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "उन्नत सेटिंग्स", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"दबाए : uBlock को इस साईट में बंद\/चालु करने के लिए।\n\nCtrl के साथ दबाए : uBlock को सिर्फ इस पेज में बंद करने के लिए।", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "दबाए : uBlock को इस साईट में बंद\/चालु करने के लिए।\n\nCtrl के साथ दबाए : uBlock को सिर्फ इस पेज में बंद करने के लिए।", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"रुके हुए अनुरोध", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"इस पृष्ठ पर", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} या {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "रुके हुए अनुरोध", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"इंस्टॉल से अब तक", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "इस पृष्ठ पर", + "description": "English: on this page" }, - "popupOr":{ - "message":"या", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} या {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"डैशबोर्ड को खोलने के लिए क्लिक करें", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "इंस्टॉल से अब तक", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "या", + "description": "English: or" }, - "popupTipPicker":{ - "message":"अन्श चाटने वाले साधन में प्रवेश करे", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "डैशबोर्ड को खोलने के लिए क्लिक करें", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"अनुरोध दैनिकी में जाए", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"इस साईट के लिए कोई पॉपअप नहीं", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "अन्श चाटने वाले साधन में प्रवेश करे", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"बड़े मीडिया चीजों को रोक दें", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "अनुरोध दैनिकी में जाए", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"इस वेबसाइट की खूबसूरत फ़िल्टरिंग करें", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "इस साईट के लिए कोई पॉपअप नहीं", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"बाहरी फ़ॉन्ट्स को ब्लॉक करें", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"निन्मलिखित नियमें सब वेस्बिते पर लागू है", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"निन्मलिखित नियमें सिर्फ इस वेबसाइट पर लागू है", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "बड़े मीडिया चीजों को रोक दें", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"आपके परिवर्तनों को रकने के लिए क्लिक करें", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"आपके परिवर्तनों को उलटने के लिए क्लिक करें", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"सभी", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "इस वेबसाइट की खूबसूरत फ़िल्टरिंग करें", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"चित्र", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"तृतीय-पक्ष", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"तृतीया पक्ष सीइसइस तस्वीरें", - "description":"" + "popupTipNoRemoteFonts": { + "message": "बाहरी फ़ॉन्ट्स को ब्लॉक करें", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"लाइन के बीच वाले स्क्रिप्ट्स", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"असली साइट के स्क्रिप्ट्स", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"दूसरी साइट के स्क्रिप्ट्स", - "description":"" + "popupTipGlobalRules": { + "message": "निन्मलिखित नियमें सब वेस्बिते पर लागू है", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"दूसरी साइट के फ्रेम्स", - "description":"" + "popupTipLocalRules": { + "message": "निन्मलिखित नियमें सिर्फ इस वेबसाइट पर लागू है", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"योजित साइटें", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "आपके परिवर्तनों को रकने के लिए क्लिक करें", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{total}} मे से {{count}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "आपके परिवर्तनों को उलटने के लिए क्लिक करें", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"बनाएँ", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "सभी", + "description": "" }, - "pickerPick":{ - "message":"चयन", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "चित्र", + "description": "" }, - "pickerQuit":{ - "message":"बंद करें", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "तृतीय-पक्ष", + "description": "" }, - "pickerPreview":{ - "message":"Preview", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "तृतीया पक्ष सीइसइस तस्वीरें", + "description": "" }, - "pickerNetFilters":{ - "message":"नेट फिलटर्स", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "लाइन के बीच वाले स्क्रिप्ट्स", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"सुंदरता के लिए फिलटरें", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "असली साइट के स्क्रिप्ट्स", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"क्लिक, कंट्रोल - क्लिक", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "दूसरी साइट के स्क्रिप्ट्स", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"इस को ब्लॉक करो", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "दूसरी साइट के फ्रेम्स", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"ब्लॉक किये चीज़ो की प्लेसहोल्डर को हटाओ", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "योजित साइटें", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"इसके आइकॉन पर ब्लॉक किये चीज़ो की गिनती दिखाओ", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{total}} मे से {{count}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"टूलटिप्स मत दिखाओ", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "बनाएँ", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"विकल्प सूचि का प्रयोग करें", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "चयन", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"वरणांध अनुकूल", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "बंद करें", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"क्लाउड स्टोरिज समर्थन साझा करें", - "description":"" + "pickerPreview": { + "message": "पूर्वावलोकन", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"मैं एक उच्च उपयोगकर्ता हूँ (आवश्यक पठन<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "नेट फिलटर्स", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"advanced settings", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "सुंदरता के लिए फिलटरें", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"प्री-फ़ेचिंग अक्षम करें (अवरुद्ध नेटवर्क रिक्वेस्ट को रोकने के लिए)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "क्लिक, कंट्रोल - क्लिक", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"हाइपरलिंक जाँच को अवरुध करें", - "description":"English: " + "pickerContextMenuEntry": { + "message": "इस को ब्लॉक करो", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"WebRTC को लोकल IP ऐड्रेस प्रकट करने से रोकें", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "ब्लॉक किये चीज़ो की प्लेसहोल्डर को हटाओ", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"सामान्य व्यवहार", - "description":"" + "settingsIconBadgePrompt": { + "message": "इसके आइकॉन पर ब्लॉक किये चीज़ो की गिनती दिखाओ", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"ये सामान्य व्यवहारों को प्रति-पृष्ठ आधार पर बदला जा सकता है", - "description":"" + "settingsTooltipsPrompt": { + "message": "टूलटिप्स मत दिखाओ", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"काज़्मेटिक निस्पंदन को रोकें", - "description":"" + "settingsContextMenuPrompt": { + "message": "विकल्प सूचि का प्रयोग करें", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} kB से ज़्यादा अंश को रोकें", - "description":"" + "settingsColorBlindPrompt": { + "message": "वरणांध अनुकूल", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"बाहरी अक्षराकृति को रोकें", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "क्लाउड स्टोरिज समर्थन साझा करें", + "description": "" }, - "settingsStorageUsed":{ - "message":"Storage used: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "मैं एक उच्च उपयोगकर्ता हूँ (आवश्यक पठन<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Last restore:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "उन्नत सेटिंग्स", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"पिछला बेकप", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "प्री-फ़ेचिंग अक्षम करें (अवरुद्ध नेटवर्क रिक्वेस्ट को रोकने के लिए)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "हाइपरलिंक जाँच को अवरुध करें", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}} में से {{used}} का इस्तेमाल किया", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC को लोकल IP ऐड्रेस प्रकट करने से रोकें", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Auto-update filter lists", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "सामान्य व्यवहार", + "description": "" }, - "3pUpdateNow":{ - "message":"अभी अपडेट करें", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "ये सामान्य व्यवहारों को प्रति-पृष्ठ आधार पर बदला जा सकता है", + "description": "" }, - "3pPurgeAll":{ - "message":"Purge all caches", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "काज़्मेटिक निस्पंदन को रोकें", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Parse and enforce cosmetic filters", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "{{input:number}} kB से ज़्यादा अंश को रोकें", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "बाहरी अक्षराकृति को रोकें", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Storage used: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Last restore:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"परिवर्तन लागू करें", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "पिछला बेकप", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"विज्ञापन", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"गोपनीयता", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} में से {{used}} का इस्तेमाल किया", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"मैलवेयर डोमेन", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "स्व-अद्यतन फ़िल्टर सूचियां", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"सामाजिक", - "description":"English: Social" + "3pUpdateNow": { + "message": "अभी अपडेट करें", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"बहुउद्देशीय", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"क्षेत्र, भाषा", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"कस्टम", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"पुरानी", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Last update: {{ago}}.\nClick to force an update.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Updating...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "परिवर्तन लागू करें", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"A network error prevented the resource from being updated.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "विज्ञापन", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "गोपनीयता", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Import and append", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "मैलवेयर डोमेन", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"निर्यात करें", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "बहुउद्देशीय", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"परिवर्तन लागू करें", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "क्षेत्र, भाषा", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"स्थायी नियम", - "description":"header" + "3pGroupCustom": { + "message": "कस्टम", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"अस्थायी नियम", - "description":"header" + "3pExternalListsHint": { + "message": "One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"पलटदे", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "पुरानी", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"पक्का करो", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"एडिट", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Updating...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"सहेजें", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"रद्द करें", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Import from file...", - "description":"" + "1pImport": { + "message": "Import and append", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Export to file", - "description":"" + "1pExport": { + "message": "निर्यात करें", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"List of your dynamic filtering rules.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "परिवर्तन लागू करें", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "स्थायी नियम", + "description": "header" }, - "whitelistPrompt":{ - "message":"The whitelist directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "अस्थायी नियम", + "description": "header" }, - "whitelistImport":{ - "message":"Import and append", - "description":"English: Import and append" + "rulesRevert": { + "message": "पलटदे", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"निर्यात करें", - "description":"English: Export" + "rulesCommit": { + "message": "पक्का करो", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "एडिट", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"परिवर्तन लागू करें", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "सहेजें", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"प्रकार", - "description":"English: Type" + "rulesEditDiscard": { + "message": "रद्द करें", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"डोमेन", - "description":"English: Domain" + "rulesImport": { + "message": "Import from file...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"यू आर एल", - "description":"English: URL" + "rulesExport": { + "message": "Export to file", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"फिल्टर", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"सब", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"पर्दे के पीछे", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Rule syntax: source destination type action<\/code> (full documentation<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filter log entries", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "The whitelist directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maximum number of log entries", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Import and append", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "निर्यात करें", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"प्रकार", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamic URL filtering", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "परिवर्तन लागू करें", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"स्थायी छनाना", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "प्रकार", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "डोमेन", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"रोको", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "यू आर एल", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"छोडो", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "फिल्टर", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "सब", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"हर टइप", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "पर्दे के पीछे", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"from “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filter log entries", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"कहि से भी", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maximum number of log entries", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"except when", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"even if", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "प्रकार", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamic URL filtering", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Change log", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "स्थायी छनाना", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"विकी", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"मदद", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "रोको", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Source code (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "छोडो", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"योगदानकर्ता", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Back up to file", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "हर टइप", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"फाइल से वापस करो", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "कहि से भी", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Reset to default settings...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Change log", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Network error: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "विकी", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "मदद", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"एक मिनट पहले", - "description":"English: a minute ago" + "aboutCode": { + "message": "Source code (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} मिनट पहले", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "योगदानकर्ता", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"एक घंटे पहले", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Back up to file", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} घंटे पहले", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"एक दिन पहले", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "फाइल से वापस करो", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} दिन पहले", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Reset to default settings...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Show Dashboard", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Show Logger", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"off", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Network error: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Because of the following filter", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"without parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "एक मिनट पहले", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Found in:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} मिनट पहले", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Go back", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "एक घंटे पहले", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Close this window", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} घंटे पहले", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Disable strict blocking for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "एक दिन पहले", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporarily", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} दिन पहले", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"हमेशा", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Export to cloud storage", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Import from cloud storage", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Import from cloud storage and merge with current settings", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Because of the following filter", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"This device name:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warning! Change these advanced settings at your own risk.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Found in:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"पक्का", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Go back", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Apply changes", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Close this window", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"पलटदे", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"बाइट्स", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporarily", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Temporarily allow large media elements", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "हमेशा", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "This device name:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "पक्का", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "पलटदे", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "बाइट्स", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/hr/messages.json b/src/_locales/hr/messages.json index 08444def68b68..b09cc5867c810 100644 --- a/src/_locales/hr/messages.json +++ b/src/_locales/hr/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Konačno, efikasan blokator. Lak na CPU i memoriji.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Konačno, efikasan blokator. Lak na CPU i memoriji.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Nadzorna ploča", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Nadzorna ploča", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Postavke", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Postavke", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filteri treće strane", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filteri treće strane", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Moji filteri", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Moji filteri", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Moja pravila", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Moja pravila", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Popis dopuštenih", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Popis dopuštenih", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Zapisnik mrežnih zahtjeva", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Zapisnik mrežnih zahtjeva", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"O programu", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "O programu", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Napredne postavke", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Napredne postavke", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klik: trajno onemogućiti\/omogućiti uBlock₀ za ovaj sajt.\n\nCtrl+klik: onemogućiti µBlock₀ samo za ovu stranicu.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klik: trajno onemogućiti\/omogućiti uBlock₀ za ovaj sajt.\n\nCtrl+klik: onemogućiti µBlock₀ samo za ovu stranicu.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"zahtjeva blokirano", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Kliknite za onemogućiti uBlock₀ za ovaj sajt.\n\nCtrl+klik za onemogućiti uBlock₀ samo za ovu stranicu.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"na ovoj stranici", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Kliknite za omogućiti uBlock₀ za ovaj sajt.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} ili {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "zahtjeva blokirano", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"od instalacije", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "na ovoj stranici", + "description": "English: on this page" }, - "popupOr":{ - "message":"ili", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} ili {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Kliknite za otvaranje upravljačke ploče", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "od instalacije", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Pokrenite odabir elementa za blokiranje", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "ili", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Pokrenite odabir elementa", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Otvori upravljačku ploču", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Odlazak na zapisnik zahtjeva", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Pokrenite odabir elementa za blokiranje", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Uključi\/isključi skočne prozore na ovoj stranici", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Pokrenite odabir elementa", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Namjestite blokiranje velikih medijskih elemenata za ovaj sajt", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Odlazak na zapisnik zahtjeva", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Uključi\/isključi estestko filtriranje na ovoj stranici", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Uključi\/isključi skočne prozore na ovoj stranici", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Uključi\/isključi blokiranje udaljenih fontova za ovu stranicu", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Kliknite za blokiranje svih pop-up prozora na ovom sajtu", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globalna pravila: ovaj stupac je za pravila koja vrijede za sve stranice.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Kliknite za ukloniti blokiranje svih pop-up prozora na ovom sajtu", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokalna pravila: ovaj stupac je za pravila koja vrijede samo za trenutnu stranicu.\nLokalna pravila nadjačavaju globalna pravila.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Namjestite blokiranje velikih medijskih elemenata za ovaj sajt", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Kliknite kako biste spremili promjene.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Kliknite za blokiranje velikih medijskih elemenata na ovom sajtu", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Kliknite kako bi vratili promjene.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Kliknite za ukloniti blokiranje velikih medijskih elemenata na ovom sajtu", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"sve", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Uključi\/isključi estestko filtriranje na ovoj stranici", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"slike", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Kliknite kako biste onemogućili estestko filtriranje na ovom sajtu", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"treće strane", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Kliknite kako biste omogućili estestko filtriranje na ovom sajtu", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/slike trećih strana", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Uključi\/isključi blokiranje udaljenih fontova za ovu stranicu", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"skripte u liniji", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Kliknite za blokiranje udaljenih fontova na ovom sajtu", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Skripte prve strane", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Kliknite za ukloniti blokiranje udaljenih fontova na ovom sajtu", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"Skripte trećih strana", - "description":"" + "popupTipGlobalRules": { + "message": "Globalna pravila: ovaj stupac je za pravila koja vrijede za sve stranice.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Okviri trećih strana", - "description":"" + "popupTipLocalRules": { + "message": "Lokalna pravila: ovaj stupac je za pravila koja vrijede samo za trenutnu stranicu.\nLokalna pravila nadjačavaju globalna pravila.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domena povezan", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Kliknite kako biste spremili promjene.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} od {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Kliknite kako bi vratili promjene.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Stvaranje", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "sve", + "description": "" }, - "pickerPick":{ - "message":"Odabir", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "slike", + "description": "" }, - "pickerQuit":{ - "message":"Izlaz", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "treće strane", + "description": "" }, - "pickerPreview":{ - "message":"Pregled", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "CSS\/slike trećih strana", + "description": "" }, - "pickerNetFilters":{ - "message":"Mrežni filteri", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "skripte u liniji", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Estetski filteri", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Skripte prve strane", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "Skripte trećih strana", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blokiraj element", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Okviri trećih strana", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Sakrij rezervirana mjesta blokiranih elemenata", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domena povezan", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Pokaži broj blokiranih zahtjeva na ikoni", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} od {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Isključi naputke", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Stvaranje", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Koristite kontekstni izbornik gdje je prikladno", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Odabir", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Ugodan za daltoniste", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Izlaz", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Omogući podršku za pohranu u oblaku", - "description":"" + "pickerPreview": { + "message": "Pregled", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Ja sam napredni korisnik (obavezna literatura<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Mrežni filteri", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"napredne postavke", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Estetski filteri", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Onemogući pretpreuzimanje (za sprečavanje bilo koje veze blokiranih mrežnih zahtjeva)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Onemogući provjeravanje hiperlinkova", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blokiraj element", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Spriječi WebRTC da propušta lokalnu IP adresu", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Sakrij rezervirana mjesta blokiranih elemenata", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Zadano ponašanje", - "description":"" + "settingsIconBadgePrompt": { + "message": "Pokaži broj blokiranih zahtjeva na ikoni", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Ova zadana ponašanja mogu biti poništena na bazi web-stranice", - "description":"" + "settingsTooltipsPrompt": { + "message": "Isključi naputke", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Onemogući estesko filtriranje", - "description":"" + "settingsContextMenuPrompt": { + "message": "Koristite kontekstni izbornik gdje je prikladno", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokiraj medijske elemente veće od {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Ugodan za daltoniste", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokiraj udaljene fontove", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Omogući podršku za pohranu u oblaku", + "description": "" }, - "settingsStorageUsed":{ - "message":"Korišteno prostora: {{value}} bajtova", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Ja sam napredni korisnik (obavezna literatura<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Posljednji povratak na prijašnje:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "napredne postavke", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Posljednja sigurnosna kopija:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Onemogući pretpreuzimanje (za sprečavanje bilo koje veze blokiranih mrežnih zahtjeva)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} mrežni\/ih filter\/a + {{cosmeticFilterCount}} estetski\/ih filter\/a iz:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Onemogući provjeravanje hiperlinkova", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} korišteno od {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Spriječi WebRTC da propušta lokalnu IP adresu", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Automatsko ažuriranje popisa filtera.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Zadano ponašanje", + "description": "" }, - "3pUpdateNow":{ - "message":"Ažuriraj odmah", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Ova zadana ponašanja mogu biti poništena na bazi web-stranice", + "description": "" }, - "3pPurgeAll":{ - "message":"Očistiti sve cache-ove", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Onemogući estesko filtriranje", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Raščlaniti i primijeniti estetske filtre.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blokiraj medijske elemente veće od {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Omogućavanje ove značajke povećava uBlock₀ <\/i>memorijski otisak.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blokiraj udaljene fontove", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignoriraj opće estetsko filtriranje.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Blokiraj CSP izvješća", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Preporučeno je omogućiti ovu postavku na slabijim uređajima.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Korišteno prostora: {{value}} bajtova", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Popis blokiranih hosts", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Posljednji povratak na prijašnje:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Primijeni promjene", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Posljednja sigurnosna kopija:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklame", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} mrežni\/ih filter\/a + {{cosmeticFilterCount}} estetski\/ih filter\/a iz:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privatnost", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} korišteno od {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Zloćudne domene", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Automatsko ažuriranje popisa filtera.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Socijalno", - "description":"English: Social" + "3pUpdateNow": { + "message": "Ažuriraj odmah", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Višenamjensko", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Očistiti sve cache-ove", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regije, jezici", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Raščlaniti i primijeniti estetske filtre.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Prilagođeno", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Omogućavanje ove značajke povećava uBlock₀ <\/i>memorijski otisak.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Jedan URL po retku. Linije sa prefiksom ‘!’ zanemarit će se. Nevaljani URL-ovi će biti tiho ignorirani.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignoriraj opće estetsko filtriranje.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Zastarjelo.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Preporučeno je omogućiti ovu postavku na slabijim uređajima.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Posljednje ažuriranje: {{ago}}.\nKliknite za ažuriranje.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Popis blokiranih hosts", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Ažuriranje u tijeku...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Primijeni promjene", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Mrežna pogreška je sprječila ažuriranje resursa.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklame", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Jedan filtar po retku. Filtar može biti običan hostname ili filter kompatibilan sa Adblock Plus-om. Linije sa prefiksom ‘!’ zanemarit će se.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privatnost", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Uvesti i dodati", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Zloćudne domene", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Izvoz", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Nametljivost", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"moji-ublock-staticni-filteri_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Višenamjensko", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Primijeni promjene", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regije, jezici", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Trajna pravila", - "description":"header" + "3pGroupCustom": { + "message": "Prilagođeno", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Privremena pravila", - "description":"header" + "3pExternalListsHint": { + "message": "Jedan URL po retku. Linije sa prefiksom ‘!’ zanemarit će se. Nevaljani URL-ovi će biti tiho ignorirani.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Vratiti", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Zastarjelo.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Izvršiti", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Posljednje ažuriranje: {{ago}}.\nKliknite za ažuriranje.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Uredi", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Ažuriranje u tijeku...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Spremi", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Mrežna pogreška je sprječila ažuriranje resursa.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Odbaci", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Jedan filtar po retku. Filtar može biti običan hostname ili filter kompatibilan sa Adblock Plus-om. Linije sa prefiksom ‘!’ zanemarit će se.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Uvoz iz datoteke...", - "description":"" + "1pImport": { + "message": "Uvesti i dodati", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Izvoz u datoteku...", - "description":"" + "1pExport": { + "message": "Izvoz", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"moja-ublock-dinamicna-pravila_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "moji-ublock-staticni-filteri_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Popis dinamičkih pravila filtriranja.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Primijeni promjene", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Pravila sintakse: akcija tipa izvornog odredišta<\/code> (sva dokumentacija<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Trajna pravila", + "description": "header" }, - "whitelistPrompt":{ - "message":"Popis host naziva za koje će uBlock Origin biti onemogućen. Jedan zapis po retku. Nevaljani host nazivi biti će tiho ignorirani.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Privremena pravila", + "description": "header" }, - "whitelistImport":{ - "message":"Uvesti i dodati", - "description":"English: Import and append" + "rulesRevert": { + "message": "Vratiti", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Izvoz", - "description":"English: Export" + "rulesCommit": { + "message": "Izvršiti", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"moja-ublock-lista_dopustenog_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Uredi", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Primijeni promjene", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Spremi", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tip", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Odbaci", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domena", - "description":"English: Domain" + "rulesImport": { + "message": "Uvoz iz datoteke...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Izvoz u datoteku...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "moja-ublock-dinamicna-pravila_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Sve", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Popis dinamičkih pravila filtriranja.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Iza scene", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Pravila sintakse: akcija tipa izvornog odredišta<\/code> (sva dokumentacija<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtrirajte zabilješke", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Popis host naziva za koje će uBlock Origin biti onemogućen. Jedan zapis po retku. Nevaljani host nazivi biti će tiho ignorirani.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Makismalan broj zabilješki", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Uvesti i dodati", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Izvoz", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tip:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "moja-ublock-lista_dopustenog_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dinamično URL filtriranje", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Primijeni promjene", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statičko filtriranje", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tip", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} mrežni zahtjev {{type}} {{br}}kojem URL adresa odgovora {{url}} {{br}}i koji dolazi od {{origin}},{{br}}{{importance}} postoji odgovarajući filter izuzetak.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domena", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokiraj", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Dopusti", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tip “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Sve", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"i tip", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Iza scene", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"od “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtrirajte zabilješke", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"bilo gdje", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Makismalan broj zabilješki", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"osim kad", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"čak i ako", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tip:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statični filter {{filter}} pronađen u:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dinamično URL filtriranje", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Popis promjena", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statičko filtriranje", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} mrežni zahtjev {{type}} {{br}}kojem URL adresa odgovora {{url}} {{br}}i koji dolazi od {{origin}},{{br}}{{importance}} postoji odgovarajući filter izuzetak.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Podrška", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokiraj", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Izvorni kôd (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Dopusti", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Suradnici", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tip “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Sigurnosno kopiranje u datoteku...", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "i tip", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"moja-ublock-sig_kopija_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "od “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Vraćanje iz datoteke...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "bilo gdje", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Vraćanje izvornih zadanih postavki...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "osim kad", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Sve vaše postavke prebrisat će se sa postavkama spremljenim {{time}}, i uBlock₀ će se ponovno pokrenuti. \n\nPrepisati sve postojeće postavke pomoću sigurnosne kopije postavki?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "čak i ako", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Podatke nije moguće učitati ili su neispravni", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statični filter {{filter}} pronađen u:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Sve vaše postavke će biti obrisane i µBlock₀ će se ponovno pokrenuti. \n\nVraćanje µBlock₀ tvorničkih postavki?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Popis promjena", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Mrežna greška {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Dodajte slijedeći izvor u vaš izbor filter lista?\n\nNaslov: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Podrška", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"prije minutu", - "description":"English: a minute ago" + "aboutCode": { + "message": "Izvorni kôd (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"prije {{value}} minute\/a", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Suradnici", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"prije jedan sat", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Sigurnosno kopiranje u datoteku...", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"prije {{value}} sata\/i", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "moja-ublock-sig_kopija_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"prije jedan dan", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Vraćanje iz datoteke...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"prije {{value}} dana", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Vraćanje izvornih zadanih postavki...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Prikaži kontrolnu ploču", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Sve vaše postavke prebrisat će se sa postavkama spremljenim {{time}}, i uBlock₀ će se ponovno pokrenuti. \n\nPrepisati sve postojeće postavke pomoću sigurnosne kopije postavki?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Prikaži zapis mrežnih zahtjeva", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Podatke nije moguće učitati ili su neispravni", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"isključen", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Sve vaše postavke će biti obrisane i µBlock₀ će se ponovno pokrenuti. \n\nVraćanje µBlock₀ tvorničkih postavki?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin je onemogućio učitavanje sljedeće stranice:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Mrežna greška {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Zbog sljedećeg filtera", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Dodajte slijedeći izvor u vaš izbor filter lista?\n\nNaslov: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"bez parametara", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "prije minutu", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Pronađeno u:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "prije {{value}} minute\/a", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Natrag", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "prije jedan sat", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Zatvori ovaj prozor", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "prije {{value}} sata\/i", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Isključi strogo blokiranje za {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "prije jedan dan", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Privremeno", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "prije {{value}} dana", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Trajno", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Prikaži kontrolnu ploču", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Izvezi u pohranu u oblaku", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Prikaži zapis mrežnih zahtjeva", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Uvezi iz pohrane u oblaku", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "isključen", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Uvezite iz spremišta u oblaku i spojite sa trenutnim postavkama", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin je onemogućio učitavanje sljedeće stranice:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Zbog sljedećeg filtera", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Naziv ovog uređaja:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "bez parametara", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Upozorenje! Mijenjate ove napredne postavke na vlastitu odgovornost.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Pronađeno u:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Pošalji", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Natrag", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Primijeni promjene", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Zatvori ovaj prozor", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Vratiti", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Isključi strogo blokiranje za {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bajtovi", - "description":"" + "docblockedDisableTemporary": { + "message": "Privremeno", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Privremeno dopusti velike medijske elemente", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Trajno", + "description": "English: Permanently" }, - "dummy":{ - "message":"Ova stavka mora biti posljednja", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Izvezi u pohranu u oblaku", + "description": "tooltip" + }, + "cloudPull": { + "message": "Uvezi iz pohrane u oblaku", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Uvezite iz spremišta u oblaku i spojite sa trenutnim postavkama", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Naziv ovog uređaja:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Upozorenje! Mijenjate ove napredne postavke na vlastitu odgovornost.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Pošalji", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Primijeni promjene", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Vratiti", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajtovi", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Privremeno dopusti velike medijske elemente", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Ova stavka mora biti posljednja", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/hu/messages.json b/src/_locales/hu/messages.json index 3e0bf95cd6654..71551b31babb2 100644 --- a/src/_locales/hu/messages.json +++ b/src/_locales/hu/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Végre egy hatékony reklám- és követésblokkoló böngészőkhöz, amely kíméletes a processzorral és a memóriával.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Végre egy hatékony reklám- és követésblokkoló böngészőkhöz, amely kíméletes a processzorral és a memóriával.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Vezérlőpult", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Vezérlőpult", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Beállítások", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Beállítások", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Külső szűrők", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Külső szűrők", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Saját szűrők", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Saját szűrők", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Saját szabályok", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Saját szabályok", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Kivételek", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Kivételek", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Hálózati lekérések naplója", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Hálózati lekérések naplója", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Névjegy", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Névjegy", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Haladó beállítások", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Haladó beállítások", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klikk: uBlock₀ tiltása\/engedélyezése ezen a webhelyen.\n\nCtrl+klikk: csak a jelenlegi oldal tiltása\/engedélyezése.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klikk: uBlock₀ tiltása\/engedélyezése ezen a webhelyen.\n\nCtrl+klikk: csak a jelenlegi oldal tiltása\/engedélyezése.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"blokkolt lekérések", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Kattints a uBlock₀ letiltásához ezen a webhelyen.\n\nCtrl+kattintás a uBlock₀ letiltásához csak a jelenlegi oldalon.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"ezen a lapon", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Klikk a uBlock₀ engedélyezéséhez ezen a webhelyen.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} vagy {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "blokkolt lekérések", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"telepítés óta", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "ezen a lapon", + "description": "English: on this page" }, - "popupOr":{ - "message":"vagy", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} vagy {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Kattintson ide a vezérlőpult megnyitásához", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "telepítés óta", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Elemváltó mód aktiválása", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "vagy", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Elemválasztó mód aktiválása", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Vezérlőpult megnyitása", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Naplózott lekérések megtekintése", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Belépés az elemeltávolító módba", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Oldal összes felugró ablakának blokkolása\/engedélyezése", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Elemválasztó mód aktiválása", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Nagyméretű média elemek blokkolásának ki\/bekapcsolása", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Naplózott lekérések megtekintése", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Kozmetikai szűrés ki- és bekapcsolása ezen a weboldalon", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Oldal összes felugró ablakának blokkolása\/engedélyezése", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Távoli betűkészletek blokkolásának ki\/bekapcsolása ezen az oldalon", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Kattints az összes előugró ablak letiltásához ezen a webhelyen", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globális szabályok: ebben az oszlopban azok a szabályok vannak, amelyek minden weboldalra vonatkoznak.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Kattints az összes előugró ablak blokkolásának visszavonásához ezen a webhelyen", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokális szabályok: ebben az oszlopban azok a szabályok vannak, amelyek csak a jelenlegi weboldalra vonatkoznak.\nA lokális szabályok felülírják a globális szabályokat.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Nagyméretű média elemek blokkolásának ki\/bekapcsolása", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Kattintson a módosítások véglegesítéséhez.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Kattints a nagyméretű médiaelemek blokkolásához ezen a webhelyen", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Kattintson ide a módosítások visszavonásához.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Kattints a nagyméretű médiaelemek blokkolásának visszavonásához ezen a webhelyen", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"minden", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Kozmetikai szűrés ki- és bekapcsolása ezen a weboldalon", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"képek", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Kattints a kozmetikai szűrés kikapcsolásához ezen a webhelyen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"külső féltől", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Kattints a kozmetikai szűrés bekapcsolásához ezen a webhelyen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"3rd-party css\/képek", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Távoli betűkészletek blokkolásának ki\/bekapcsolása ezen az oldalon", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scriptek", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Kattints a távoli fontok blokkolásához ezen a webhelyen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"1st-party scriptek", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Kattints a távoli fontok blokkolásának visszavonásához ezen a webhelyen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"3rd-party scriptek", - "description":"" + "popupTipGlobalRules": { + "message": "Globális szabályok: ebben az oszlopban azok a szabályok vannak, amelyek minden weboldalra vonatkoznak.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"3rd-party frame-ek", - "description":"" + "popupTipLocalRules": { + "message": "Lokális szabályok: ebben az oszlopban azok a szabályok vannak, amelyek csak a jelenlegi weboldalra vonatkoznak.\nA lokális szabályok felülírják a globális szabályokat.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domain csatlakozik", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Kattintson a módosítások véglegesítéséhez.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}}, összesen: {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Kattintson ide a módosítások visszavonásához.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Létrehoz", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "minden", + "description": "" }, - "pickerPick":{ - "message":"Választ", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "képek", + "description": "" }, - "pickerQuit":{ - "message":"Kilép", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "külső féltől", + "description": "" }, - "pickerPreview":{ - "message":"Előnézet", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "3rd-party css\/képek", + "description": "" }, - "pickerNetFilters":{ - "message":"Hálózati szűrők", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "inline scriptek", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kozmetikai szűrők", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "1st-party scriptek", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klikk, Ctrl-klikk", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "3rd-party scriptek", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Elem blokkolása", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "3rd-party frame-ek", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Blokkolt elemek helyőrzőinek elrejtése", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domain csatlakozik", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Jelenjen meg a blokkolt lekérések száma az ikonon", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}}, összesen: {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Buboréksúgó (tooltip) kikapcsolása", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Létrehoz", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Környezeti menü alkalmazása, ahol lehetséges", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Választ", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Színvak-barát", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Kilép", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Felhőben tárolás bekapcsolása", - "description":"" + "pickerPreview": { + "message": "Előnézet", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Haladó felhasználó vagyok (További tudnivalók<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Hálózati szűrők", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"haladó beállítások", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kozmetikai szűrők", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Előtöltés kikapcsolása (kapcsolódás megakadályozása blokkolt hálózati lekérésekhez)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klikk, Ctrl-klikk", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Hivatkozás-vizsgálat kikapcsolása", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Elem blokkolása", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"WebRTC helyi IP-cím szivárogtatásának megakadályozása", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Blokkolt elemek helyőrzőinek elrejtése", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Alapértelmezett viselkedés", - "description":"" + "settingsIconBadgePrompt": { + "message": "Jelenjen meg a blokkolt lekérések száma az ikonon", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Ezek az alapértelmezett viselkedések felülírhatóak weboldal-szinten", - "description":"" + "settingsTooltipsPrompt": { + "message": "Buboréksúgó (tooltip) kikapcsolása", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Kozmetikai szűrés kikapcsolása", - "description":"" + "settingsContextMenuPrompt": { + "message": "Környezeti menü alkalmazása, ahol lehetséges", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} kB-nál nagyobb média elemek blokkolása", - "description":"" + "settingsColorBlindPrompt": { + "message": "Színvak-barát", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Távoli betűkészletek blokkolása", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Felhőben tárolás bekapcsolása", + "description": "" }, - "settingsStorageUsed":{ - "message":"Tárolóhely használat: {{value}} byte", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Haladó felhasználó vagyok (További tudnivalók<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Utolsó visszaállítás:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "haladó beállítások", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Utolsó biztonsági mentés:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Előtöltés kikapcsolása (kapcsolódás megakadályozása blokkolt hálózati lekérésekhez)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} hálózati szűrők + {{cosmeticFilterCount}} kozmetikai szűrők:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Hivatkozás-vizsgálat kikapcsolása", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} használatban a listában lévő {{total}} szűrő közül", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC helyi IP-cím szivárogtatásának megakadályozása", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Szűrőlisták automatikus frissítése.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Alapértelmezett viselkedés", + "description": "" }, - "3pUpdateNow":{ - "message":"Frissítés most", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Ezek az alapértelmezett viselkedések felülírhatóak weboldal-szinten", + "description": "" }, - "3pPurgeAll":{ - "message":"Gyorsítótárak ürítése", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Kozmetikai szűrés kikapcsolása", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Értelmezze és alkalmazza a kozmetikai szűrőket.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "{{input:number}} kB-nál nagyobb média elemek blokkolása", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

A beállítás engedélyezése megnöveli a uBlock₀<\/i> memóriahasználatát.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Távoli betűkészletek blokkolása", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Általános kozmetikai szűrők figyelmen kívül hagyása", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "CSP jelentések blokkolása", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Ajánlott bekapcsolni ezt az opciót a gyengébb eszközökön.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Tárolóhely használat: {{value}} byte", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Blokkolt hostokat tartalmazó listák", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Utolsó visszaállítás:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Módosítások alkalmazása", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Utolsó biztonsági mentés:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Hirdetések", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} hálózati szűrők + {{cosmeticFilterCount}} kozmetikai szűrők:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Adatvédelem", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} használatban a listában lévő {{total}} szűrő közül", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Malware domainek", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Szűrőlisták automatikus frissítése.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Közösségi", - "description":"English: Social" + "3pUpdateNow": { + "message": "Frissítés most", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Többcélú", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Gyorsítótárak ürítése", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Régiók, nyelvek", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Értelmezze és alkalmazza a kozmetikai szűrőket.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Saját", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

A beállítás engedélyezése megnöveli a uBlock₀<\/i> memóriahasználatát.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Soronként egy URL. A ‘!’ kezdetű sorok figyelmen kívül maradnak. A szabálytalan URL-ek szintén figyelmen kívül maradnak, hibajelzés nélkül.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Általános kozmetikai szűrők figyelmen kívül hagyása", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Elavult.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Ajánlott bekapcsolni ezt az opciót a gyengébb eszközökön.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Utolsó frissítés: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Blokkolt hostokat tartalmazó listák", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Frissítés...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Módosítások alkalmazása", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Egy hálózati hiba megakadályozta az erőforrás frissítését.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Hirdetések", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Soronként egy szűrő. A szűrő lehet egy hostnév, vagy egy Adblock Plus kompatibilis szűrő.\nA ‘!’ kezdetű sorok figyelmen kívül maradnak.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Adatvédelem", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importál és hozzáad", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Malware domainek", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exportál", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Kellemetlenségek", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-statikus-szabalyaim_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Többcélú", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Módosítások alkalmazása", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Régiók, nyelvek", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Állandó szabályok", - "description":"header" + "3pGroupCustom": { + "message": "Saját", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Átmeneti szabályok", - "description":"header" + "3pExternalListsHint": { + "message": "Soronként egy URL. A ‘!’ kezdetű sorok figyelmen kívül maradnak. A szabálytalan URL-ek szintén figyelmen kívül maradnak, hibajelzés nélkül.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Visszaállítás", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Elavult.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Alkalmaz", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Utolsó frissítés: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Szerkesztés", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Frissítés...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Mentés", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Egy hálózati hiba megakadályozta az erőforrás frissítését.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Elvetés", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Soronként egy szűrő. A szűrő lehet egy hostnév, vagy egy Adblock Plus kompatibilis szűrő.\nA ‘!’ kezdetű sorok figyelmen kívül maradnak.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importálás fájlból…", - "description":"" + "1pImport": { + "message": "Importál és hozzáad", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exportálás fájlba", - "description":"" + "1pExport": { + "message": "Exportál", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"ublock-dinamikus-szabalyaim_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-statikus-szabalyaim_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Saját szűrőszabályok listája.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Módosítások alkalmazása", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Szabály szintaxis: forrás cél típus művelet<\/code> (Teljes dokumentáció<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Állandó szabályok", + "description": "header" }, - "whitelistPrompt":{ - "message":"Az alábbi listában felsorolt hostokon a kiegészítő nem fog működni. Soronként egy bejegyzés. Érvénytelen hostnevek figyelmen kívül maradnak.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Átmeneti szabályok", + "description": "header" }, - "whitelistImport":{ - "message":"Importál és hozzáad", - "description":"English: Import and append" + "rulesRevert": { + "message": "Visszaállítás", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exportál", - "description":"English: Export" + "rulesCommit": { + "message": "Alkalmaz", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"ublock-kiveteleim_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Szerkesztés", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Módosítások alkalmazása", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Mentés", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Típus", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Elvetés", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domain", - "description":"English: Domain" + "rulesImport": { + "message": "Importálás fájlból…", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Exportálás fájlba", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Szűrő", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "ublock-dinamikus-szabalyaim_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Összes", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Saját szűrőszabályok listája.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Hálózati lekérések a háttérben", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Szabály szintaxis: forrás cél típus művelet<\/code> (Teljes dokumentáció<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"naplóbejegyzések szűrése", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Az alábbi listában felsorolt hostokon a kiegészítő nem fog működni. Soronként egy bejegyzés. Érvénytelen hostnevek figyelmen kívül maradnak.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Naplóbejegyzések maximális száma", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importál és hozzáad", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontextus:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exportál", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Típus:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "ublock-kiveteleim_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dinamikus URL szűrő", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Módosítások alkalmazása", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statikus szűrés", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Típus", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"Hálózati kérések {{action}} amik {{type}} {{br}} és illeszkednek a(z) {{url}} URL-re {{br}} és amik innen származnak: {{origin}},{{br}}{{importance}} van illeszkedő kivétel szűrő.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"blokkolása", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"engedélyezése", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Szűrő", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"„{{type}}” típusúak", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Összes", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"bármilyen típusúak", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Hálózati lekérések a háttérben", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"{{origin}}", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "naplóbejegyzések szűrése", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"bárhonnan", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Naplóbejegyzések maximális száma", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"kivéve ha", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kontextus:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"akkor is, ha", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Típus:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statikus filter, amiben {{filter}} benne van:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dinamikus URL szűrő", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Változások listája", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statikus szűrés", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "Hálózati kérések {{action}} amik {{type}} {{br}} és illeszkednek a(z) {{url}} URL-re {{br}} és amik innen származnak: {{origin}},{{br}}{{importance}} van illeszkedő kivétel szűrő.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Támogatás", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "blokkolása", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Forráskód (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "engedélyezése", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Közreműködők", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "„{{type}}” típusúak", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Biztonsági mentés fájlba...", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "bármilyen típusúak", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-mentesem_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "{{origin}}", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Biztonsági mentés visszaállítása fájlból...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "bárhonnan", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Alapértelmezett beállítások visszaállítása...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "kivéve ha", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"A jelenlegi beállítások felülíródnak a mentett adatokkal (mentési idő: {{time}}), utána a uBlock₀ újraindul.\n\nFelülírja a jelenlegi beállításokat a biztonsági mentéssel?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "akkor is, ha", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Nem olvasható vagy érvénytelen adat", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statikus filter, amiben {{filter}} benne van:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Az összes beállítás törlődik, utána a uBlock₀ újraindul.\n\nÁllítsa vissza a gyári beállításokat?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Változások listája", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Hálózati hiba: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Hozzáadja a következő URL-t a saját szűrő listákhoz?\n\nNév: \"{{title}}\"\nURL: \"{{url}}\"", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Támogatás", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"egy perce", - "description":"English: a minute ago" + "aboutCode": { + "message": "Forráskód (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} perce", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Közreműködők", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"egy órája", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Biztonsági mentés fájlba...", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} órája", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-mentesem_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"egy napja", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Biztonsági mentés visszaállítása fájlból...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} napja", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Alapértelmezett beállítások visszaállítása...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Vezérlőpult megnyitása", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "A jelenlegi beállítások felülíródnak a mentett adatokkal (mentési idő: {{time}}), utána a uBlock₀ újraindul.\n\nFelülírja a jelenlegi beállításokat a biztonsági mentéssel?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Napló mutatása", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Nem olvasható vagy érvénytelen adat", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"kikapcsolva", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Az összes beállítás törlődik, utána a uBlock₀ újraindul.\n\nÁllítsa vissza a gyári beállításokat?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin nem engedte a következő lap betöltését:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Hálózati hiba: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"A következő szűrő miatt", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Hozzáadja a következő URL-t a saját szűrő listákhoz?\n\nNév: \"{{title}}\"\nURL: \"{{url}}\"", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"paraméterek nélkül", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "egy perce", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Ezekben található:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} perce", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Vissza", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "egy órája", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Ablak bezárása", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} órája", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Kapcsolja ki a szigorú tiltást a(z) {{hostname}} részére", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "egy napja", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Ideiglenesen", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} napja", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Véglegesen", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Vezérlőpult megnyitása", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exportálás a felhőszolgáltatásba", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Napló mutatása", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importálás a felhőszolgáltatásból", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "kikapcsolva", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importálás a felhőből és egybevonás a jelenlegi beállításokkal", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin nem engedte a következő lap betöltését:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "A következő szűrő miatt", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Ennek az eszköznek a neve:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "paraméterek nélkül", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Figyelem! Haladó beállítások, megváltoztatásuk csak saját felelősségre.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Ezekben található:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Küldés", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Vissza", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Módosítások alkalmazása", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Ablak bezárása", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Visszaállítás", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Kapcsolja ki a szigorú tiltást a(z) {{hostname}} részére", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bájt", - "description":"" + "docblockedDisableTemporary": { + "message": "Ideiglenesen", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Nagyméretű média elemek ideiglenes engedélyezése", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Véglegesen", + "description": "English: Permanently" }, - "dummy":{ - "message":"Ez a bejegyzés utolsó kell hogy legyen", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exportálás a felhőszolgáltatásba", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importálás a felhőszolgáltatásból", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importálás a felhőből és egybevonás a jelenlegi beállításokkal", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Ennek az eszköznek a neve:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Figyelem! Haladó beállítások, megváltoztatásuk csak saját felelősségre.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Küldés", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Módosítások alkalmazása", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Visszaállítás", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bájt", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Nagyméretű média elemek ideiglenes engedélyezése", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Ez a bejegyzés utolsó kell hogy legyen", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/id/messages.json b/src/_locales/id/messages.json index 380d461749d10..9bf1fc25b4135 100644 --- a/src/_locales/id/messages.json +++ b/src/_locales/id/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Akhirnya, pemblokir iklan yang efisien. Ringan penggunaan CPU dan memori.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Akhirnya, pemblokir iklan yang efisien. Ringan penggunaan CPU dan memori.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dasbor", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dasbor", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Pengaturan", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Pengaturan", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filter Pihak ke-3", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filter Pihak ke-3", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Filter Saya", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Filter Saya", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Aturan Saya", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Aturan Saya", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Daftar Putih", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Daftar Putih", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Pencatat Log", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Pencatat Log", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Tentang", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Tentang", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Pengaturan lanjutan", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Pengaturan lanjutan", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klik: nonfungsi\/fungsikan uBlock₀ untuk situs ini.\n\nCtrl+klik: nonfungsikan uBlock₀ hanya di halaman ini.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klik: nonfungsi\/fungsikan uBlock₀ untuk situs ini.\n\nCtrl+klik: nonfungsikan uBlock₀ hanya di halaman ini.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"permintaan diblokir", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Klik untuk menonaktifkan uBlock₀ pada situs ini.\n\nCtrl+klik untuk menonaktifkan uBlock₀ hanya di laman ini.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"di laman ini", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Klik untuk mengaktifkan uBlock₀ pada situs ini.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} atau {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "permintaan diblokir", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"sejak dipasang", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "di laman ini", + "description": "English: on this page" }, - "popupOr":{ - "message":"atau", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} atau {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Buka dasbor", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "sejak dipasang", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "atau", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Memasuki mode pemilihan elemen", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Buka dasbor", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Buka pencatat log", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Memasuki mode penghapus elemen", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Alihkan pemblokiran semua popup untuk situs ini", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Memasuki mode pemilihan elemen", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Aktifkan\/Nonaktifkan pemblokiran elemen media besar untuk situs ini", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Buka pencatat log", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Alihkan penyaringan tampilan untuk situs ini", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Alihkan pemblokiran semua popup untuk situs ini", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Jungkit pemblokiran fon pihak ketiga untuk situs ini", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Klik untuk memblokir semua popup pada situs ini", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Aturan global: kolom ini untuk aturan yang diterapkan ke semua situs.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Klik untuk tidak lagi memblokir semua popup pada situs ini", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Aturan lokal: kolom ini untuk aturan yang diterapkan ke situs yang sedang dikunjungi saja.\nAturan lokal menimpa aturan global.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Aktifkan\/Nonaktifkan pemblokiran elemen media besar untuk situs ini", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Klik untuk membuat ubahan Anda permanen.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Klik untuk memblokir elemen media berukuran besar pada situs ini", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Klik untuk membatalkan ubahan Anda.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Klik untuk tidak lagi memblokir elemen media berukuran besar pada situs ini", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"semua", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Alihkan penyaringan tampilan untuk situs ini", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"gambar", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Klik untuk menonaktifkan filter tampilan pada situs ini", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"pihak ketiga", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Klik untuk mengaktifkan filter tampilan pada situs ini", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/gambar pihak ketiga", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Jungkit pemblokiran fon pihak ketiga untuk situs ini", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"skrip inline", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Klik untuk memblokir fon eksternal pada situs ini", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"skrip pihak pertama", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Klik untuk tidak lagi memblokir fon eksternal pada situs ini", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"skrip pihak ketiga", - "description":"" + "popupTipGlobalRules": { + "message": "Aturan global: kolom ini untuk aturan yang diterapkan ke semua situs.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"frame pihak ketiga", - "description":"" + "popupTipLocalRules": { + "message": "Aturan lokal: kolom ini untuk aturan yang diterapkan ke situs yang sedang dikunjungi saja.\nAturan lokal menimpa aturan global.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domain terhubung", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Klik untuk membuat ubahan Anda permanen.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} dari {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Klik untuk membatalkan ubahan Anda.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Buat", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "semua", + "description": "" }, - "pickerPick":{ - "message":"Pilih", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "gambar", + "description": "" }, - "pickerQuit":{ - "message":"Keluar", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "pihak ketiga", + "description": "" }, - "pickerPreview":{ - "message":"Pratinjau", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css\/gambar pihak ketiga", + "description": "" }, - "pickerNetFilters":{ - "message":"Filter jaringan", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "skrip inline", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Filter tampilan", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "skrip pihak pertama", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "skrip pihak ketiga", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blok elemen", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "frame pihak ketiga", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Sembunyikan tempat elemen yang diblokir", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domain terhubung", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Tampilkan jumlah permintaan yang diblokir pada ikon", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} dari {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Nonaktifkan tip alat", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Buat", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Pergunakan menu konteks jika sesuai", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Pilih", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Ramah buta warna", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Keluar", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Fungsikan dukungan penyimpanan awan", - "description":"" + "pickerPreview": { + "message": "Pratinjau", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Saya pengguna tingkat lanjut (bacaan wajib<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Filter jaringan", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"pengaturan lanjutan", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Filter tampilan", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Nonfungsikan pra-ambil (untuk mencegah sambungan apapun untuk permintaan jaringan yang diblokir)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Nonfungsikan pengauditan pranala", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blok elemen", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Cegah WebRTC membocorkan alamat IP lokal", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Sembunyikan tempat elemen yang diblokir", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Perilaku bawaan", - "description":"" + "settingsIconBadgePrompt": { + "message": "Tampilkan jumlah permintaan yang diblokir pada ikon", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Perilaku bawaan ini bisa ditimpa pada masing-masing aturan situs", - "description":"" + "settingsTooltipsPrompt": { + "message": "Nonaktifkan tip alat", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Nonfungsikan filter tampilan", - "description":"" + "settingsContextMenuPrompt": { + "message": "Pergunakan menu konteks jika sesuai", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokir elemen media yang lebih besar dari {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Ramah buta warna", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokir fon rajuh", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Fungsikan dukungan penyimpanan awan", + "description": "" }, - "settingsStorageUsed":{ - "message":"Penyimpanan terpakai: {{value}} bita", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Saya pengguna tingkat lanjut (bacaan wajib<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Pemulihan terakhir:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "pengaturan lanjutan", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Pencadangan terakhir:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Nonfungsikan pra-ambil (untuk mencegah sambungan apapun untuk permintaan jaringan yang diblokir)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filter jaringan + {{cosmeticFilterCount}} filter tampilan dari:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Nonfungsikan pengauditan pranala", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} digunakan dari {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Cegah WebRTC membocorkan alamat IP lokal", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Pembaruan otomatis daftar filter.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Perilaku bawaan", + "description": "" }, - "3pUpdateNow":{ - "message":"Perbarui sekarang", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Perilaku bawaan ini bisa ditimpa pada masing-masing aturan situs", + "description": "" }, - "3pPurgeAll":{ - "message":"Bersihkan semua tembolok", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Nonfungsikan filter tampilan", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Uraikan dan paksa jalankan filter tampilan.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blokir elemen media yang lebih besar dari {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Memfungsikan fitur ini akan meningkatkan penggunaan memori uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blokir fon rajuh", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Abaikan filter tampilan generik", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Blokir laporan CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Direkomendasikan untuk mengaktifkan opsi ini pada perangkat dengan ram kecil atau kekuatan CPU yang lemah.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Penyimpanan terpakai: {{value}} bita", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Daftar host yang diblokir", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Pemulihan terakhir:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Terapkan perubahan", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Pencadangan terakhir:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Iklan", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filter jaringan + {{cosmeticFilterCount}} filter tampilan dari:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privasi", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} digunakan dari {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domain malware", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Pembaruan otomatis daftar filter.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Sosial", - "description":"English: Social" + "3pUpdateNow": { + "message": "Perbarui sekarang", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Serbaguna", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Bersihkan semua tembolok", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Wilayah, bahasa", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Uraikan dan paksa jalankan filter tampilan.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Tersesuai", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Memfungsikan fitur ini akan meningkatkan penggunaan memori uBlock₀<\/i>.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Satu URL per baris. Baris yang diawali dengan ‘!’ akan diabaikan. URL yang tidak valid akan diabaikan tanpa peringatan.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Abaikan filter tampilan generik", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Sudah usang.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Direkomendasikan untuk mengaktifkan opsi ini pada perangkat dengan ram kecil atau kekuatan CPU yang lemah.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Pembaruan terakhir: {{ago}}.\nKlik untuk memaksa memperbarui.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Daftar host yang diblokir", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Memperbarui...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Terapkan perubahan", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Galat jaringan mencegah sumber daya diperbarui.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Iklan", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Satu filter per baris. Filter dapat berupa nama host, atau filter yang kompatibel dengan Adblock Plus. Baris yang diawali dengan ‘!’ akan diabaikan.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privasi", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Impor dan tambahkan", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domain malware", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Ekspor", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Gangguan", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Serbaguna", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Terapkan perubahan", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Wilayah, bahasa", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Aturan permanen", - "description":"header" + "3pGroupCustom": { + "message": "Tersesuai", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Aturan sementara", - "description":"header" + "3pExternalListsHint": { + "message": "Satu URL per baris. Baris yang diawali dengan ‘!’ akan diabaikan. URL yang tidak valid akan diabaikan tanpa peringatan.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Urungkan", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Sudah usang.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Tetapkan", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Pembaruan terakhir: {{ago}}.\nKlik untuk memaksa memperbarui.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Sunting", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Memperbarui...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Simpan", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Galat jaringan mencegah sumber daya diperbarui.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Batal", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Satu filter per baris. Filter dapat berupa nama host, atau filter yang kompatibel dengan Adblock Plus. Baris yang diawali dengan ‘!’ akan diabaikan.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Impor dari berkas...", - "description":"" + "1pImport": { + "message": "Impor dan tambahkan", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Ekspor ke berkas", - "description":"" + "1pExport": { + "message": "Ekspor", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Daftar aturan filter dinamis anda.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Terapkan perubahan", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Aturan sintaksis: sumber tujuan jenis tindakan<\/code> (dokumentasi lengkap<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Aturan permanen", + "description": "header" }, - "whitelistPrompt":{ - "message":"Daftar putih domain atau halaman, uBlock Origin akan dinonaktifkan. Satu entri per baris. Entri yang tidak valid akan diabaikan dan dijadikan komentar.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Aturan sementara", + "description": "header" }, - "whitelistImport":{ - "message":"Impor dan tambahkan", - "description":"English: Import and append" + "rulesRevert": { + "message": "Urungkan", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Ekspor", - "description":"English: Export" + "rulesCommit": { + "message": "Tetapkan", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Sunting", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Terapkan perubahan", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Simpan", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Jenis", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Batal", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domain", - "description":"English: Domain" + "rulesImport": { + "message": "Impor dari berkas...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Ekspor ke berkas", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Semua", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Daftar aturan filter dinamis anda.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Di balik layar", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Aturan sintaksis: sumber tujuan jenis tindakan<\/code> (dokumentasi lengkap<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"saring entri catatan", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Daftar putih domain atau halaman, uBlock Origin akan dinonaktifkan. Satu entri per baris. Entri yang tidak valid akan diabaikan dan dijadikan komentar.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Jumlah maximum entri catatan", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Impor dan tambahkan", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Konteks:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Ekspor", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Jenis:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Penyaring URL Dinamis", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Terapkan perubahan", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Penyaringan statis", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Jenis", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} permintaan jaringan dari {{type}} {{br}}yang alamat URLnya cocok dengan {{url}} {{br}}dan yang berasal dari {{origin}},{{br}}{{importance}} ada pengecualian penyaring yang cocok.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokir", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Izinkan", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"jenis “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Semua", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"semua jenis", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Di balik layar", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"dari “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "saring entri catatan", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"dari manapun", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Jumlah maximum entri catatan", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"kecuali ketika", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Konteks:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"meskipun", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Jenis:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filter statis {{filter}} ditemukan di dalam:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Penyaring URL Dinamis", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Catatan perubahan", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Penyaringan statis", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} permintaan jaringan dari {{type}} {{br}}yang alamat URLnya cocok dengan {{url}} {{br}}dan yang berasal dari {{origin}},{{br}}{{importance}} ada pengecualian penyaring yang cocok.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Dukungan", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokir", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Kode sumber (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Izinkan", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Kontributor", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "jenis “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Cadangkan ke berkas", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "semua jenis", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "dari “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Pulihkan dari berkas...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "dari manapun", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Kembalikan ke pengaturan bawaan...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "kecuali ketika", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Semua pengaturan anda akan ditimpa dengan data yang dicadangkan pada {{time}}, dan uBlock₀ akan memulai ulang.\n\nTimpa semua pengaturan yang ada dengan data cadangan?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "meskipun", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Data tidak dapat dibaca atau tidak valid", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Filter statis {{filter}} ditemukan di dalam:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Semua pengaturan anda akan dihapus, dan uBlock₀ akan memulai ulang.\n\nKembalikan uBlock₀ ke pengaturan bawaan?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Catatan perubahan", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Galat jaringan: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Tambahkan URL berikut ke daftar filter tersesuai anda?\n\nJudul: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Dukungan", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"semenit yang lalu", - "description":"English: a minute ago" + "aboutCode": { + "message": "Kode sumber (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} menit yang lalu", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Kontributor", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"sejam yang lalu", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Cadangkan ke berkas", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} jam yang lalu", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"sehari yang lalu", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Pulihkan dari berkas...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} hari yang lalu", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Kembalikan ke pengaturan bawaan...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Tampilkan Dasbor", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Semua pengaturan anda akan ditimpa dengan data yang dicadangkan pada {{time}}, dan uBlock₀ akan memulai ulang.\n\nTimpa semua pengaturan yang ada dengan data cadangan?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Tampilkan Pencatat", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Data tidak dapat dibaca atau tidak valid", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"mati", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Semua pengaturan anda akan dihapus, dan uBlock₀ akan memulai ulang.\n\nKembalikan uBlock₀ ke pengaturan bawaan?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin telah mencegah halaman berikut dimuat:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Galat jaringan: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Disebabkan oleh filter berikut", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Tambahkan URL berikut ke daftar filter tersesuai anda?\n\nJudul: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"tanpa parameter", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "semenit yang lalu", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Ditemukan di:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} menit yang lalu", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Kembali", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "sejam yang lalu", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Tutup jendela ini", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} jam yang lalu", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Nonfungsikan pemblokiran ketat untuk {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "sehari yang lalu", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Sementara", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} hari yang lalu", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanen", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Tampilkan Dasbor", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Ekspor ke penyimpanan awan", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Tampilkan Pencatat", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Impor dari penyimpanan awan", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "mati", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Impor dari penyimpanan awan dan gabungkan dengan pengaturan saat ini", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin telah mencegah halaman berikut dimuat:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Disebabkan oleh filter berikut", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Nama perangkat ini:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "tanpa parameter", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Peringatan! Ubah pengaturan lanjutan berikut dengan resiko Anda sendiri.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Ditemukan di:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Kirim", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Kembali", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Terapkan perubahan", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Tutup jendela ini", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Urungkan", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Nonfungsikan pemblokiran ketat untuk {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"byte", - "description":"" + "docblockedDisableTemporary": { + "message": "Sementara", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Sementara izinkan elemen media besar", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanen", + "description": "English: Permanently" }, - "dummy":{ - "message":"Entri ini harus menjadi yang terakhir", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Ekspor ke penyimpanan awan", + "description": "tooltip" + }, + "cloudPull": { + "message": "Impor dari penyimpanan awan", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Impor dari penyimpanan awan dan gabungkan dengan pengaturan saat ini", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nama perangkat ini:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Peringatan! Ubah pengaturan lanjutan berikut dengan resiko Anda sendiri.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Kirim", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Terapkan perubahan", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Urungkan", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Sementara izinkan elemen media besar", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Entri ini harus menjadi yang terakhir", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/it/messages.json b/src/_locales/it/messages.json index 717a25ac3b007..1c11c43ed2031 100644 --- a/src/_locales/it/messages.json +++ b/src/_locales/it/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Finalmente, un blocker efficiente. Leggero sulla CPU e sulla memoria.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Finalmente, un blocker efficiente. Leggero sulla CPU e sulla memoria.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashboard", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashboard", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Opzioni", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Opzioni", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Lista dei filtri", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Lista dei filtri", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"I miei filtri", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "I miei filtri", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Le mie regole", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Le mie regole", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Whitelist", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Cronologia richieste di rete", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Cronologia richieste di rete", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Info", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Info", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Impostazioni avanzate", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Impostazioni avanzate", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Click: disabilita\/abilita uBlock₀ per questo sito.\n\nCtrl+click: disabilita uBlock₀ solo per questa pagina.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Click: disabilita\/abilita uBlock₀ per questo sito.\n\nCtrl+click: disabilita uBlock₀ solo per questa pagina.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"richieste bloccate", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click per disabilitare uBo per questo sito.\n\nCtrl+click per disabilitare uBo solo su questa pagina.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"in questa pagina", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click per attivare uBo per questo sito.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} o {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "richieste bloccate", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"dall'installazione", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "in questa pagina", + "description": "English: on this page" }, - "popupOr":{ - "message":"o", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} o {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Clicca per aprire il dashboard", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "dall'installazione", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Accedi alla modalità elimina elemento", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "o", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Accedi alla modalità seleziona elemento", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Apri il pannello di controllo", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Vai al registro delle richieste", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Accedi alla modalità elimina elemento", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Disabilita\/abilita il blocco di tutti i popup per questo sito", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Accedi alla modalità seleziona elemento", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Abilita\/disabilita il blocco di elementi multimediali di grandi dimensioni per questo sito", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Vai al registro delle richieste", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Disabilita\/abilita filtraggio cosmetico per questo sito", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Disabilita\/abilita il blocco di tutti i popup per questo sito", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Attiva o disattiva il blocco dei font remoti per questo sito", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Clicca per bloccare tutti i popup in questo sito", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Regole globali: questa colonna è per le regole che si applicano a tutti i siti.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Clicca per sbloccare tutti i popup in questo sito", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Regole locali: questa colonna è per le regole che si applicano solo al sito corrente.\nLe regole locali hanno la precedenza su quelle globali.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Abilita\/disabilita il blocco di elementi multimediali di grandi dimensioni per questo sito", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Clicca per rendere le tue scelte permanenti.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Clicca per bloccare elementi multimediali di grandi dimensioni in questo sito", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Clicca per annullare i cambiamenti.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Clicca per sbloccare elementi multimediali di grandi dimensioni in questo sito", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"Tutto", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Disabilita\/abilita filtraggio cosmetico per questo sito", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"Immagini", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Clicca per disattivare il filtraggio cosmetico in questo sito", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"Di terze parti", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Clicca per attivare il filtraggio cosmetico in questo sito", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"Immagini\/CSS di terze parti", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Attiva o disattiva il blocco dei font remoti per questo sito", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"Script inline", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Clicca per bloccare i font remoti in questo sito", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Script di proprietà del sito", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Clicca per sbloccare i font remoti in questo sito", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"Script di terze parti", - "description":"" + "popupTipGlobalRules": { + "message": "Regole globali: questa colonna è per le regole che si applicano a tutti i siti.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Frame di terze parti", - "description":"" + "popupTipLocalRules": { + "message": "Regole locali: questa colonna è per le regole che si applicano solo al sito corrente.\nLe regole locali hanno la precedenza su quelle globali.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domini contattati", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Clicca per rendere le tue scelte permanenti.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} di {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Clicca per annullare i cambiamenti.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Crea", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "Tutto", + "description": "" }, - "pickerPick":{ - "message":"Seleziona", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "Immagini", + "description": "" }, - "pickerQuit":{ - "message":"Esci", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "Di terze parti", + "description": "" }, - "pickerPreview":{ - "message":"Anteprima", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "Immagini\/CSS di terze parti", + "description": "" }, - "pickerNetFilters":{ - "message":"Filtri di rete", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "Script inline", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Filtri cosmetici", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Script di proprietà del sito", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl-click", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "Script di terze parti", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blocca elemento", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Frame di terze parti", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Nascondi lo spazio riservato agli elementi bloccati", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domini contattati", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Visualizza il numero degli elementi bloccati sull'icona", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} di {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Disabilita suggerimenti", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Crea", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Usa il menu contestuale quando è possibile", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Seleziona", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Adatto ai daltonici", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Esci", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Abilita supporto salvataggio nel cloud", - "description":"" + "pickerPreview": { + "message": "Anteprima", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Sono un utente avanzato (Lettura obbligatoria<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Filtri di rete", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"impostazioni avanzate", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Filtri cosmetici", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disattiva pre-fetching (per evitare qualsiasi connessione per le richieste di rete bloccate)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disabilita la revisione degli hyperlink", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blocca elemento", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Impedisci a WebRTC di rivelare l'indirizzo IP locale", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Nascondi lo spazio riservato agli elementi bloccati", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Comportamento predefinito", - "description":"" + "settingsIconBadgePrompt": { + "message": "Visualizza il numero degli elementi bloccati sull'icona", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Questi comportamenti predefiniti possono essere modificati per ogni singolo sito", - "description":"" + "settingsTooltipsPrompt": { + "message": "Disabilita suggerimenti", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Disabilita filtraggio cosmetico", - "description":"" + "settingsContextMenuPrompt": { + "message": "Usa il menu contestuale quando è possibile", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blocca elementi multimediali di dimensioni maggiori di {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Adatto ai daltonici", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blocca font remoti", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Abilita supporto salvataggio nel cloud", + "description": "" }, - "settingsStorageUsed":{ - "message":"Spazio utilizzato: {{value}} byte", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Sono un utente avanzato (Lettura obbligatoria<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Ultimo ripristino:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "impostazioni avanzate", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Ultimo backup:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Disattiva pre-fetching (per evitare qualsiasi connessione per le richieste di rete bloccate)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtri di rete + {{cosmeticFilterCount}} filtri cosmetici da:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disabilita la revisione dei collegamenti ipertestuali", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} usati su {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Impedisci a WebRTC di rivelare l'indirizzo IP locale", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Aggiornamento automatico liste.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Comportamento predefinito", + "description": "" }, - "3pUpdateNow":{ - "message":"Aggiorna ora", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Questi comportamenti predefiniti possono essere modificati per ogni singolo sito", + "description": "" }, - "3pPurgeAll":{ - "message":"Elimina tutte le cache", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Disabilita filtraggio cosmetico", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Utilizza Adblock+ element hiding filters.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blocca elementi multimediali di dimensioni maggiori di {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Questa funziona aumenta l'uso della memoria da parte di uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blocca font remoti", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignora filtri cosmetici generici.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Blocca i report CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

È raccomandato abilitare quest'opzione sui dispositivi meno potenti.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Spazio utilizzato: {{value}} byte", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista degli hosts bloccati", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Ultimo ripristino:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Salva i cambiamenti", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Ultimo backup:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Pubblicità", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtri di rete + {{cosmeticFilterCount}} filtri cosmetici da:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privacy", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} usati su {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domini con Malware", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Aggiornamento automatico liste.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pUpdateNow": { + "message": "Aggiorna ora", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Multiuso", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Elimina tutte le cache", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regioni, lingue", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Utilizza Adblock+ element hiding filters.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Personalizzate", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Questa funziona aumenta l'uso della memoria da parte di uBlock₀<\/i>.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Un URL per ogni riga. Ogni riga che comincia con ‘!’ verrà ignorata. URL non validi verranno silenziosamente ignorati.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignora filtri cosmetici generici.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Obsoleto.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

È raccomandato abilitare quest'opzione sui dispositivi meno potenti.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Ultimo aggiornamento: {{ago}}.\nClicca per forzare l'aggiornamento.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lista degli hosts bloccati", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Aggiornamento in corso...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Salva i cambiamenti", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Un errore di rete ha impedito l'aggiornamento della risorsa.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Pubblicità", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Un filtro per ogni riga. Un filtro può essere un hostname, o un filtro compatibile con Adblock Plus. Ogni riga che comincia con ‘!’ verrà ignorata.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privacy", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importa e aggiungi", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domini con Malware", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Esporta", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Elementi fastidiosi", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-filtri-statici-personalizzati_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Multiuso", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Salva i cambiamenti", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regioni, lingue", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Regole permanenti", - "description":"header" + "3pGroupCustom": { + "message": "Personalizzate", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Regole temporanee", - "description":"header" + "3pExternalListsHint": { + "message": "Un URL per ogni riga. Ogni riga che comincia con ‘!’ verrà ignorata. URL non validi verranno silenziosamente ignorati.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Ripristina", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Obsoleto.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Applica", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Ultimo aggiornamento: {{ago}}.\nClicca per forzare l'aggiornamento.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Modifica", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Aggiornamento in corso...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Salva", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Un errore di rete ha impedito l'aggiornamento della risorsa.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Annulla", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Un filtro per ogni riga. Un filtro può essere un hostname, o un filtro compatibile con Adblock Plus. Ogni riga che comincia con ‘!’ verrà ignorata.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importa da file...", - "description":"" + "1pImport": { + "message": "Importa e aggiungi", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Esporta in file", - "description":"" + "1pExport": { + "message": "Esporta", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"ublock-filtri-dinamici-personalizzati_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-filtri-statici-personalizzati_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Lista delle regole di filtraggio dinamiche personalizzate.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Salva i cambiamenti", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Sintassi per le regole: sorgente destinazione tipo azione<\/code> (documentazione completa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Regole permanenti", + "description": "header" }, - "whitelistPrompt":{ - "message":"Lista dei siti dove uBlock è disattivato. Un sito per ogni riga. Le voci non valide verranno silenziosamente ignorate.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Regole temporanee", + "description": "header" }, - "whitelistImport":{ - "message":"Importa e aggiungi", - "description":"English: Import and append" + "rulesRevert": { + "message": "Ripristina", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Esporta", - "description":"English: Export" + "rulesCommit": { + "message": "Applica", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Modifica", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Salva i cambiamenti", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Salva", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Annulla", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Dominio", - "description":"English: Domain" + "rulesImport": { + "message": "Importa da file...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Esporta in file", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtro", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "ublock-filtri-dinamici-personalizzati_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Tutte", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Lista delle regole di filtraggio dinamiche personalizzate.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Dietro le quinte", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Sintassi per le regole: sorgente destinazione tipo azione<\/code> (documentazione completa<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtra voci del registro", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Lista dei siti dove uBlock è disattivato. Un sito per ogni riga. Le voci non valide verranno silenziosamente ignorate.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Numero massimo di voci del registro", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importa e aggiungi", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Contesto:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Esporta", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Filtraggio dinamico dell'URL", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Salva i cambiamenti", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Filtraggio statico", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} la richiesta di rete di {{type}} {{br}} il cui indirizzo URL corrisponde a {{url}} {{br}}e che proviene da {{origin}},{{br}}{{importance}} c'è una corrispondenza nel filtro delle eccezioni.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Dominio", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blocca", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permetti", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtro", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Tutte", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"qualsiasi tipo", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Dietro le quinte", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"da “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtra voci del registro", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"da ovunque", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Numero massimo di voci del registro", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"tranne quando", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Contesto:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"anche se", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtro statico {{filter}} trovato in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Filtraggio dinamico dell'URL", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Change log", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Filtraggio statico", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} la richiesta di rete di {{type}} {{br}} il cui indirizzo URL corrisponde a {{url}} {{br}}e che proviene da {{origin}},{{br}}{{importance}} c'è una corrispondenza nel filtro delle eccezioni.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Supporto", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blocca", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Codice sorgente (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Permetti", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Collaboratori", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tipo “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Crea file di backup...", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "qualsiasi tipo", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "da “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Ripristina dal file...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "da ovunque", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Riparti da zero...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "tranne quando", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Tutte le impostazioni verranno sovrascritte utilizzando i dati di backup del {{time}} e uBlock sarà riavviato.\n\nSovrascrivere tutte le impostazioni esistenti con quelle del backup?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "anche se", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"I dati non possono essere letti o non sono validi", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Filtro statico {{filter}} trovato in:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Verranno cancellate tutte le impostazioni, e uBlock₀ sarà riavviato.\n\nResettare uBlock alle impostazioni di fabbrica?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Change log", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Errore di connessione: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Aggiungere il seguente URL alla tua lista dei filtri personalizzata?\n\nTitolo: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Supporto", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"un minuto fa", - "description":"English: a minute ago" + "aboutCode": { + "message": "Codice sorgente (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuti fa", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Collaboratori", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"un'ora fa", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Crea file di backup...", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} ore fa", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"un giorno fa", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Ripristina dal file...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} giorni fa", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Riparti da zero...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Visualizza Dashboard", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Tutte le impostazioni verranno sovrascritte utilizzando i dati di backup del {{time}} e uBlock sarà riavviato.\n\nSovrascrivere tutte le impostazioni esistenti con quelle del backup?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Visualizza registro richieste di rete", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "I dati non possono essere letti o non sono validi", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"disattivato", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Verranno cancellate tutte le impostazioni, e uBlock₀ sarà riavviato.\n\nResettare uBlock alle impostazioni di fabbrica?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ ha impedito alla seguente pagina di caricarsi:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Errore di rete: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"A causa del seguente filtro", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Aggiungere il seguente URL alla tua lista dei filtri personalizzata?\n\nTitolo: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"senza parametri", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "un minuto fa", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Trovato in:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minuti fa", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Torna indietro", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "un'ora fa", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Chiudi questa finestra", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} ore fa", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Disabilita blocco assoluto per {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "un giorno fa", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporaneamente", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} giorni fa", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanentemente", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Visualizza Dashboard", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Esporta nel cloud", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Visualizza registro richieste di rete", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importa dal cloud", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "disattivato", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importa da archivio cloud ed unisci con le impostazioni attuali", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ ha impedito alla seguente pagina di caricarsi:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "A causa del seguente filtro", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Nome di questo dispositivo:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "senza parametri", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Attenzione! Modifica queste impostazioni avanzate a tuo rischio e pericolo.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Trovato in:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Invia", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Torna indietro", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Salva i cambiamenti", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Chiudi questa finestra", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Ripristina", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Disabilita blocco assoluto per {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"byte", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporaneamente", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Consenti temporaneamente elementi multimediali di grandi dimensioni", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanentemente", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Esporta nel cloud", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importa dal cloud", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importa da archivio cloud ed unisci con le impostazioni attuali", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nome di questo dispositivo:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Attenzione! Modifica queste impostazioni avanzate a tuo rischio e pericolo.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Invia", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Salva i cambiamenti", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Ripristina", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Consenti temporaneamente elementi multimediali di grandi dimensioni", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/ja/messages.json b/src/_locales/ja/messages.json index 535e2f24b4ab0..20ca6aa68dc24 100644 --- a/src/_locales/ja/messages.json +++ b/src/_locales/ja/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"高効率ブロッカーが遂に登場。CPUとメモリーの負担を抑えます。", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "高効率ブロッカーが遂に登場。CPUとメモリーの負担を抑えます。", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — ダッシュボード", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — ダッシュボード", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":" 設定", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": " 設定", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"外部フィルター", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "外部フィルター", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Myフィルター", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Myフィルター", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Myルール", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Myルール", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"ホワイトリスト", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "ホワイトリスト", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — ネットワークリクエストログ", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — ネットワークリクエストログ", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"このプロジェクトについて", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "このプロジェクトについて", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"詳細設定", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "詳細設定", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"uBlock₀ の有効 \/ 無効を切り替えます。\n\nクリック: サイト全体 \nCtrl+クリック: このページのみ", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "uBlock₀ の有効 \/ 無効を切り替えます。\n\nクリック: サイト全体 \nCtrl+クリック: このページのみ", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"ブロックされたリクエスト", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "クリックで、このサイト全体において uBlock₀ を無効化します。\n\nCtrl+クリックで、このページでのみ uBlock₀ を無効化します。", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"このページ", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "クリックで、このサイトにおいて uBlock₀ を有効化します。", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}}個 か {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "ブロックされたリクエスト", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"インストールしてから", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "このページ", + "description": "English: on this page" }, - "popupOr":{ - "message":"or", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}}個 か {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"クリックしてダッシュボードを開く", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "インストールしてから", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"要素除去モードに移行", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "or", + "description": "English: or" }, - "popupTipPicker":{ - "message":"要素選択モードに移行", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "ダッシュボードを開く", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"リクエストログへ移動", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "要素除去モードに移行", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"このサイトのすべてのポップアップのブロックを切り替えます", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "要素選択モードに移行", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"このサイトの大部分のメディア要素のブロックを切り替えます", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "リクエストログを開く", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"このサイトの要素隠蔽フィルターを切り替える", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "このサイトのすべてのポップアップのブロックを切り替えます", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"このサイトでリモートのフォントをブロックするか切り替えます", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "クリックで、このサイトでのすべてのポップアップをブロックします", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"グローバルルール: この列にあるルールは、すべてのサイトに適用されます。", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "クリックで、このサイトでのすべてのポップアップがブロックされないようにします", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"ローカルルール: この列にあるルールは、現在のサイトのみに適用されます。\nローカルルールはグローバルルールを上書きします。", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "このサイトでの大きなメディア要素のブロックを切り替えます", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"変更を保存するにはクリックしてください。", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "クリックで、このサイトでの大きなメディア要素をブロックします", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"変更を元に戻すにはクリックしてください。", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "クリックで、このサイトでの大きなメディア要素がブロックされないようにします", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"すべて", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "このサイトの要素隠蔽フィルターを切り替えます", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"画像", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "クリックで、このサイトでの要素隠蔽フィルターを無効化します", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"サードパーティー", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "クリックで、このサイトでの要素隠蔽フィルターを有効化します", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"サードパーティ CSS\/イメージ", - "description":"" + "popupTipNoRemoteFonts": { + "message": "このサイトでのリモートフォントのブロックを切り替えます", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"インラインスクリプト", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "クリックで、このサイトでのリモートフォントをブロックします", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"ファーストパーティースクリプト", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "クリックで、このサイトでのリモートフォントがブロックされないようにします", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"サードパーティースクリプト", - "description":"" + "popupTipGlobalRules": { + "message": "グローバルルール: この列にあるルールは、すべてのサイトに適用されます。", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"サードパーティーフレーム", - "description":"" + "popupTipLocalRules": { + "message": "ローカルルール: この列にあるルールは、現在のサイトにのみ適用されます。\nローカルルールはグローバルルールを上書きします。", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"接続したドメイン", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "クリックで変更を保存します。", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} \/ {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "クリックで変更を元に戻します。", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"作成", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "すべて", + "description": "" }, - "pickerPick":{ - "message":"選択", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "画像", + "description": "" }, - "pickerQuit":{ - "message":"終了", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "サードパーティー", + "description": "" }, - "pickerPreview":{ - "message":"プレビュー", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "サードパーティ CSS\/イメージ", + "description": "" }, - "pickerNetFilters":{ - "message":"ネットフィルター", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "インラインスクリプト", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"要素隠蔽フィルター", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "ファーストパーティースクリプト", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"クリック、Ctrl+クリック", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "サードパーティースクリプト", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"要素をブロック", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "サードパーティーフレーム", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"ブロックされた要素の設置場所全てを非表示にする", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "接続したドメイン", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"ブロックされたリクエスト数をアイコンに表示する", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} \/ {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"ツールチップを無効にする", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "作成", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"コンテキストメニューを適切な場合に使用する", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "選択", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"uBlock₀を優しい色使いにする", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "終了", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"クラウドストレージのサポートを有効にする", - "description":"" + "pickerPreview": { + "message": "プレビュー", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"私は上級者です (※必ず読んでください<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "ネットフィルター", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"詳細設定", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "要素隠蔽フィルター", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"先読みを無効にする (ブロックされたネットワークへの接続を防止するため)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "クリック、Ctrl+クリック", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"ハイパーリンクの監査を無効にする", - "description":"English: " + "pickerContextMenuEntry": { + "message": "要素をブロック", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"ローカルIPアドレスの漏洩をもたらすWebRTCを防止する", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "ブロックされた要素の設置場所全てを非表示にする", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"デフォルトの動作", - "description":"" + "settingsIconBadgePrompt": { + "message": "ブロックされたリクエスト数をアイコンに表示する", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"これらのデフォルトの動作は、サイトごとに上書きできます", - "description":"" + "settingsTooltipsPrompt": { + "message": "ツールチップを無効にする", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"要素隠蔽フィルターを無効にする", - "description":"" + "settingsContextMenuPrompt": { + "message": "コンテキストメニューを適切な場合に使用する", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} kB より大きいメディア要素をブロックする", - "description":"" + "settingsColorBlindPrompt": { + "message": "色覚障害の人に見やすい色で表示する", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"リモートフォントをブロックする", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "クラウドストレージのサポートを有効にする", + "description": "" }, - "settingsStorageUsed":{ - "message":"使用中のストレージ: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "私は上級者です (※必ず読んでください<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"最後の復元:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "詳細設定", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"最後のバックアップ:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "先読みを無効にする (ブロックされたネットワークへの接続を防止するため)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} ネットワークフィルター+{{cosmeticFilterCount}} 要素隠蔽フィルター:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "ハイパーリンクの監査を無効にする", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}}個中{{used}}使用", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "ローカルIPアドレスの漏洩をもたらすWebRTCを防止する", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"フィルターリストを自動更新する", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "デフォルトの動作", + "description": "" }, - "3pUpdateNow":{ - "message":"今すぐ更新", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "これらのデフォルトの動作は、サイトごとに上書きできます", + "description": "" }, - "3pPurgeAll":{ - "message":"全キャッシュを削除", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "要素隠蔽フィルターを無効にする", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"要素隠蔽フィルターを解析、施行する", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "{{input:number}} kB より大きいメディア要素をブロックする", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

この機能を有効にするとuBlock₀の使用メモリーを増やします。<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "リモートフォントをブロックする", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"要素隠蔽フィルターを無視する", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "CSPレポートをブロックする", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

低スペックの環境では、このオプションを有効にすることを推奨します。", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "使用中のストレージ: {{value}} バイト", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"ブロックされたホストの一覧表示", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "最後の復元:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"適用", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "最後のバックアップ:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"広告", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}}個のネットワークフィルター+{{cosmeticFilterCount}}個の要素隠蔽フィルター:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"プライバシー", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}}個中{{used}}使用", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"ウイルス", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "フィルターリストを自動更新する", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"ソーシャル", - "description":"English: Social" + "3pUpdateNow": { + "message": "今すぐ更新", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"多目的", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "全キャッシュを削除", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"地域、言語", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "要素隠蔽フィルターを解析、施行する", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"カスタム", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

この機能を有効にするとuBlock₀の使用メモリーを増やします。<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"URL1つにつき1行です。‘!’ が先頭にある行は無視されます。無効なURLもそのまま無視されます。", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "要素隠蔽フィルターを無視する", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"新しいバージョンがあります", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

低スペックの環境では、このオプションを有効にすることを推奨します。", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"最終更新: {{ago}}\nクリックすると強制的に更新します", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "ブロックされたホストの一覧表示", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"更新中...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "適用", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"ネットワークエラーが発生したため、リソースを更新できませんでした。", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "広告", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"1行につき1つのフィルターです。フィルターはただのホストネームでもAdblock Plus適合のフィルターでも構いません。‘!’ですでに固定されている行は無視されます。", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "プライバシー", + "description": "English: Privacy" }, - "1pImport":{ - "message":"インポートと追加", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "ウイルス", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"エクスポート", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "迷惑系", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "多目的", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"変更を適用", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "地域、言語", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"恒久的なルール", - "description":"header" + "3pGroupCustom": { + "message": "カスタム", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"一時的なルール", - "description":"header" + "3pExternalListsHint": { + "message": "URL1つにつき1行です。‘!’ が先頭にある行は無視されます。無効なURLもそのまま無視されます。", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"元に戻す", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "古いバージョンです", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"コミット", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "最終更新: {{ago}}\nクリックすると強制的に更新します", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"編集", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "更新中...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"保存", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "ネットワークエラーが発生したため、リソースを更新できませんでした。", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"破棄", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "1行につき1つのフィルターです。フィルターはただのホストネームでもAdblock Plus適合のフィルターでも構いません。‘!’ですでに固定されている行は無視されます。", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"ファイルからインポート", - "description":"" + "1pImport": { + "message": "インポートと追加", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"ファイルへエクスポート", - "description":"" + "1pExport": { + "message": "エクスポート", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"ダイナミックフィルタリングルールのリスト", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "変更を適用", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"ルールの書き方: source destination type action<\/code> (詳しい説明<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "恒久的なルール", + "description": "header" }, - "whitelistPrompt":{ - "message":"uBlock₀が無効になるホスト名の一覧です。1行につき1つのエントリで、無効なホスト名は無視されます。", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "一時的なルール", + "description": "header" }, - "whitelistImport":{ - "message":"インポートと追加", - "description":"English: Import and append" + "rulesRevert": { + "message": "元に戻す", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"エクスポート", - "description":"English: Export" + "rulesCommit": { + "message": "コミット", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "編集", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"変更を適用", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "保存", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"タイプ", - "description":"English: Type" + "rulesEditDiscard": { + "message": "破棄", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"ドメイン", - "description":"English: Domain" + "rulesImport": { + "message": "ファイルからインポート", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "ファイルへエクスポート", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"フィルター", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"全て", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "ダイナミックフィルタリングルールのリスト", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"バックグラウンド通信", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "ルールの書き方: source destination type action<\/code> (詳しい説明<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"絞り込み", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "uBlock₀が無効になるホスト名の一覧です。1行につき1つのエントリで、無効なホスト名は無視されます。", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"ログの最大件数", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "インポートと追加", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"コンテキスト:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "エクスポート", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"タイプ: ", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"ダイナミックURLフィルタリング", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "変更を適用", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"静的フィルタリング", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "タイプ", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"ネットワークリクエストが {{type}} である場合に、{{br}}URLアドレスが {{url}} と一致し、{{br}}{{origin}} を発信源としている場合は {{action}} をします。{{br}}{{importance}} が存在する場合は例外フィルターと一致させます。", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "ドメイン", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"ブロック", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"許可", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "フィルター", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"タイプ \"{{type}}\"", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "全て", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"任意の種類", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "バックグラウンド通信", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"{{origin}} から", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "絞り込み", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"全体", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "ログの最大件数", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"例外", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "対象:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"非例外", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "タイプ:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"静的フィルター {{filter}} が見つかりました:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "動的URLフィルタリング", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"バージョン更新履歴 (Change log)", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "静的フィルタリング", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "URLアドレスが {{url}} と一致し、{{origin}} を発信源とする{{br}}ネットワークリクエストが {{type}} であれば、{{br}}要素を {{action}} する。{{br}}例外フィルターと一致する項目がある場合は {{importance}} とする。", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"サポート", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "ブロック", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"ソースコード (GPLバージョン3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "許可", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"貢献者達", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "タイプ \"{{type}}\"", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"ファイルにバックアップ...", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "任意のタイプ", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\" から", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"ファイルから復元...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "全体", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"初期設定にリセット", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "例外", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"{{time}}のバックアップデータを使用して全ての設定を上書きした後、uBlock₀が再起動します。\n\nバックアップデータを使用して既存の全ての設定の上書きしますか?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "非例外", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"データが無効、または読み込みができませんでした", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "静的フィルター {{filter}} が見つかりました:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"全ての設定が消去された後、uBlock₀が再起動します。\n\n初期設定にリセットしますか?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "バージョン更新履歴 (Change log)", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"ネットワークエラー: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: 以下のURLをカスタムフィルターに追加しますか?\n\nタイトル: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "サポート", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"1分前", - "description":"English: a minute ago" + "aboutCode": { + "message": "ソースコード (GPLバージョン3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} 分前", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "貢献者達", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"1時間前", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "ファイルにバックアップ...", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} 時間前", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"1日前", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "ファイルから復元...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} 日前", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "初期設定にリセット", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"ダッシュボードを表示", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "{{time}}のバックアップデータを使用してすべての設定を上書きした後、uBlock₀が再起動します。\n\nバックアップデータを使用して既存のすべての設定の上書きしますか?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"ネットワークリクエストログを表示", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "データが無効、または読み込みができませんでした", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"オフ", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "すべての設定が消去された後、uBlock₀が再起動します。\n\n初期設定にリセットしますか?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Originは、以下のページの読み込みを防いでいます:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "ネットワークエラー: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"以下のフィルターによる", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: 以下のURLをカスタムフィルターに追加しますか?\n\nタイトル: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"パラメーター未指定", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "1分前", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"次のフィルターで見つかりました:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} 分前", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"戻る", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "1時間前", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"このウィンドウを閉じる", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} 時間前", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"{{hostname}}の厳格なブロックを無効にする", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "1日前", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"一時的", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} 日前", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"恒久的", - "description":"English: Permanently" + "showDashboardButton": { + "message": "ダッシュボードを表示", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"クラウドストレージにエクスポート", - "description":"tooltip" + "showNetworkLogButton": { + "message": "ネットワークリクエストログを表示", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"クラウドストレージからインポート", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "オフ", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"クラウドストレージからインポートし、現在の設定と合併させます", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Originは、以下のページの読み込みを防いでいます:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "以下のフィルターによる", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"このデバイスの名前:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "パラメーター未指定", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"詳細設定での変更は、細心の注意を払って行ってください。", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "次のフィルターで見つかりました:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"適用", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "戻る", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"変更を適用", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "このウィンドウを閉じる", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"元に戻す", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "{{hostname}}の厳格なブロックを無効にする", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"バイト", - "description":"" + "docblockedDisableTemporary": { + "message": "一時的", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"一時的に大部分のメディア要素を許可", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "恒久的", + "description": "English: Permanently" }, - "dummy":{ - "message":"これは最後のエントリである必要があります", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "クラウドストレージにエクスポート", + "description": "tooltip" + }, + "cloudPull": { + "message": "クラウドストレージからインポート", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "クラウドストレージからインポートし、現在の設定と合併させます", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "このデバイスの名前:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "詳細設定での変更は、細心の注意を払って行ってください。", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "適用", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "変更を適用", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "元に戻す", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "バイト", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "一時的に大部分のメディア要素を許可", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "これは最後のエントリである必要があります", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/ka/messages.json b/src/_locales/ka/messages.json index 3f4e59b07ba6a..8f4765e65377d 100644 --- a/src/_locales/ka/messages.json +++ b/src/_locales/ka/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"როგორც იქნა, ეფექტური მბლოკავი. ზოგავს CPU-ს და მეხსიერებას.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "როგორც იქნა, ეფექტური მბლოკავი. ზოგავს CPU-ს და მეხსიერებას.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — სამართავი დაფა", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — სამართავი დაფა", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"პარამეტრები", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "პარამეტრები", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"მესამე მხრის ფილტრები", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "მესამე მხრის ფილტრები", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"ჩემი ფილტრები", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "ჩემი ფილტრები", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"ჩემი წესები", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "ჩემი წესები", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"თეთრი სია", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "თეთრი სია", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — მეჟურნალე", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — მეჟურნალე", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"შესახებ", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "შესახებ", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"ვრცელი პარამეტრები", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "ვრცელი პარამეტრები", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"დაწკაპუნება: ამ საიტისთვის uBlock-ის ჩართვა\/გამორთვა.\n\nCtrl+დაწკაპუნება: uBlock-ის მხოლოდ ამ გვერდზე გამორთვა.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "დაწკაპუნება: ამ საიტისთვის uBlock-ის ჩართვა\/გამორთვა.\n\nCtrl+დაწკაპუნება: uBlock-ის მხოლოდ ამ გვერდზე გამორთვა.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"დაბლოკილი მოთხოვნები", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"ამ გვერდზე", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} ან {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "დაბლოკილი მოთხოვნები", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"ინსტალაციის შემდეგ", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "ამ გვერდზე", + "description": "English: on this page" }, - "popupOr":{ - "message":"ან", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} ან {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"დააწპაკუნეთ სამართავი დაფის გასახსნელად", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "ინსტალაციის შემდეგ", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "ან", + "description": "English: or" }, - "popupTipPicker":{ - "message":"პიპეტის რეჟიმი", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "დააწპაკუნეთ სამართავი დაფის გასახსნელად", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"ქსელის მოთხოვნების ჟურნალი", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Toggle the blocking of all popups for this site", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "პიპეტის რეჟიმი", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"დიდი მედია ელემენტების ბლოკირების გადართვა ამ საიტისთვის", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "ქსელის მოთხოვნების ჟურნალი", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"კოსმეტიკური ფილტრაციის გადართვა ამ საიტისთვის", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Toggle the blocking of all popups for this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"დაშორებული შრიფტების ბლოკირების გადართვა ამ საიტისთვის", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"გლობალური წესები: ეს სვეტი არის წესებისთვის, რომლებიც მოქმედებს ყველა საიტზე.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"ლოკალური წესები: ეს სვეტი არის წესებისთვის, რომლებიც მოქმედებს მხოლოდ მიმდინარე საიტზე.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "დიდი მედია ელემენტების ბლოკირების გადართვა ამ საიტისთვის", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"დააწკაპუნეთ შეტანილი ცვლილებების პერმანენტულად ქცევისთვის.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"დააწკაპუნეთ შეტანილი ცვლილებების გაუქმებისთვის.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"ყველა", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "კოსმეტიკური ფილტრაციის გადართვა ამ საიტისთვის", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"ნახატები", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"მესამე მხარე", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"მესამე მხრის css\/ნახატები", - "description":"" + "popupTipNoRemoteFonts": { + "message": "დაშორებული შრიფტების ბლოკირების გადართვა ამ საიტისთვის", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"ჩასმული სკრიპტები", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"1-ლი მხრის სკრიპტები", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"მე-3 მხრის სკრიპტები", - "description":"" + "popupTipGlobalRules": { + "message": "გლობალური წესები: ეს სვეტი არის წესებისთვის, რომლებიც მოქმედებს ყველა საიტზე.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"მე-3 მხრის ჩარჩოები", - "description":"" + "popupTipLocalRules": { + "message": "ლოკალური წესები: ეს სვეტი არის წესებისთვის, რომლებიც მოქმედებს მხოლოდ მიმდინარე საიტზე.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"დაკავშირებული დომენები", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "დააწკაპუნეთ შეტანილი ცვლილებების პერმანენტულად ქცევისთვის.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{total}}-დან {{count}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "დააწკაპუნეთ შეტანილი ცვლილებების გაუქმებისთვის.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"შექმნა", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "ყველა", + "description": "" }, - "pickerPick":{ - "message":"არჩევა", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "ნახატები", + "description": "" }, - "pickerQuit":{ - "message":"გამოსვლა", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "მესამე მხარე", + "description": "" }, - "pickerPreview":{ - "message":"გადახედვა", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "მესამე მხრის css\/ნახატები", + "description": "" }, - "pickerNetFilters":{ - "message":"ქსელის ფილტრები", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "ჩასმული სკრიპტები", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"კოსმეტიკური ფილტრები", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "1-ლი მხრის სკრიპტები", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl + დაწკაპუნება", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "მე-3 მხრის სკრიპტები", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"ელემენტის დაბლოკვა", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "მე-3 მხრის ჩარჩოები", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"დაბლოკილი ელემენტების ადგილის შემავსებლის დამალვა", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "დაკავშირებული დომენები", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"ხატულაზე დაბლოკილი მოთხოვნების რაოდენობის ჩვენება", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{total}}-დან {{count}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"კარნახების გამორთვა", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "შექმნა", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"კონტექსტური მენიუს გამოყენება, როდესაც ეს ხელსაყრელია", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "არჩევა", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"ფერთა კორექცია დალტონიკებისთვის", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "გამოსვლა", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"ღრუბლოვანი მეხსიერების მხარდაჭერის ჩართვა", - "description":"" + "pickerPreview": { + "message": "გადახედვა", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"მე ვარ გამოცდილი მომხმარებელი (აუცილებლად წასაკითხი<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "ქსელის ფილტრები", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"ვრცელი პარამეტრები", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "კოსმეტიკური ფილტრები", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"წინასწარი ჩატვირთვის გათიშვა (კავშირების თავიდან ასარიდებლად დაბლოკილი ქსელური მოთხოვნებისათვის)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl + დაწკაპუნება", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disable hyperlink auditing", - "description":"English: " + "pickerContextMenuEntry": { + "message": "ელემენტის დაბლოკვა", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"WebRTC-სთვის ხელის შეშლა ლოკალური IP მისამართის გაჟონვაში", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "დაბლოკილი ელემენტების ადგილის შემავსებლის დამალვა", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"ნაგულისხმევი ქცევა", - "description":"" + "settingsIconBadgePrompt": { + "message": "ხატულაზე დაბლოკილი მოთხოვნების რაოდენობის ჩვენება", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"These default behaviors can be overridden on a per-site basis", - "description":"" + "settingsTooltipsPrompt": { + "message": "კარნახების გამორთვა", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Disable cosmetic filtering", - "description":"" + "settingsContextMenuPrompt": { + "message": "კონტექსტური მენიუს გამოყენება, როდესაც ეს ხელსაყრელია", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Block media elements larger than {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "ფერთა კორექცია დალტონიკებისთვის", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Block remote fonts", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "ღრუბლოვანი მეხსიერების მხარდაჭერის ჩართვა", + "description": "" }, - "settingsStorageUsed":{ - "message":"Storage used: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "მე ვარ გამოცდილი მომხმარებელი (აუცილებლად წასაკითხი<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Last restore:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "ვრცელი პარამეტრები", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Last backup:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "წინასწარი ჩატვირთვის გათიშვა (კავშირების თავიდან ასარიდებლად დაბლოკილი ქსელური მოთხოვნებისათვის)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} used out of {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC-სთვის ხელის შეშლა ლოკალური IP მისამართის გაჟონვაში", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Auto-update filter lists", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "ნაგულისხმევი ქცევა", + "description": "" }, - "3pUpdateNow":{ - "message":"განაახლე ახლა", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" }, - "3pPurgeAll":{ - "message":"Purge all caches", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Parse and enforce cosmetic filters", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Storage used: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Last restore:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Apply changes", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"რეკლამები", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"კონფიდენციალურობა", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"მავნე დომეინები", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Auto-update filter lists", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"სოციალური ქსელები", - "description":"English: Social" + "3pUpdateNow": { + "message": "განაახლე ახლა", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"უნივერსალური", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"რეგიონები, ენები", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"საკუთარი სიები", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"მოძველებული", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"ბოლო განახლება: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Updating...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"A network error prevented the resource from being updated.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "რეკლამები", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "კონფიდენციალურობა", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Import and append", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "მავნე დომეინები", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"გამოტანა", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "უნივერსალური", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"ცვლილებების მისადაგება", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "რეგიონები, ენები", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"მუდმივი წესები", - "description":"header" + "3pGroupCustom": { + "message": "საკუთარი სიები", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"დროებითი წესები", - "description":"header" + "3pExternalListsHint": { + "message": "One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"დაბრუნება", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "მოძველებული", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"მიბარება", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "ბოლო განახლება: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"რედაქტირება", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Updating...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"შენახვა", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"უკუგდება", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"ფაილიდან შემოტანა...", - "description":"" + "1pImport": { + "message": "Import and append", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"ფაილად გამოტანა", - "description":"" + "1pExport": { + "message": "გამოტანა", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"List of your dynamic filtering rules.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "ცვლილებების მისადაგება", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "მუდმივი წესები", + "description": "header" }, - "whitelistPrompt":{ - "message":"The whitelist directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "დროებითი წესები", + "description": "header" }, - "whitelistImport":{ - "message":"Import and append", - "description":"English: Import and append" + "rulesRevert": { + "message": "დაბრუნება", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Export", - "description":"English: Export" + "rulesCommit": { + "message": "მიბარება", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "რედაქტირება", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"ცვლილებების მისადაგება", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "შენახვა", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"ტიპი", - "description":"English: Type" + "rulesEditDiscard": { + "message": "უკუგდება", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domain", - "description":"English: Domain" + "rulesImport": { + "message": "ფაილიდან შემოტანა...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "ფაილად გამოტანა", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"ფილტრი", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"ყველა", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"სცენის უკან", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Rule syntax: source destination type action<\/code> (full documentation<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filter log entries", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "The whitelist directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maximum number of log entries", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Import and append", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"კონტექსტი:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Export", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"ტიპი:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamic URL filtering", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "ცვლილებების მისადაგება", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Static filtering", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "ტიპი", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"დაბლოკვა", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"დაშვება", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "ფილტრი", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "ყველა", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"any type", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "სცენის უკან", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"from “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filter log entries", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"from anywhere", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maximum number of log entries", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"except when", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "კონტექსტი:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"even if", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "ტიპი:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamic URL filtering", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"ცვლილებათა ჟურნალი", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Static filtering", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "დაბლოკვა", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"წყაროს კოდი (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "დაშვება", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"დამხმარეები", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"ფაილში დამარქაფება", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ჩემი-ublock-მარქაფი_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"აღდგენა ფაილიდან...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"ნაგულისხმევ პარამეტრებზე დაბრუნება...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "ცვლილებათა ჟურნალი", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Network error: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Support", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"a minute ago", - "description":"English: a minute ago" + "aboutCode": { + "message": "წყაროს კოდი (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutes ago", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "დამხმარეები", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"an hour ago", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "ფაილში დამარქაფება", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} hours ago", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ჩემი-ublock-მარქაფი_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"a day ago", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "აღდგენა ფაილიდან...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} days ago", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "ნაგულისხმევ პარამეტრებზე დაბრუნება...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Show Dashboard", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Show Logger", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"off", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Network error: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Because of the following filter", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"without parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "a minute ago", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Found in:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minutes ago", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Go back", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "an hour ago", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Close this window", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} hours ago", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Disable strict blocking for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "a day ago", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporarily", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} days ago", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanently", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Export to cloud storage", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Import from cloud storage", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Import from cloud storage and merge with current settings", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Because of the following filter", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"This device name:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warning! Change these advanced settings at your own risk.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Found in:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Submit", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Go back", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Apply changes", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Close this window", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Revert", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporarily", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Temporarily allow large media elements", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanently", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "This device name:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Submit", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Revert", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/kn/messages.json b/src/_locales/kn/messages.json index b74f019df6532..f68f732d35d39 100644 --- a/src/_locales/kn/messages.json +++ b/src/_locales/kn/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"ಯುಬ್ಲಾಕ್", - "description":"extension name." + "extName": { + "message": "ಯುಬ್ಲಾಕ್", + "description": "extension name." }, - "extShortDesc":{ - "message":"ಕೊನೆಗೂ, ಒಂದು ದಕ್ಷ ನಿರ್ಬಂಧಕ. ಮಿತವಾದ ಸಿಪಿಯೂ ಹಾಗು ಮೆಮೊರಿ ಬಳಕೆ.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "ಕೊನೆಗೂ, ಒಂದು ದಕ್ಷ ನಿರ್ಬಂಧಕ. ಮಿತವಾದ ಸಿಪಿಯೂ ಹಾಗು ಮೆಮೊರಿ ಬಳಕೆ.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ - ಡ್ಯಾಶ್ಬೋರ್ಡು", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ - ಡ್ಯಾಶ್ಬೋರ್ಡು", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"ಬದಲಾವಣೆ", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "ಬದಲಾವಣೆ", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"೩ನೇ ವ್ಯಕ್ತಿ ಶೋಧಕಗಳು", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "೩ನೇ ವ್ಯಕ್ತಿ ಶೋಧಕಗಳು", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"ನನ್ನ ಶೋಧಕಗಳು", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "ನನ್ನ ಶೋಧಕಗಳು", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"ನನ್ನ ನಿಯಮಗಳು", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "ನನ್ನ ನಿಯಮಗಳು", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"ಬಿಳಿಪಟ್ಟಿ", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "ಬಿಳಿಪಟ್ಟಿ", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — ಜಾಲ ವಿನಂತಿಗಳ ದಾಖಲೆ", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — ಜಾಲ ವಿನಂತಿಗಳ ದಾಖಲೆ", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"ಕುರಿತು", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "ಕುರಿತು", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"ಸುಧಾರಿತ ಆಯ್ಕೆಗಳು", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "ಸುಧಾರಿತ ಆಯ್ಕೆಗಳು", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"ಕ್ಲಿಕ್: ಈ ಜಾಲತಾಣಕ್ಕೆ ನಿಷ್ಕ್ರಿಯ\/ಸಕ್ರಿಯಗೊಳಿಸಲು.\nಕಂಟ್ರೋಲ್ + ಕ್ಲಿಕ್: ಈ ಜಾಲತಾಣಕ್ಕೆ ಮಾತ್ರ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "ಕ್ಲಿಕ್: ಈ ಜಾಲತಾಣಕ್ಕೆ ನಿಷ್ಕ್ರಿಯ\/ಸಕ್ರಿಯಗೊಳಿಸಲು.\nಕಂಟ್ರೋಲ್ + ಕ್ಲಿಕ್: ಈ ಜಾಲತಾಣಕ್ಕೆ ಮಾತ್ರ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"ಬೇಡಿಕೆಗಳನ್ನು ತಡೆಹಿಡಿಯಲಾಗಿದೆ", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"ಈ ಪುಟದಲ್ಲಿ", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} ಅಥವಾ {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "ಬೇಡಿಕೆಗಳನ್ನು ತಡೆಹಿಡಿಯಲಾಗಿದೆ", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"ಅನುಸ್ಥಾಪಿಸಿದ ಈಚೆಗೆ", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "ಈ ಪುಟದಲ್ಲಿ", + "description": "English: on this page" }, - "popupOr":{ - "message":"ಅಥವಾ", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} ಅಥವಾ {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"ಡ್ಯಾಶ್ಬೋರ್ಡು ತೆರೆಯಲು ಕ್ಲಿಕಿಸಿ", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "ಅನುಸ್ಥಾಪಿಸಿದ ಈಚೆಗೆ", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "ಅಥವಾ", + "description": "English: or" }, - "popupTipPicker":{ - "message":"ಅಂಶ ಆಯ್ವಿಕೆ ಕ್ರಮಕ್ಕೆ ದಾಖಲಾಗಿ", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "ಡ್ಯಾಶ್ಬೋರ್ಡು ತೆರೆಯಲು ಕ್ಲಿಕಿಸಿ", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"ಜಾಲ ವಿನಂತಿಗಳ ದಾಖಲೆಗೆ ಹೋಗಿ", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"ಈ ಜಾಲತಾಣದ ಎಲ್ಲಾ ಪಾಪ್ಅಪ್ ಗಳ ನಿರ್ಬಂಧವನ್ನು ಟಾಗಲ್ ಮಾಡಿ", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "ಅಂಶ ಆಯ್ವಿಕೆ ಕ್ರಮಕ್ಕೆ ದಾಖಲಾಗಿ", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Toggle the blocking of large media elements for this site", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "ಜಾಲ ವಿನಂತಿಗಳ ದಾಖಲೆಗೆ ಹೋಗಿ", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"ಈ ಜಾಲತಾಣಕ್ಕೆ ಕಾಸ್ಮೆಟಿಕ್ ಫಿಲ್ಟರಿಂಗನ್ನು ಟಾಗಲ್ ಮಾಡಿ", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "ಈ ಜಾಲತಾಣದ ಎಲ್ಲಾ ಪಾಪ್ಅಪ್ ಗಳ ನಿರ್ಬಂಧವನ್ನು ಟಾಗಲ್ ಮಾಡಿ", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"ಈ ಜಾಲತಾಣಕ್ಕೆ ದೂರಸ್ಥ ಅಕ್ಷರಶೈಲಿಯ ನಿರ್ಬಂಧವನ್ನು ಟಾಗಲ್ ಮಾಡಿ", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Global rules: this column is for rules which apply to all sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Toggle the blocking of large media elements for this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Click to make your changes permanent.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Click to revert your changes.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"ಎಲ್ಲಾ", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "ಈ ಜಾಲತಾಣಕ್ಕೆ ಕಾಸ್ಮೆಟಿಕ್ ಫಿಲ್ಟರಿಂಗನ್ನು ಟಾಗಲ್ ಮಾಡಿ", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"ಚಿತ್ರಗಳು", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"೩ನೇ ವ್ಯಕ್ತಿ", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"೩ನೇ ವ್ಯಕ್ತಿ ಸಿಎಸ್ಸೇಸು\/ಚಿತ್ರಗಳು", - "description":"" + "popupTipNoRemoteFonts": { + "message": "ಈ ಜಾಲತಾಣಕ್ಕೆ ದೂರಸ್ಥ ಅಕ್ಷರಶೈಲಿಯ ನಿರ್ಬಂಧವನ್ನು ಟಾಗಲ್ ಮಾಡಿ", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"ಒಳಸಾಲಿನ ಸ್ಕ್ರಿಪ್ಟುಗಳು", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"೧ನೇ ವ್ಯಕ್ತಿ ಸ್ಕ್ರಿಪ್ಟುಗಳು", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"೩ನೇ ವ್ಯಕ್ತಿ ಸ್ಕ್ರಿಪ್ಟುಗಳು", - "description":"" + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"೩ನೇ ವ್ಯಕ್ತಿ ಫ್ರೇಮುಗಳು", - "description":"" + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"ಸಂಪರ್ಕ ಹೊಂದಿರುವ ಡೊಮೈನ್ಗಳು", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Click to make your changes permanent.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{total}} ರಲ್ಲಿ {{count}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"ರಚಿಸಿ", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "ಎಲ್ಲಾ", + "description": "" }, - "pickerPick":{ - "message":"ಆಯ್ಕೆ", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "ಚಿತ್ರಗಳು", + "description": "" }, - "pickerQuit":{ - "message":"ತ್ಯಜಿಸಿ", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "೩ನೇ ವ್ಯಕ್ತಿ", + "description": "" }, - "pickerPreview":{ - "message":"Preview", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "೩ನೇ ವ್ಯಕ್ತಿ ಸಿಎಸ್ಸೇಸು\/ಚಿತ್ರಗಳು", + "description": "" }, - "pickerNetFilters":{ - "message":"ನಿವ್ವಳ ಫಿಲ್ಟರುಗಳು", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "ಒಳಸಾಲಿನ ಸ್ಕ್ರಿಪ್ಟುಗಳು", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"ಕಾಸ್ಮೆಟಿಕ್ ಫಿಲ್ಟರುಗಳು", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "೧ನೇ ವ್ಯಕ್ತಿ ಸ್ಕ್ರಿಪ್ಟುಗಳು", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"ಕ್ಲಿಕ್, ಕಂಟ್ರೋಲ್-ಕ್ಲಿಕ್", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "೩ನೇ ವ್ಯಕ್ತಿ ಸ್ಕ್ರಿಪ್ಟುಗಳು", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"ಭಾಗ ತಡೆಹಿಡಿಯಿರಿ", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "೩ನೇ ವ್ಯಕ್ತಿ ಫ್ರೇಮುಗಳು", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"ನಿರ್ಬಂಧಿಸಿದ ಭಾಗಗಳಿರುವ ಪ್ಲೇಸ್ಹೋಲ್ಡರ್ಸ್ ಮರೆಮಾಡಿ", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "ಸಂಪರ್ಕ ಹೊಂದಿರುವ ಡೊಮೈನ್ಗಳು", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Show the number of blocked requests on the icon", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{total}} ರಲ್ಲಿ {{count}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Disable tooltips", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "ರಚಿಸಿ", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Make use of context menu where appropriate", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "ಆಯ್ಕೆ", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"ಬಣ್ಣ ಅಂಧತೆ ಉಪಯುಕ್ತ", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "ತ್ಯಜಿಸಿ", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Enable cloud storage support", - "description":"" + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"I am an advanced user (required reading<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "ನಿವ್ವಳ ಫಿಲ್ಟರುಗಳು", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"advanced settings", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "ಕಾಸ್ಮೆಟಿಕ್ ಫಿಲ್ಟರುಗಳು", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disable pre-fetching (to prevent any connection for blocked network requests)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "ಕ್ಲಿಕ್, ಕಂಟ್ರೋಲ್-ಕ್ಲಿಕ್", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disable hyperlink auditing", - "description":"English: " + "pickerContextMenuEntry": { + "message": "ಭಾಗ ತಡೆಹಿಡಿಯಿರಿ", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Prevent WebRTC from leaking local IP addresses", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "ನಿರ್ಬಂಧಿಸಿದ ಭಾಗಗಳಿರುವ ಪ್ಲೇಸ್ಹೋಲ್ಡರ್ಸ್ ಮರೆಮಾಡಿ", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Default behavior", - "description":"" + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"These default behaviors can be overridden on a per-site basis", - "description":"" + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Disable cosmetic filtering", - "description":"" + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Block media elements larger than {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "ಬಣ್ಣ ಅಂಧತೆ ಉಪಯುಕ್ತ", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Block remote fonts", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" }, - "settingsStorageUsed":{ - "message":"Storage used: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "I am an advanced user (required reading<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Last restore:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Last backup:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} used out of {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"ಶೋಧಕ ಪಟ್ಟಿಗಳನ್ನು ಸ್ವಯಂ ನವೀಕರಿಸಿ.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" }, - "3pUpdateNow":{ - "message":"ಈಗ ನವೀಕರಿಸಿ", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" }, - "3pPurgeAll":{ - "message":"Purge all caches", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Parse and enforce cosmetic filters", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Storage used: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Last restore:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಿ", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"ಜಾಹಿರಾತು", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"ಗೌಪ್ಯತೆ", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Malware domains", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "ಶೋಧಕ ಪಟ್ಟಿಗಳನ್ನು ಸ್ವಯಂ ನವೀಕರಿಸಿ.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"ಸಾಮಾಜಿಕ", - "description":"English: Social" + "3pUpdateNow": { + "message": "ಈಗ ನವೀಕರಿಸಿ", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"ಬಹುಪಯೋಗಿ", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"ಪ್ರದೇಶಗಳು, ಭಾಷೆಗಳು", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"ಇಚ್ಛೆಯ", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"ಹಳೆಯದು", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Last update: {{ago}}.\nClick to force an update.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Updating...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಿ", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"A network error prevented the resource from being updated.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "ಜಾಹಿರಾತು", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "ಗೌಪ್ಯತೆ", + "description": "English: Privacy" }, - "1pImport":{ - "message":"ಆಮದಿಸಿ ಸೇರ್ಪಡಿಸು", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Malware domains", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"ರಫ್ತು", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "ಬಹುಪಯೋಗಿ", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಿ", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "ಪ್ರದೇಶಗಳು, ಭಾಷೆಗಳು", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"ಶಾಶ್ವತ ನಿಯಮಗಳು", - "description":"header" + "3pGroupCustom": { + "message": "ಇಚ್ಛೆಯ", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"ತಾತ್ಕಾಲಿಕ ನಿಯಮಗಳು", - "description":"header" + "3pExternalListsHint": { + "message": "One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"ಹಿಂತಿರುಗಿಸಿ", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "ಹಳೆಯದು", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"ಕಮಿಟ್", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"ಸಂಪಾದಿಸಿ", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Updating...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"ಉಳಿಸು", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"ತ್ಯಜಿಸಿ", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Import from file...", - "description":"" + "1pImport": { + "message": "ಆಮದಿಸಿ ಸೇರ್ಪಡಿಸು", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Export to file", - "description":"" + "1pExport": { + "message": "ರಫ್ತು", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"List of your dynamic filtering rules.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "ಬದಲಾವಣೆಗಳನ್ನು ಅನ್ವಯಿಸಿ", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "ಶಾಶ್ವತ ನಿಯಮಗಳು", + "description": "header" }, - "whitelistPrompt":{ - "message":"The whitelist directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "ತಾತ್ಕಾಲಿಕ ನಿಯಮಗಳು", + "description": "header" }, - "whitelistImport":{ - "message":"Import and append", - "description":"English: Import and append" + "rulesRevert": { + "message": "ಹಿಂತಿರುಗಿಸಿ", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Export", - "description":"English: Export" + "rulesCommit": { + "message": "ಕಮಿಟ್", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "ಸಂಪಾದಿಸಿ", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Apply changes", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "ಉಳಿಸು", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "rulesEditDiscard": { + "message": "ತ್ಯಜಿಸಿ", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domain", - "description":"English: Domain" + "rulesImport": { + "message": "Import from file...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Export to file", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"ಎಲ್ಲಾ", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Behind the scene", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Rule syntax: source destination type action<\/code> (full documentation<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filter log entries", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "The whitelist directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maximum number of log entries", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Import and append", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Export", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamic URL filtering", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Apply changes", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Static filtering", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Block", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Allow", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "ಎಲ್ಲಾ", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"any type", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Behind the scene", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"from “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filter log entries", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"from anywhere", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maximum number of log entries", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"except when", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"even if", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamic URL filtering", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Change log", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Static filtering", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"ವಿಕಿ", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Block", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Source code (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Allow", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"ನೀಡುಗರು", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Back up to file", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Restore from file...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Reset to default settings...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Change log", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Network error: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "ವಿಕಿ", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Support", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"ಒಂದು ನಿಮಿಷದ ಹಿಂದೆ", - "description":"English: a minute ago" + "aboutCode": { + "message": "Source code (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} ನಿಮಿಷದ ಹಿಂದೆ", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "ನೀಡುಗರು", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"ಒಂದು ತಾಸಿನ ಹಿಂದೆ", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Back up to file", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} ತಾಸಿನ ಹಿಂದೆ", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"ಒಂದು ದಿನದ ಹಿಂದೆ", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Restore from file...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} ದಿನದ ಹಿಂದೆ", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Reset to default settings...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Show Dashboard", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Show Logger", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"off", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Network error: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Because of the following filter", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"without parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "ಒಂದು ನಿಮಿಷದ ಹಿಂದೆ", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Found in:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} ನಿಮಿಷದ ಹಿಂದೆ", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"ಹಿಂದೆ ಹೋಗಿ", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "ಒಂದು ತಾಸಿನ ಹಿಂದೆ", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"ಈ ವಿಂಡೋವನ್ನು ಮುಚ್ಚಿ", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} ತಾಸಿನ ಹಿಂದೆ", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Disable strict blocking for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "ಒಂದು ದಿನದ ಹಿಂದೆ", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"ತಾತ್ಕಾಲಿಕವಾಗಿ", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} ದಿನದ ಹಿಂದೆ", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"ಶಾಶ್ವತವಾಗಿ", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Export to cloud storage", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Import from cloud storage", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Import from cloud storage and merge with current settings", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Because of the following filter", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"ಈ ಸಾಧನದ ಹೆಸರು:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warning! Change these advanced settings at your own risk.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Found in:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"ಸಲ್ಲಿಸಿ", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "ಹಿಂದೆ ಹೋಗಿ", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Apply changes", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "ಈ ವಿಂಡೋವನ್ನು ಮುಚ್ಚಿ", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"ಹಿಂತಿರುಗಿಸಿ", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"ಬೈಟ್ಗಳು", - "description":"" + "docblockedDisableTemporary": { + "message": "ತಾತ್ಕಾಲಿಕವಾಗಿ", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Temporarily allow large media elements", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "ಶಾಶ್ವತವಾಗಿ", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "ಈ ಸಾಧನದ ಹೆಸರು:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "ಸಲ್ಲಿಸಿ", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "ಹಿಂತಿರುಗಿಸಿ", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "ಬೈಟ್ಗಳು", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/ko/messages.json b/src/_locales/ko/messages.json index ca83fadb1a26b..8e71b6b0a22c5 100644 --- a/src/_locales/ko/messages.json +++ b/src/_locales/ko/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"이 부가 기능은 효율적인 차단기입니다. CPU와 메모리에 주는 부담이 적습니다.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "이 부가 기능은 효율적인 차단기입니다. CPU와 메모리에 주는 부담이 적습니다.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — 대쉬보드", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — 대시보드", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"설정", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "설정", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"보조 필터", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "보조 필터", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"내 필터", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "내 필터", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"내 규칙", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "내 규칙", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"제외 목록", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "제외 목록", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — 로그", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — 로그", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"정보", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "정보", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"고급 설정", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "고급 설정", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"클릭: 이 사이트에서 uBlock₀을 켜고 끕니다.\n\nCtrl+클릭: 이 페이지에서 uBlock₀을 끕니다.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "클릭: 이 사이트에서 uBlock₀을 켜고 끕니다.\n\nCtrl+클릭: 이 페이지에서 uBlock₀을 끕니다.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"요청 차단됨", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "클릭: 이 사이트에서 uBlock₀을 끕니다.\n\nCtrl+클릭: 이 페이지에서 uBlock₀을 끕니다.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"이 페이지에서", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "클릭하여 이 사이트에서 uBlock₀ 을 켭니다.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}}개 \/ {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "요청 차단됨", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"설치된 이후", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "이 페이지에서", + "description": "English: on this page" }, - "popupOr":{ - "message":"\/", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}}개 \/ {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"클릭하여 대쉬보드 열기", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "설치된 이후", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"구성 요소 선택기 모드로 진입", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "\/", + "description": "English: or" }, - "popupTipPicker":{ - "message":"구성 요소 선택기 모드로 진입", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "클릭하여 대시보드 열기", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"로그로 이동", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "구성 요소 선택기 모드로 진입", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"이 사이트에서 팝업 차단 토글", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "구성 요소 선택기 모드로 진입", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"이 사이트에서만 적용되는 대형 미디어 구성요소 차단 기능을 켜고 끕니다.", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "로그로 이동", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"이 사이트에서 시각적 필터링 토글", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "이 사이트에서 팝업 차단 토글", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"이 사이트에서 글꼴조정 차단 토글", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "클릭하여 이 사이트에서 모든 팝업을 차단합니다.", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"공용 규칙: 이 열은 모든 사이트에 적용되는 규칙 열 입니다.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "클릭하여 이 사이트에서 모든 팝업 차단을 해제합니다.", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"로컬 규칙: 이 열은 현재 사이트만 적용되는 규칙 열 입니다.\n로컬 규칙은 공용 규칙보다 우선권을 가지고 있습니다.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "이 사이트에서만 적용되는 대형 미디어 구성요소 차단 기능을 켜고 끕니다.", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"클릭하여 변경사항을 저장합니다.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "클릭하여 이 사이트에서 대용량의 미디어를 차단합니다.", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"클릭하여 변경사항 적용을 되돌립니다.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "클릭하여 이 사이트에서 대용량의 미디어 차단을 해제합니다.", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"전체", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "이 사이트에서 시각적 필터링 토글", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"이미지", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "클릭하여 이 사이트에서 시각적 필터링을 끕니다.", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"보조 필터", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "클릭하여 이 사이트에서 시각적 필터링을 켭니다.", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"보조 CSS\/이미지", - "description":"" + "popupTipNoRemoteFonts": { + "message": "이 사이트에서 글꼴조정 차단 토글", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"인라인 스크립트", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "클릭하여 이 사이트에서 외부 폰트를 차단합니다.", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"주 스크립트", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "클릭하여 이 사이트에서 더 이상 외부 폰트를 차단하지 않습니다.", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"보조 스크립트", - "description":"" + "popupTipGlobalRules": { + "message": "공용 규칙: 이 열은 모든 사이트에 적용되는 규칙 열 입니다.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"보조 프레임", - "description":"" + "popupTipLocalRules": { + "message": "로컬 규칙: 이 열은 현재 사이트만 적용되는 규칙 열 입니다.\n로컬 규칙은 공용 규칙보다 우선권을 가지고 있습니다.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"도메인 연결됨", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "클릭하여 변경사항을 저장합니다.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{total}}개 중 {{count}}개", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "클릭하여 변경사항 적용을 되돌립니다.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"생성", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "전체", + "description": "" }, - "pickerPick":{ - "message":"선택", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "이미지", + "description": "" }, - "pickerQuit":{ - "message":"종료", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "보조 필터", + "description": "" }, - "pickerPreview":{ - "message":"미리보기", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "보조 CSS\/이미지", + "description": "" }, - "pickerNetFilters":{ - "message":"넷 필터", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "인라인 스크립트", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"표면 필터", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "주 스크립트", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"클릭, Ctrl-클릭", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "보조 스크립트", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"구성 요소 차단", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "보조 프레임", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"차단된 구성 요소의 자리 감추기", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "도메인 연결됨", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"차단된 요청 개수를 아이콘에 표시", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{total}}개 중 {{count}}개", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"툴팁 비활성화", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "생성", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"컨텍스트 메뉴를 상황에 맞게 사용", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "선택", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"색맹 최적화", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "종료", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"클라우드 저장소 활성화", - "description":"" + "pickerPreview": { + "message": "미리보기", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"고급 사용자 모드 (필수로 읽어야 할 내용<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "넷 필터", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"고급 설정", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "표면 필터", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"프리-페칭 비활성화 (차단된 네트워크 요청에 대해 모든 접속요청 방지)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "클릭, Ctrl-클릭", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"하이퍼링크 검사 비활성화", - "description":"English: " + "pickerContextMenuEntry": { + "message": "구성 요소 차단", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"WebRTC로부터 로컬 IP 주소 유출을 방지", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "차단된 구성 요소의 자리 감추기", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"기본 동작", - "description":"" + "settingsIconBadgePrompt": { + "message": "차단된 요청 개수를 아이콘에 표시", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"이 기본 동작들은 사이트 별로 정의 할 수 있습니다.", - "description":"" + "settingsTooltipsPrompt": { + "message": "툴팁 비활성화", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"표면 필터 비활성화", - "description":"" + "settingsContextMenuPrompt": { + "message": "컨텍스트 메뉴를 상황에 맞게 사용", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"{{input:number}} KB 보다 큰 미디어 구성요소 차단", - "description":"" + "settingsColorBlindPrompt": { + "message": "색맹 최적화", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"글꼴 조종 차단", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "클라우드 저장소 활성화", + "description": "" }, - "settingsStorageUsed":{ - "message":"스토리지 사용량: {{value}} 바이트", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "고급 사용자 모드 (필수로 읽어야 할 내용<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"최근 복원:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "고급 설정", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"최근 백업:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "프리-페칭 비활성화 (차단된 네트워크 요청에 대해 모든 접속요청 방지)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} 네트워크 필터 + {{cosmeticFilterCount}} 표면 필터:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "하이퍼링크 검사 비활성화", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}}개 중 {{used}}개 사용 중", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC로부터 로컬 IP 주소 유출을 방지", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"필터 목록 자동 업데이트", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "기본 동작", + "description": "" }, - "3pUpdateNow":{ - "message":"지금 업데이트", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "이 기본 동작들은 사이트 별로 정의 할 수 있습니다.", + "description": "" }, - "3pPurgeAll":{ - "message":"모든 캐시 제거", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "표면 필터 비활성화", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"표면 필터 분석 및 적용", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "{{input:number}} KB 보다 큰 미디어 구성요소 차단", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

이 기능을 활성화하면 uBlock₀<\/i>의 메모리 사용량이 증가합니다.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "글꼴 조종 차단", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"전체적 표면 필터 무시", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "CSP 보고서 차단", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

저전력 기기에 사용하는 것을 권장합니다.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "스토리지 사용량: {{value}} 바이트", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"차단된 호스트 목록", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "최근 복원:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"변경사항 적용", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "최근 백업:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"광고", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} 네트워크 필터 + {{cosmeticFilterCount}} 표면 필터:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"개인정보", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}}개 중 {{used}}개 사용 중", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"멀웨어 도메인", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "필터 목록 자동 업데이트", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"소셜", - "description":"English: Social" + "3pUpdateNow": { + "message": "지금 업데이트", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"다목적", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "모든 캐시 제거", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"지역, 언어", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "표면 필터 분석 및 적용", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"사용자 지정", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

이 기능을 활성화하면 uBlock₀<\/i>의 메모리 사용량이 증가합니다.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"한 줄에 한 개의 URL을 입력하세요. 시작 부분이 ‘!’ 로 시작되면 무시됩니다. 존재하지 않는 URL은 자동으로 무시됩니다.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "전체적 표면 필터 무시", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"구버전", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

저전력 기기에 사용하는 것을 권장합니다.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"마지막 업데이트: {{ago}}\n업데이트하려면 여기를 클릭하세요.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "차단된 호스트 목록", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"업데이트 중...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "변경사항 적용", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"네트워크 오류로 인해 리소스가 업데이트되지 못했습니다.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "광고", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"한 줄에 한 개의 필터를 입력하세요. 필터는 순수 호스트이름, 혹은 Adblock Plus-호환 필터가 될 수 있습니다. 시작 부분이 ‘!’ 로 시작되면 무시됩니다.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "개인정보", + "description": "English: Privacy" }, - "1pImport":{ - "message":"가져오기 및 추가하기", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "멀웨어 도메인", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"내보내기", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "성가신 것", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-고정필터_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "다목적", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"변경사항 적용", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "지역, 언어", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"영구 규칙", - "description":"header" + "3pGroupCustom": { + "message": "사용자 지정", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"임시 규칙", - "description":"header" + "3pExternalListsHint": { + "message": "한 줄에 한 개의 URL을 입력하세요. 시작 부분이 ‘!’ 로 시작되면 무시됩니다. 존재하지 않는 URL은 자동으로 무시됩니다.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"되돌리기", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "구버전", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"제출", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "마지막 업데이트: {{ago}}\n업데이트하려면 여기를 클릭하세요.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"편집", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "업데이트 중...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"저장", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "네트워크 오류로 인해 리소스가 업데이트되지 못했습니다.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"취소", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "한 줄에 한 개의 필터를 입력하세요. 필터는 순수 호스트이름, 혹은 Adblock Plus-호환 필터가 될 수 있습니다. 시작 부분이 ‘!’ 로 시작되면 무시됩니다.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"파일로부터 불러오기...", - "description":"" + "1pImport": { + "message": "가져오기 및 추가하기", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"파일로 내보내기...", - "description":"" + "1pExport": { + "message": "내보내기", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"ublock-동적규칙_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-고정필터_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"동적 필터링 규칙 목록입니다.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "변경사항 적용", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"규칙 문법: 소스 페이지, 필터링 대상, 필터링할 타입, 적용할 조치<\/code> (전체 설명서<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "영구 규칙", + "description": "header" }, - "whitelistPrompt":{ - "message":"목록에 있는 호스트들은 uBlock₀에서 비활성화됩니다. 한 줄에 한 개씩 입력하세요. 존재하지 않는 호스트는 무시 및 주석 처리됩니다.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "임시 규칙", + "description": "header" }, - "whitelistImport":{ - "message":"가져오기 및 추가하기", - "description":"English: Import and append" + "rulesRevert": { + "message": "되돌리기", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"내보내기", - "description":"English: Export" + "rulesCommit": { + "message": "제출", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"ublock-제외목록_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "편집", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"변경사항 적용", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "저장", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"유형", - "description":"English: Type" + "rulesEditDiscard": { + "message": "취소", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"도메인", - "description":"English: Domain" + "rulesImport": { + "message": "파일로부터 불러오기...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "파일로 내보내기...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"필터", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "ublock-동적규칙_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"전체", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "동적 필터링 규칙 목록입니다.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"숨겨진 구성 요소", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "규칙 문법: 소스 페이지, 필터링 대상, 필터링할 타입, 적용할 조치<\/code> (전체 설명서<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"필터 로그 항목", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "목록에 있는 호스트들은 uBlock₀에서 비활성화됩니다. 한 줄에 한 개씩 입력하세요. 존재하지 않는 호스트는 무시 및 주석 처리됩니다.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"로그 항목의 최대 갯수", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "가져오기 및 추가하기", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"페이지:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "내보내기", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"유형:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "ublock-제외목록_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"동적 URL 필터링", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "변경사항 적용", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"고정 필터링", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "유형", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"네트워크 요청이 {{type}} 일 경우,{{br}}URL 주소가 {{url}} 와 일치하고{{br}}{{origin}} 에서 비롯 되었을 경우 {{action}} 한다.{{br}}그리고 다음 예외 필터와 일치할 경우 {{importance}} 한다.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "도메인", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"차단", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"허용", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "필터", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"\"{{type}}\" 종류", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "전체", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"모든 종류", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "숨겨진 구성 요소", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"\"{{origin}}\"", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "필터 로그 항목", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"전체", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "로그 항목의 최대 갯수", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"예외 처리", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "페이지:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"비 예외 처리", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "유형:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"{{filter}} 에서 찾은 고정 필터:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "동적 URL 필터링", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"변경사항", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "고정 필터링", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"위키", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "네트워크 요청이 {{type}} 일 경우,{{br}}URL 주소가 {{url}} 와 일치하고{{br}}{{origin}} 에서 비롯 되었을 경우 {{action}} 한다.{{br}}그리고 다음 예외 필터와 일치할 경우 {{importance}} 한다.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"지원", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "차단", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"소스 코드 (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "허용", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"기여자", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "\"{{type}}\" 종류", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"파일로 백업하기", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "모든 종류", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-백업_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\"", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"파일로부터 복원하기...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "전체", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"기본 설정으로 초기화...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "예외 처리", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"모든 설정은 {{time}}에 백업된 데이터에 덮어씌워지며, uBlock₀이 재시작됩니다.\n\n모든 존재하는 설정을 백업 데이터로 덮어씌우시겠습니까?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "비 예외 처리", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"데이터를 읽을 수 없거나 잘못되었습니다.", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "{{filter}} 에서 찾은 고정 필터:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"모든 설정이 제거되며, uBlock₀이 재시작됩니다.\n\nuBlock₀의 설정을 처음 설정으로 초기화하시겠습니까?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "변경사항", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"네트워크 오류: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "위키", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: 선택한 URL을 사용자 지정 필터 목록에 추가하시겠습니까?\n\n제목: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "지원", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"1 분 전", - "description":"English: a minute ago" + "aboutCode": { + "message": "소스 코드 (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} 분 전", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "기여자", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"1 시간 전", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "파일로 백업하기", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} 시간 전", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-백업_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"1 일 전", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "파일로부터 복원하기...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} 일 전", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "기본 설정으로 초기화...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"대쉬보드 보기", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "모든 설정은 {{time}}에 백업된 데이터에 덮어씌워지며, uBlock₀이 재시작됩니다.\n\n모든 존재하는 설정을 백업 데이터로 덮어씌우시겠습니까?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"로그 보기", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "데이터를 읽을 수 없거나 잘못되었습니다.", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"끄기", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "모든 설정이 제거되며, uBlock₀이 재시작됩니다.\n\nuBlock₀의 설정을 처음 설정으로 초기화하시겠습니까?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin이 다음 페이지를 로드하는것을 방지했습니다:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "네트워크 오류: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"다음 필터로 인해 방지됨", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: 선택한 URL을 사용자 지정 필터 목록에 추가하시겠습니까?\n\n제목: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"제외 매개 변수", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "1 분 전", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"다음 필터에서 찾음:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} 분 전", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"돌아가기", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "1 시간 전", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"이 창을 닫기", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} 시간 전", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"{{hostname}}에서 엄격 차단기능 끄기", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "1 일 전", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"이번만", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} 일 전", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"항상", - "description":"English: Permanently" + "showDashboardButton": { + "message": "대쉬보드 보기", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"클라우드 저장소로 내보내기", - "description":"tooltip" + "showNetworkLogButton": { + "message": "로그 보기", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"클라우드 저장소로부터 가져오기", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "끄기", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"클라우드 저장소의 설정 불러오기 및 현재 설정과 통합", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin이 다음 페이지를 로드하는것을 방지했습니다:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "다음 필터로 인해 방지됨", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"현재 기기의 이름:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "제외 매개 변수", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"경고! 고급 옵션을 변경하여 발생하는 문제는 사용자에게 있습니다.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "다음 필터에서 찾음:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"제출", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "돌아가기", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"변경사항 적용", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "이 창을 닫기", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"되돌리기", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "{{hostname}}에서 엄격 차단기능 끄기", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"바이트", - "description":"" + "docblockedDisableTemporary": { + "message": "이번만", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"이번만 대형 미디어 구성요소 허용", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "항상", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "클라우드 저장소로 내보내기", + "description": "tooltip" + }, + "cloudPull": { + "message": "클라우드 저장소로부터 가져오기", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "클라우드 저장소의 설정 불러오기 및 현재 설정과 통합", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "현재 기기의 이름:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "경고! 고급 옵션을 변경하여 발생하는 문제는 사용자에게 있습니다.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "제출", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "변경사항 적용", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "되돌리기", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "바이트", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "이번만 대형 미디어 구성요소 허용", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/lt/messages.json b/src/_locales/lt/messages.json index 9a544a1ace9ed..fdeda38d1c542 100644 --- a/src/_locales/lt/messages.json +++ b/src/_locales/lt/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Pagaliau, efektyvus blokatorius, neapkraunantis nei procesoriaus, nei darbinės atminties.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Pagaliau, efektyvus blokatorius, neapkraunantis nei procesoriaus, nei darbinės atminties.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Prietaisų skydas", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Prietaisų skydas", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Nustatymai", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Nustatymai", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"3-iųjų šalių filtrai", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "3-iųjų šalių filtrai", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Mano filtrai", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Mano filtrai", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Mano taisyklės", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mano taisyklės", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Išimtys", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Išimtys", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Žurnalas", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Žurnalas", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Apie", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Apie", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Sudėtingesni nustatymai", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Sudėtingesni nustatymai", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Spustelėjimas: įjungti\/išjungti uBlock₀ šiam puslapiui.\n\nVald+spustelėjimas: išjungti uBlock₀ tik šiam puslapiui.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Spustelėjimas: įjungti\/išjungti uBlock₀ šiam puslapiui.\n\nVald+spustelėjimas: išjungti uBlock₀ tik šiam puslapiui.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"blokuotos užklausos", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Spustelėkite, kad išjungtumėte uBlock₀ šiai svetainei.\n\nVald+spustelėkite, kad išjungtumėte uBlock₀ tik šiam puslapiui.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"šiame puslapyje", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Spustelėkite, kad įjungtumėte uBlock₀ šiai svetainei.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} arba {{percent}} %", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "blokuotos užklausos", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"nuo įdiegimo", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "šiame puslapyje", + "description": "English: on this page" }, - "popupOr":{ - "message":"arba", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} arba {{percent}} %", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Spustelėkite prietaisų skydui atverti", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "nuo įdiegimo", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Atverti elementų trynimo veikseną", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "arba", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Atverti elementų parinkimo veikseną", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Atverti prietaisų skydą", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Atverti žurnalą", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Atverti elementų trynimo veikseną", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Perjungti visų iškylančiųjų langų blokavimą šiame puslapyje", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Atverti elementų parinkimo veikseną", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Perjungti didelių medijos elementų blokavimą šiame puslapyje", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Atverti žurnalą", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Perjungti kosmetinį filtravimą šiame puslapyje", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Perjungti visų iškylančiųjų langų blokavimą šiame puslapyje", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Perjungti nuotolinių šriftų blokavimą šiame puslapyje", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Spustelėkite visų iškylančių langų blokavimui šioje svetainėje", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globalios taisyklės: ši skiltis skirta visiems puslapiams taikomoms taisyklėms.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Spustelėkite visų iškylančių langų neblokavimui šioje svetainėje", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Vietinės taisyklės: ši skiltis skirta dabartiniam puslapiui taikomoms taisyklėms.\nVietinės taisyklės nustelbia globalias.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Perjungti didelių medijos elementų blokavimą šiame puslapyje", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Spauskite pakeitimams padaryti pastoviais.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Spustelėkite didelių medijos elementų blokavimui šioje svetainėje", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Spauskite pakeitimams atstatyti.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Spustelėkite didelių medijos elementų neblokavimui šioje svetainėje", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"visi", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Perjungti kosmetinį filtravimą šiame puslapyje", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"vaizdai", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Spustelėkite kosmetinių filtrų išjungimui šioje svetainėje", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"trečios šalies", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Spustelėkite kosmetinių filtrų įjungimui šioje svetainėje", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"3-ios šalies css\/paveikslai", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Perjungti nuotolinių šriftų blokavimą šiame puslapyje", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"įterptieji scenarijai", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Spustelėkite nutolusių šriftų blokavimui šioje svetainėje", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"1-os šalies scenarijai", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Spustelėkite nutolusių šriftų neblokavimui šioje svetainėje", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"3-ios šalies scenarijai", - "description":"" + "popupTipGlobalRules": { + "message": "Globalios taisyklės: ši skiltis skirta visiems puslapiams taikomoms taisyklėms.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"3-ios šalies rėmeliai", - "description":"" + "popupTipLocalRules": { + "message": "Vietinės taisyklės: ši skiltis skirta dabartiniam puslapiui taikomoms taisyklėms.\nVietinės taisyklės nustelbia globalias.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"jungtasi prie sričių", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Spauskite pakeitimams padaryti pastoviais.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} iš {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Spauskite pakeitimams atstatyti.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Sukurti", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "visi", + "description": "" }, - "pickerPick":{ - "message":"Parinkti", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "vaizdai", + "description": "" }, - "pickerQuit":{ - "message":"Baigti", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "trečios šalies", + "description": "" }, - "pickerPreview":{ - "message":"Peržiūra", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "3-ios šalies css\/paveikslai", + "description": "" }, - "pickerNetFilters":{ - "message":"Tinklo filtrai", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "įterptieji scenarijai", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kosmetiniai filtrai", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "1-os šalies scenarijai", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Spustelėjimas, Vald-spustelėjimas", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "3-ios šalies scenarijai", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blokuoti elementą", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "3-ios šalies rėmeliai", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Slėpti blokuotų elementų rezervuotą vietą", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "jungtasi prie sričių", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Rodyti blokuotų užklausų skaičių piktogramoje", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} iš {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Išjungti paaiškinimus", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Sukurti", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Kur tinka, naudoti kontekstinį meniu", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Parinkti", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Draugiškas neskiriantiems spalvų", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Baigti", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Įjungti nuotolinės saugyklos palaikymą", - "description":"" + "pickerPreview": { + "message": "Peržiūra", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Aš esu patyręs naudotojas (privaloma perskaityti<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Tinklo filtrai", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"sudėtingesni nustatymai", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kosmetiniai filtrai", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Išjungti išankstinį gavimą (visiems blokuotų tinklo užklausų prisijungimams išvengti)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Spustelėjimas, Vald-spustelėjimas", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Išjungti saitų auditą", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blokuoti elementą", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Neleisti WebRTC atskleisti vietinio IP adreso", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Slėpti blokuotų elementų rezervuotą vietą", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Numatytoji elgsena", - "description":"" + "settingsIconBadgePrompt": { + "message": "Rodyti blokuotų užklausų skaičių piktogramoje", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Šios numatytosios elgsenos gali būti nustelbtos kiekvienam puslapiui atskirai", - "description":"" + "settingsTooltipsPrompt": { + "message": "Išjungti paaiškinimus", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Išjungti kosmetinius filtrus", - "description":"" + "settingsContextMenuPrompt": { + "message": "Kur tinka, naudoti kontekstinį meniu", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokuoti medijos elementus didesnius nei {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Draugiškas neskiriantiems spalvų", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokuoti nuotolinius šriftus", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Įjungti nuotolinės saugyklos palaikymą", + "description": "" }, - "settingsStorageUsed":{ - "message":"Naudojama vietos: {{value}} baitų", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Aš esu patyręs naudotojas (privaloma perskaityti<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Paskutinis atkūrimas:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "sudėtingesni nustatymai", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Paskutinė atsarginė kopija:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Išjungti išankstinį gavimą (visiems blokuotų tinklo užklausų prisijungimams išvengti)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"Tinklo filtrų ({{netFilterCount}}) + kosmetinių filtrų ({{cosmeticFilterCount}}) iš:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Išjungti saitų auditą", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"naudojama {{used}} iš {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Neleisti WebRTC atskleisti vietinio IP adreso", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Automatiškai atnaujinti filtrų sąrašus.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Numatytoji elgsena", + "description": "" }, - "3pUpdateNow":{ - "message":"Atnaujinti dabar", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Šios numatytosios elgsenos gali būti nustelbtos kiekvienam puslapiui atskirai", + "description": "" }, - "3pPurgeAll":{ - "message":"Valyti visus podėlius", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Išjungti kosmetinius filtrus", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analizuoti ir taikyti kosmetinius filtrus.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blokuoti medijos elementus didesnius nei {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Šios nuostatos įjungimas padidina uBlock₀ atminties naudojimą.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blokuoti nuotolinius šriftus", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignoruoti daugybinius kosmetinius filtrus.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Blokuoti CSP ataskaitas", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Rekomenduojama įjungti šį nustatymą mažiau galinguose įrenginiuose.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Naudojama vietos: {{value}} baitų", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Blokuotų serverių sąrašas", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Paskutinis atkūrimas:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Taikyti pakeitimus", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Paskutinė atsarginė kopija:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklamos", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "Tinklo filtrų ({{netFilterCount}}) + kosmetinių filtrų ({{cosmeticFilterCount}}) iš:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privatumas", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "naudojama {{used}} iš {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Kenksmingos sritys", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Automatiškai atnaujinti filtrų sąrašus.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Socialiniai", - "description":"English: Social" + "3pUpdateNow": { + "message": "Atnaujinti dabar", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Univarsalūs", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Valyti visus podėlius", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regionai, kalbos", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analizuoti ir taikyti kosmetinius filtrus.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Adaptuoti", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Šios nuostatos įjungimas padidina uBlock₀ atminties naudojimą.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Vienas URL eilutėje. Eilutės pradėtos „!“ bus ignoruotos. Neteisingi URL bus tyliai ignoruoti.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignoruoti daugybinius kosmetinius filtrus.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Pasenęs.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Rekomenduojama įjungti šį nustatymą mažiau galinguose įrenginiuose.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Paskutinis atnaujinimas: {{ago}}.\nIeškoti atnaujinimo.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Blokuotų serverių sąrašas", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Atnaujinama...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Taikyti pakeitimus", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Tinklo klaida sutrukdė atnaujinti resursą.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklamos", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Vienas filtras eilutėje. Filtras gali būti paprastas serverio adresas, arba su Adblock Plus suderinamas filtras. Eilutės pradėtos „!“ bus ignoruotos. ", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privatumas", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importuoti ir papildyti", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Kenksmingos sritys", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Eksportuoti", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Erzinimas", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"mano-ublock-statiniai-filtrai_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Univarsalūs", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Taikyti pakeitimus", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regionai, kalbos", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Pastovios taisyklės", - "description":"header" + "3pGroupCustom": { + "message": "Adaptuoti", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Laikinos taisyklės", - "description":"header" + "3pExternalListsHint": { + "message": "Vienas URL eilutėje. Eilutės pradėtos „!“ bus ignoruotos. Neteisingi URL bus tyliai ignoruoti.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Atstatyti", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Pasenęs.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Pritaikyti", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Paskutinis atnaujinimas: {{ago}}.\nIeškoti atnaujinimo.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Redaguoti", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Atnaujinama...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Įrašyti", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Tinklo klaida sutrukdė atnaujinti resursą.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Atmesti", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Vienas filtras eilutėje. Filtras gali būti paprastas serverio adresas, arba su Adblock Plus suderinamas filtras. Eilutės pradėtos „!“ bus ignoruotos. ", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importuoti iš failo...", - "description":"" + "1pImport": { + "message": "Importuoti ir papildyti", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Eksportuoti į failą", - "description":"" + "1pExport": { + "message": "Eksportuoti", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"mano-ublock-dinaminės-taisyklės_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "mano-ublock-statiniai-filtrai_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Dinaminių filtravimo taisyklių sąrašas.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Taikyti pakeitimus", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Taisyklės sintaksė: šaltinis paskirtis tipas veiksmas<\/code> (dokumentacija<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Pastovios taisyklės", + "description": "header" }, - "whitelistPrompt":{ - "message":"Baltojo sąrašo direktyvos nurodo, kurioms svetainėms uBlock Origin turėtų būti išjungtas. Vienas įrašas eilutėje. Neteisingos direktyvos bus tyliai ignoruotos ir užkomentuotos.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Laikinos taisyklės", + "description": "header" }, - "whitelistImport":{ - "message":"Importuoti ir papildyti", - "description":"English: Import and append" + "rulesRevert": { + "message": "Atstatyti", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Eksportuoti", - "description":"English: Export" + "rulesCommit": { + "message": "Pritaikyti", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"mano-ublock-išimtys_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Redaguoti", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Taikyti pakeitimus", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Įrašyti", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tipas", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Atmesti", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Sritis", - "description":"English: Domain" + "rulesImport": { + "message": "Importuoti iš failo...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Eksportuoti į failą", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtras", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "mano-ublock-dinaminės-taisyklės_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Visos", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Dinaminių filtravimo taisyklių sąrašas.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Užkulisiai", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Taisyklės sintaksė: šaltinis paskirtis tipas veiksmas<\/code> (dokumentacija<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtruoti žurnalo įrašus", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Baltojo sąrašo direktyvos nurodo, kurioms svetainėms uBlock Origin turėtų būti išjungtas. Vienas įrašas eilutėje. Neteisingos direktyvos bus tyliai ignoruotos ir užkomentuotos.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Didžiausias žurnalo įrašų skaičius", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importuoti ir papildyti", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekstas:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Eksportuoti", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipas:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "mano-ublock-išimtys_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dinaminis URL filtravimas", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Taikyti pakeitimus", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statinis filtravimas", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tipas", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} {{type}} tinklo užklausas, {{br}}kur URL adresas atitinka {{url}} {{br}}ir kurios kyla {{origin}},{{br}}{{importance}} yra atitinkantis išimties filtras.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Sritis", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokuoti", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Leisti", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtras", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"„{{type}}“ tipo", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Visos", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"bet kokio tipo", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Užkulisiai", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"iš „{{origin}}“", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtruoti žurnalo įrašus", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"bet kur", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Didžiausias žurnalo įrašų skaičius", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"išskyrus kai", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kontekstas:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"net jei", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tipas:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statinis filtras {{filter}} rastas:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dinaminis URL filtravimas", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Pakeitimų žurnalas", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statinis filtravimas", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Viki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} {{type}} tinklo užklausas, {{br}}kur URL adresas atitinka {{url}} {{br}}ir kurios kyla {{origin}},{{br}}{{importance}} yra atitinkantis išimties filtras.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Palaikymas", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokuoti", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Pirminis tekstas (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Leisti", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Talkininkai", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "„{{type}}“ tipo", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Padaryti atsarginę kopiją į failą", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "bet kokio tipo", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"mano-ublock-atsarginė_kopija_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "iš „{{origin}}“", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Atkurti iš failo...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "bet kur", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Atkurti numatytuosius nustatymus...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "išskyrus kai", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Visi jūsų nustatymai bus perrašyti naudojant duomenis iš {{time}} atsarginės kopijos, o uBlock₀ bus perleistas.\n\nPerrašyti visus nustatymus naudojant atsarginės kopijos duomenis?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "net jei", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Nepavyko nuskaityti duomenų arba jie neteisingi", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statinis filtras {{filter}} rastas:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Visi jūsų nustatymai bus pašalinti, o uBlock₀ bus perleistas.\n\nAtkurti uBlock₀ pradinius nustatymus?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Pakeitimų žurnalas", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Tinklo klaida: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Viki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Pridėti šį URL į jūsų adaptuotų filtrų sąrašą?\n\nPavadinimas: „{{title}}“\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Palaikymas", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"prieš minutę", - "description":"English: a minute ago" + "aboutCode": { + "message": "Pirminis tekstas (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"prieš {{value}} min.", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Talkininkai", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"prieš valandą", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Padaryti atsarginę kopiją į failą", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"prieš {{value}} val.", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "mano-ublock-atsarginė_kopija_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"prieš dieną", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Atkurti iš failo...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"prieš {{value}} d.", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Atkurti numatytuosius nustatymus...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Rodyti prietaisų skydą", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Visi jūsų nustatymai bus perrašyti naudojant duomenis iš {{time}} atsarginės kopijos, o uBlock₀ bus perleistas.\n\nPerrašyti visus nustatymus naudojant atsarginės kopijos duomenis?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Rodyti žurnalą", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Nepavyko nuskaityti duomenų arba jie neteisingi", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"išjungta", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Visi jūsų nustatymai bus pašalinti, o uBlock₀ bus perleistas.\n\nAtkurti uBlock₀ pradinius nustatymus?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin neleido įkelti šio puslapio:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Tinklo klaida: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Dėl šio filtro", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Pridėti šį URL į jūsų adaptuotų filtrų sąrašą?\n\nPavadinimas: „{{title}}“\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"be parametrų", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "prieš minutę", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Rasta:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "prieš {{value}} min.", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Grįžti", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "prieš valandą", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Užverti langą", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "prieš {{value}} val.", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Išjungti griežtą {{hostname}} blokavimą", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "prieš dieną", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Laikinai", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "prieš {{value}} d.", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Negrįžtamai", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Rodyti prietaisų skydą", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Eksportuoti į nuotolinę saugyklą", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Rodyti žurnalą", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importuoti iš nuotolinės saugyklos", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "išjungta", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importuoti iš nuotolinės saugyklos ir sulieti su dabartiniais nustatymais", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin neleido įkelti šio puslapio:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Dėl šio filtro", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Šio įrenginio vardas:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "be parametrų", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Įspėjimas! Keiskite šiuos sudėtingesnius nustatymus savo rizika.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Rasta:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Pateikti", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Grįžti", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Taikyti pakeitimus", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Užverti langą", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Atstatyti", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Išjungti griežtą {{hostname}} blokavimą", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"baitai", - "description":"" + "docblockedDisableTemporary": { + "message": "Laikinai", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Laikinai leisti didelius medijos elementus", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Negrįžtamai", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Eksportuoti į nuotolinę saugyklą", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importuoti iš nuotolinės saugyklos", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importuoti iš nuotolinės saugyklos ir sulieti su dabartiniais nustatymais", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Šio įrenginio vardas:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Įspėjimas! Keiskite šiuos sudėtingesnius nustatymus savo rizika.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Pateikti", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Taikyti pakeitimus", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Atstatyti", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "baitai", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Laikinai leisti didelius medijos elementus", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/lv/messages.json b/src/_locales/lv/messages.json index 56628a89ff35c..06e3b91bf807d 100644 --- a/src/_locales/lv/messages.json +++ b/src/_locales/lv/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Beidzot, efektīvs bloķētājs. Nepārslogo procesoru un atmiņu.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Beidzot, efektīvs bloķētājs. Nepārslogo procesoru un atmiņu.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Vadības panelis", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Vadības panelis", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Iestatījumi", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Iestatījumi", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Trešo pušu filtri", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Trešo pušu filtri", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Mani filtri", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Mani filtri", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Mani noteikumi", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mani noteikumi", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Atļautais saraksts", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Atļautais saraksts", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Tīkla pieprasījumu žurnāls", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Tīkla pieprasījumu žurnāls", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Par", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Par", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Papildu iestatījumi", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Papildu iestatījumi", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klikšķis: atslēgt\/ieslēgt uBlock₀ šajā vietnē.\n\nCtrl+klikšķis: atslēgt uBlock₀ tikai šai lapai.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klikšķis: atslēgt\/ieslēgt uBlock₀ šajā vietnē.\n\nCtrl+klikšķis: atslēgt uBlock₀ tikai šai lapai.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"bloķētie pieprasījumi", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"šajā lapā", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} vai {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "bloķētie pieprasījumi", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"kopš instalācijas brīža", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "šajā lapā", + "description": "English: on this page" }, - "popupOr":{ - "message":"vai", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} vai {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Noklikšķiniet, lai atvērtu vadības paneli", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "kopš instalācijas brīža", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "vai", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Ienākt elementa atlasītāju režīmā", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Atvērt vadības paneli", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Doties uz pieprasījumu žurnālu", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Pārslēgt uznirstošo logu bloķēšanu šajā vietnē", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Ienākt elementa atlasītāju režīmā", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Pārslēgt lielu multivides elementu bloķēšanu šajā vietnē", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Doties uz pieprasījumu žurnālu", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Pārslēgt kosmētisko filtrēšanu šajā vietnē", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Pārslēgt uznirstošo logu bloķēšanu šajā vietnē", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Pārslēgt ārējo fontu bloķēšanu šajā vietnē", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globālie ierobežojumi: šī kolonna paredzēta ierobežojumiem, kas attieksies uz visām mājaslapām.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Vietējie ierobežojumi: šī kolonna paredzēta ierobežojumiem, kas attieksies tikai uz konkrēto mājaslapu.\nVietējie ierobežojumi pārraksta globālos ierobežojumus.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Pārslēgt lielu multivides elementu bloķēšanu šajā vietnē", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Nokliķšķināt šeit, lai saglabātu izmaiņas.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Noklikšķināt šeit, lai atceltu izmaiņas.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"Visi", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Pārslēgt kosmētisko filtrēšanu šajā vietnē", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"attēli", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"No trešajām pusēm", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"3rd-party css\/attēli", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Pārslēgt ārējo fontu bloķēšanu šajā vietnē", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"inline skripti", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"1st-party skripti", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"3rd-party skripti", - "description":"" + "popupTipGlobalRules": { + "message": "Globālie ierobežojumi: šī kolonna paredzēta ierobežojumiem, kas attieksies uz visām mājaslapām.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"3rd-party freimi", - "description":"" + "popupTipLocalRules": { + "message": "Vietējie ierobežojumi: šī kolonna paredzēta ierobežojumiem, kas attieksies tikai uz konkrēto mājaslapu.\nVietējie ierobežojumi pārraksta globālos ierobežojumus.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"savienotie domēni", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Nokliķšķināt šeit, lai saglabātu izmaiņas.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} no {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Noklikšķināt šeit, lai atceltu izmaiņas.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Izveidot", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "Visi", + "description": "" }, - "pickerPick":{ - "message":"Izvēlēties", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "attēli", + "description": "" }, - "pickerQuit":{ - "message":"Iziet", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "No trešajām pusēm", + "description": "" }, - "pickerPreview":{ - "message":"Priekšskatījums", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "3rd-party css\/attēli", + "description": "" }, - "pickerNetFilters":{ - "message":"Resursu filtri", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "inline skripti", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Vizuālie filtri", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "1st-party skripti", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Click, Ctrl-click", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "3rd-party skripti", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Bloķēt elementu", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "3rd-party freimi", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Paslēpt vietu no bloķētā elementa", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "savienotie domēni", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Parādīt bloķēto pieprasījumu skaitu uz ikonas", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} no {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Atslēgt rīka padomus (tooltips)", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Izveidot", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Izmantot konteksta izvēlni vajadzības gadījumā", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Izvēlēties", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Daltoniķiem draudzīgs", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Iziet", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Aktivizēt mākoņdatu glabāšanas atbalstu", - "description":"" + "pickerPreview": { + "message": "Priekšskatījums", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Es esmu pieredzējis lietotājs (Vēlams izlasīt<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Resursu filtri", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"papildu iestatījumi", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Vizuālie filtri", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Atslēgt pirmsielādi (lai novērstu bloķētus tīkla pieprasījumus)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Click, Ctrl-click", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Atslēgt tīmekļa saišu izsekošanu", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Bloķēt elementu", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Novērst savas IP adreses noplūdi ar WebRTC", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Paslēpt vietu no bloķētā elementa", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Noklusējuma darbība", - "description":"" + "settingsIconBadgePrompt": { + "message": "Parādīt bloķēto pieprasījumu skaitu uz ikonas", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Šos uzstādījumus var mainīt katrai vietnei atsevišķi", - "description":"" + "settingsTooltipsPrompt": { + "message": "Atslēgt rīka padomus (tooltips)", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Atslēgt kosmētiskos filtrus", - "description":"" + "settingsContextMenuPrompt": { + "message": "Izmantot konteksta izvēlni vajadzības gadījumā", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloķēt multivides elementus kas lielāki par {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Daltoniķiem draudzīgs", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloķēt ārējos fontus", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Aktivizēt mākoņdatu glabāšanas atbalstu", + "description": "" }, - "settingsStorageUsed":{ - "message":"Izmantotais krātuves lielums: {{value}} baiti", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Es esmu pieredzējis lietotājs (Vēlams izlasīt<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Pēdējā atjaunošana veikta:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "papildu iestatījumi", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Pēdējā rezerves kopija:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Atslēgt pirmsielādi (lai novērstu bloķētus tīkla pieprasījumus)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} tīkla filtri + {{cosmeticFilterCount}} kosmētikas filtri no:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Atslēgt tīmekļa saišu izsekošanu", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} izmanto no {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Novērst savas IP adreses noplūdi ar WebRTC", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Automātiski atjaunināt filtra sarakstus.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Noklusējuma darbība", + "description": "" }, - "3pUpdateNow":{ - "message":"Atjaunināt tūlīt", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Šos uzstādījumus var mainīt katrai vietnei atsevišķi", + "description": "" }, - "3pPurgeAll":{ - "message":"Visas kešatmiņas iztīrīšana", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Atslēgt kosmētiskos filtrus", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Apstrādāt un izpildīt kosmētikas filtrus.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Bloķēt multivides elementus kas lielāki par {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Šī līdzekļa iespējošana palielina uBlock₀<\/i> izmantojamās atmiņas daudzumu.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Bloķēt ārējos fontus", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorēt vispārīgos kosmētiskos filtrus", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Bloķēt CSP atskaites", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Izmantotais krātuves lielums: {{value}} baiti", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Bloķēto hostu saraksti", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Pēdējā atjaunošana veikta:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Lietot izmaiņas", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Pēdējā rezerves kopija:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklāmas", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} tīkla filtri + {{cosmeticFilterCount}} kosmētikas filtri no:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Konfidencialitāte", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} izmanto no {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Ļaundabīgo programmu domēni", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Automātiski atjaunināt filtra sarakstus.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Sociālie tīkli", - "description":"English: Social" + "3pUpdateNow": { + "message": "Atjaunināt tūlīt", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Daudzfunkcionālie", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Visas kešatmiņas iztīrīšana", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Reģionālie, valodas", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Apstrādāt un izpildīt kosmētikas filtrus.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Lietotāja", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Šī līdzekļa iespējošana palielina uBlock₀<\/i> izmantojamās atmiņas daudzumu.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Vienu URL katrā rindiņā. Rindiņas, kuras sākas ar ‘!’ tiks ignorētas. Nederīgs URL tiks ignorēts bez brīdinājuma.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorēt vispārīgos kosmētiskos filtrus", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"novecojis", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Pēdējo reizi atjaunināts: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Bloķēto hostu saraksti", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Updating...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Lietot izmaiņas", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"A network error prevented the resource from being updated.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklāmas", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Vienu filtru katrā rindā. Filtrs var būt vienkārši resursa adrese, vai saderīgs ar Adblock Plus filtrs. Rindiņas, kuras sākas ar ‘!’ tiks ignorētas.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Konfidencialitāte", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importēt un pievienot", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Ļaundabīgo programmu domēni", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Eksportēt", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Daudzfunkcionālie", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Lietot izmaiņas", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Reģionālie, valodas", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Pastāvīgie noteikumi", - "description":"header" + "3pGroupCustom": { + "message": "Lietotāja", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Pagaidu noteikumi", - "description":"header" + "3pExternalListsHint": { + "message": "Vienu URL katrā rindiņā. Rindiņas, kuras sākas ar ‘!’ tiks ignorētas. Nederīgs URL tiks ignorēts bez brīdinājuma.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Atgriezt", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Novecojis.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Ieviest", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Pēdējo reizi atjaunināts: {{ago}}.\nNoklikšķiniet, lai atjauninātu.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Rediģēt", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Atjaunina...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Saglabāt", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Tīkla kļūda neļāva atjaunināt resursu.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Atsacīties", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Vienu filtru katrā rindā. Filtrs var būt vienkārši resursa adrese, vai saderīgs ar Adblock Plus filtrs. Rindiņas, kuras sākas ar ‘!’ tiks ignorētas.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importēt no faila...", - "description":"" + "1pImport": { + "message": "Importēt un pievienot", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Eksportēt uz failu...", - "description":"" + "1pExport": { + "message": "Eksportēt", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Dinamisko filtrēšanas noteikumu saraksts.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Lietot izmaiņas", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Noteikumu sintakse: avots mērķis tips rīcība<\/code> (pilna dokumentācija<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Pastāvīgie noteikumi", + "description": "header" }, - "whitelistPrompt":{ - "message":"Saraksts ar interneta resursiem, kuriem tiks atslēgts uBlock₀. Viens ieraksts katrā rindiņā. Nederīgi interneta resursu nosaukumi tiks ignorēti bez brīdinājuma.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Pagaidu noteikumi", + "description": "header" }, - "whitelistImport":{ - "message":"Importēt un pievienot", - "description":"English: Import and append" + "rulesRevert": { + "message": "Atgriezt", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Eksportēt", - "description":"English: Export" + "rulesCommit": { + "message": "Ieviest", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Rediģēt", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Lietot izmaiņas", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Saglabāt", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tips", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Atsacīties", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domēns", - "description":"English: Domain" + "rulesImport": { + "message": "Importēt no faila...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Eksportēt uz failu...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtrs", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Viss", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Dinamisko filtrēšanas noteikumu saraksts.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Aizkulisēs", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Noteikumu sintakse: avots mērķis tips rīcība<\/code> (pilna dokumentācija<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"žurnāla ierakstu filtrs", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Saraksts ar interneta resursiem, kuriem tiks atslēgts uBlock Origin. Viens ieraksts katrā rindiņā. Nederīgi interneta resursu nosaukumi tiks ignorēti bez brīdinājuma.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Žurnāla ierakstu maksimālais skaits", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importēt un pievienot", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Konteksts:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Eksportēt", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tips:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dinamiskā URL filtrēšana", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Lietot izmaiņas", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statiskā filtrēšana", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tips", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} tīkla pieprasījumiem {{type}} {{br}}kuru URL adrese satur {{url}} {{br}}un kas nāk no {{origin}},{{br}}{{importance}} ir atbilstošs izņēmumu filtrs.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domēns", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloķēt", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Atļaut", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtrs", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tips “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Viss", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"jebkurš tips", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Aizkulisēs", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"no “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "žurnāla ierakstu filtrs", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"no jebkuras vietas", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Žurnāla ierakstu maksimālais skaits", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"izņemot gadījumus, kad", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Konteksts:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"pat ja", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tips:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statiskais filtrs {{filter}} atrasts:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dinamiskā URL filtrēšana", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Izmaiņu žurnāls", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statiskā filtrēšana", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} tīkla pieprasījumiem {{type}} {{br}}kuru URL adrese satur {{url}} {{br}}un kas nāk no {{origin}},{{br}}{{importance}} ir atbilstošs izņēmumu filtrs.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Atbalsts", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloķēt", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Pirmkods (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Atļaut", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Atbalstītāji", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tips “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Saglabāt iestatījumus failā", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "jebkurš tips", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "no “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Atjaunot iestatījumus no faila...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "no jebkuras vietas", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Iestatīt noklusējuma iestatījumus...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "izņemot gadījumus, kad", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Tiks pārrakstīti visi iestatījumi izmantojot datus, kas saglabāti {{time}}, un µBlock₀ tiks restartēts. Pārrakstīt visus esošos iestatījumus, izmantojot rezerves kopiju?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "pat ja", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Datus nevar nolasīt vai tie nav derīgi", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statiskais filtrs {{filter}} atrasts:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Tiks atcelti visi Jūsu iestatījumi, un uBlock₀ tiks restartēts. \nAtjaunot rūpnīcas iestatījumus?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Izmaiņu žurnāls", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Nevar izveidot savienojumu ar {{url}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Pievienot sekojošo URL Jūsu lietotāja filtru sarakstiem?\n\nNosaukums: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Atbalsts", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"pirms minūtes", - "description":"English: a minute ago" + "aboutCode": { + "message": "Pirmkods (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"pirms {{value}} minūtēm", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Atbalstītāji", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"pirms stundas", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Saglabāt iestatījumus failā", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"pirms {{value}} stundām", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"vakar", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Atjaunot iestatījumus no faila...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"pirms {{value}} dienām", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Iestatīt noklusējuma iestatījumus...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Parādīt Vadības paneli", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Tiks pārrakstīti visi iestatījumi izmantojot datus, kas saglabāti {{time}}, un µBlock₀ tiks restartēts. Pārrakstīt visus esošos iestatījumus, izmantojot rezerves kopiju?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Parādīt tīkla pieprasījumu žurnālu", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Datus nevar nolasīt vai tie nav derīgi", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"izslēgts", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Tiks atcelti visi Jūsu iestatījumi, un uBlock₀ tiks restartēts. \nAtjaunot rūpnīcas iestatījumus?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ novērsa šo lapu no ielādes:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Tīkla kļūda: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Sakarā ar šādu filtru", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Pievienot sekojošo URL Jūsu lietotāja filtru sarakstiem?\n\nNosaukums: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"bez parametriem", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "pirms minūtes", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Atrodas:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "pirms {{value}} minūtēm", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Doties atpakaļ", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "pirms stundas", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Aizvērt šo logu", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "pirms {{value}} stundām", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Atslēgt satura bloķēšanu saitnei {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "vakar", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Pagaidu", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "pirms {{value}} dienām", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Paliekoši", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Parādīt Vadības paneli", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Eksports uz mākoņdatu glabātuvi", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Parādīt tīkla pieprasījumu žurnālu", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Imports no mākoņdatu glabātuves", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "izslēgts", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importēt no mākoņdatu glabātuves un apvienot ar pašreizējiem iestatījumiem", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ novērsa šo lapu no ielādes:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Sakarā ar šādu filtru", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Šīs ierīces nosaukums:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "bez parametriem", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warning! Change these advanced settings at your own risk.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Atrodas:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Iesniegt", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Doties atpakaļ", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Apply changes", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Aizvērt šo logu", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Atgriezt", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Atslēgt satura bloķēšanu saitnei {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"baiti", - "description":"" + "docblockedDisableTemporary": { + "message": "Pagaidu", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Īslaicīgi atļaut lielos multivides elementus", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Paliekoši", + "description": "English: Permanently" }, - "dummy":{ - "message":"Šim ierakstam ir jābūt pēdējam", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Eksports uz mākoņdatu glabātuvi", + "description": "tooltip" + }, + "cloudPull": { + "message": "Imports no mākoņdatu glabātuves", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importēt no mākoņdatu glabātuves un apvienot ar pašreizējiem iestatījumiem", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Šīs ierīces nosaukums:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Iesniegt", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Lietot izmaiņas", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Atgriezt", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "baiti", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Īslaicīgi atļaut lielos multivides elementus", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Šim ierakstam ir jābūt pēdējam", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/ml/messages.json b/src/_locales/ml/messages.json index b32905c460a59..2ecb4877067a4 100644 --- a/src/_locales/ml/messages.json +++ b/src/_locales/ml/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"അവസാനം, ഒരു കാര്യക്ഷമമായ ബ്ലോക്കര്‍. ലഘുവായ CPU, memory ഉപയോഗം.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "അവസാനം, ഒരു കാര്യക്ഷമമായ ബ്ലോക്കര്‍. ലഘുവായ CPU, memory ഉപയോഗം.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"യുബ്ലോക്ക്ഒ - ഡാഷ്ബോര്‍ഡ്", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "യുബ്ലോക്ക്ഒ - ഡാഷ്ബോര്‍ഡ്", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"സെറ്റിംഗ്സ്", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "സെറ്റിംഗ്സ്", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"തേര്‍ഡ് പാര്‍ട്ടി ഫില്‍ട്ടറുകള്‍", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "തേര്‍ഡ് പാര്‍ട്ടി ഫില്‍ട്ടറുകള്‍", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"എന്‍റെ ഫില്‍ട്ടറുകള്‍", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "എന്‍റെ ഫില്‍ട്ടറുകള്‍", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"എന്‍റെ നിയമങ്ങള്‍", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "എന്‍റെ നിയമങ്ങള്‍", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"വൈറ്റ് ലിസ്റ്റ്", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "വൈറ്റ് ലിസ്റ്റ്", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"യുബ്ലോക്ക്ഒ - നെറ്റ്‌വര്‍ക്ക് അപേക്ഷാ ലോഗ്", - "description":"Title for the logger window" + "statsPageName": { + "message": "യുബ്ലോക്ക്ഒ - നെറ്റ്‌വര്‍ക്ക് അപേക്ഷാ ലോഗ്", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"ഇതിനെ കുറിച്ച്", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "ഇതിനെ കുറിച്ച്", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Advanced settings", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Advanced settings", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"ക്ലിക്ക്: ഈ സൈറ്റില്‍ യുബ്ലോക്ക്ഒ ഡിസേബിള്‍\/എനെബിള്‍ ചെയ്യാന്‍.\nCtrl + ക്ലിക്ക്: ഈ പേജില്‍ യുബ്ലോക്ക്ഒ ഡിസേബിള്‍\/എനെബിള്‍ ചെയ്യാന്‍.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "ക്ലിക്ക്: ഈ സൈറ്റില്‍ യുബ്ലോക്ക്ഒ ഡിസേബിള്‍\/എനെബിള്‍ ചെയ്യാന്‍.\nCtrl + ക്ലിക്ക്: ഈ പേജില്‍ യുബ്ലോക്ക്ഒ ഡിസേബിള്‍\/എനെബിള്‍ ചെയ്യാന്‍.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"അപേക്ഷകള്‍ ബ്ലോക്ക്‌ ചെയ്യപ്പെട്ടു", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"ഈ പേജില്‍", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} അല്ലെങ്കില്‍ {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "അപേക്ഷകള്‍ ബ്ലോക്ക്‌ ചെയ്യപ്പെട്ടു", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"ഇന്‍സ്റ്റാളിനു ശേഷം", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "ഈ പേജില്‍", + "description": "English: on this page" }, - "popupOr":{ - "message":"അല്ലെങ്കില്‍", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} അല്ലെങ്കില്‍ {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"ഡാഷ്ബോര്‍ഡ് തുറക്കാന്‍ ക്ലിക്ക് ചെയ്യുക", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "ഇന്‍സ്റ്റാളിനു ശേഷം", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "അല്ലെങ്കില്‍", + "description": "English: or" }, - "popupTipPicker":{ - "message":"എലമെന്‍ഡ് പിക്കര്‍ മോഡില്‍ കടക്കുക", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "ഡാഷ്ബോര്‍ഡ് തുറക്കാന്‍ ക്ലിക്ക് ചെയ്യുക", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"അപേക്ഷാ ലോഗിലേക്ക് പോകുക", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"ഈ സൈറ്റിലെ എല്ലാ പോപ്‌അപ്പുകളും ബ്ലോക്ക്‌ ചെയ്യുന്നത് ടോഗ്ഗിള്‍ ചെയ്യുക", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "എലമെന്‍ഡ് പിക്കര്‍ മോഡില്‍ കടക്കുക", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Toggle the blocking of large media elements for this site", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "അപേക്ഷാ ലോഗിലേക്ക് പോകുക", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"ഈ സൈറ്റില്‍ സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ ടോഗ്ഗിള്‍ ചെയ്യുക", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "ഈ സൈറ്റിലെ എല്ലാ പോപ്‌അപ്പുകളും ബ്ലോക്ക്‌ ചെയ്യുന്നത് ടോഗ്ഗിള്‍ ചെയ്യുക", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"ഈ സൈറ്റില്‍ റിമോട്ട് ഫോണ്ടുകള്‍ ബ്ലോക്ക് ചെയ്യുന്നത് ടോഗ്ഗിള്‍ ചെയ്യുക", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"ആഗോള നിയമങ്ങൾ: ഈ കോളത്തിലെ നിയമങ്ങൾ എല്ലാ സൈറ്റുകളിലും പ്രയോഗിക്കുന്ന നിയമങ്ങള് ആണ്.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"പ്രാദേശിക നിയമങ്ങൾ: ഈ കോളത്തിലെ നിയമങ്ങൾ നിലവിലെ സൈറ്റിലെ മാത്രം പ്രയോഗിക്കുന്ന.\nപ്രാദേശിക നിയമങ്ങൾ ആഗോള നിയമങ്ങൾ അതിലംഘിച്ച് പ്രവർത്തിക്കുന്നതായിരിക്കും.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Toggle the blocking of large media elements for this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"നിങ്ങളുടെ മാറ്റങ്ങൾ സ്ഥിരപെടുത്താന്‍ ക്ലിക്കുചെയ്യുക.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"നിങ്ങളുടെ മാറ്റങ്ങൾ പഴയപടി ആകാന്‍ ക്ലിക്കുചെയ്യുക.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"എല്ലാം", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "ഈ സൈറ്റില്‍ സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ ടോഗ്ഗിള്‍ ചെയ്യുക", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"ചിത്രങ്ങള്‍", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"തേര്‍ഡ് പാര്‍ട്ടി", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"മൂന്നാം പാര്‍ട്ടി സിഎസ്എസ്\/ ചിത്രങ്ങള്‍", - "description":"" + "popupTipNoRemoteFonts": { + "message": "ഈ സൈറ്റില്‍ റിമോട്ട് ഫോണ്ടുകള്‍ ബ്ലോക്ക് ചെയ്യുന്നത് ടോഗ്ഗിള്‍ ചെയ്യുക", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"ഇന്‍ലൈന്‍ സ്ക്രിപ്റ്റുകള്‍", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"ഫസ്റ്റ് പാര്‍ട്ടി സ്ക്രിപ്റ്റുകള്‍", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"തേര്‍ഡ് പാര്‍ട്ടി സ്ക്രിപ്റ്റുകള്‍", - "description":"" + "popupTipGlobalRules": { + "message": "ആഗോള നിയമങ്ങൾ: ഈ കോളത്തിലെ നിയമങ്ങൾ എല്ലാ സൈറ്റുകളിലും പ്രയോഗിക്കുന്ന നിയമങ്ങള് ആണ്.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"തേര്‍ഡ് പാര്‍ട്ടി ഫ്രെയിമുകള്‍", - "description":"" + "popupTipLocalRules": { + "message": "പ്രാദേശിക നിയമങ്ങൾ: ഈ കോളത്തിലെ നിയമങ്ങൾ നിലവിലെ സൈറ്റിലെ മാത്രം പ്രയോഗിക്കുന്ന.\nപ്രാദേശിക നിയമങ്ങൾ ആഗോള നിയമങ്ങൾ അതിലംഘിച്ച് പ്രവർത്തിക്കുന്നതായിരിക്കും.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"കണക്റ്റ് ചെയ്യപ്പെട്ട ഡൊമൈനുകള്‍", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "നിങ്ങളുടെ മാറ്റങ്ങൾ സ്ഥിരപെടുത്താന്‍ ക്ലിക്കുചെയ്യുക.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{total}} ല്‍ നിന്നും {{count}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "നിങ്ങളുടെ മാറ്റങ്ങൾ പഴയപടി ആകാന്‍ ക്ലിക്കുചെയ്യുക.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"ക്രിയേറ്റ് ചെയ്യുക", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "എല്ലാം", + "description": "" }, - "pickerPick":{ - "message":"പിക്ക് ചെയ്യുക", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "ചിത്രങ്ങള്‍", + "description": "" }, - "pickerQuit":{ - "message":"പുറത്ത് കടക്കുക", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "തേര്‍ഡ് പാര്‍ട്ടി", + "description": "" }, - "pickerPreview":{ - "message":"Preview", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "മൂന്നാം പാര്‍ട്ടി സിഎസ്എസ്\/ ചിത്രങ്ങള്‍", + "description": "" }, - "pickerNetFilters":{ - "message":"നെറ്റ് ഫില്‍ട്ടറുകള്‍", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "ഇന്‍ലൈന്‍ സ്ക്രിപ്റ്റുകള്‍", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "ഫസ്റ്റ് പാര്‍ട്ടി സ്ക്രിപ്റ്റുകള്‍", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"ക്ലിക്ക്, Ctrl - ക്ലിക്ക്", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "തേര്‍ഡ് പാര്‍ട്ടി സ്ക്രിപ്റ്റുകള്‍", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"എലമെന്‍ഡ് ബ്ലോക്ക് ചെയ്യുക", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "തേര്‍ഡ് പാര്‍ട്ടി ഫ്രെയിമുകള്‍", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"ബ്ലോക്ക് ചെയ്യപ്പെട്ട എലമെന്‍ഡുകള്‍ക്ക് പകരമായുള്ള പ്ലയ്സ്ഹോള്‍ഡറുകള്‍ മറയ്ക്കുക", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "കണക്റ്റ് ചെയ്യപ്പെട്ട ഡൊമൈനുകള്‍", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"ഐക്കണില്‍ ബ്ലോക്ക് ചെയ്യപ്പെട്ട അപേക്ഷകളുടെ എണ്ണം കാണിക്കുക", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{total}} ല്‍ നിന്നും {{count}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"ടൂള്ടിപ്പ് പ്രവർത്തനരഹിതമാക്കുക", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "ക്രിയേറ്റ് ചെയ്യുക", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"ആവശ്യമായ ഇടങ്ങളില്‍ കോണ്‍ടെക്സ്റ്റ്‌ മെനു ഉപയോഗിക്കുക", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "പിക്ക് ചെയ്യുക", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"വർണ്ണാന്ധതാ സൗഹാര്‍ദ്ദപരമായത്", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "പുറത്ത് കടക്കുക", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"ക്ലൌഡ് സ്റ്റോറെജ് സപ്പോര്‍ട്ട് എനേബിള്‍ ചെയ്യുക", - "description":"" + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"ഞാന്‍ ഒരു അഡ്വാന്‍സ്ഡ് യൂസര്‍ ആണ് ( വായിക്കേണ്ടത്<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "നെറ്റ് ഫില്‍ട്ടറുകള്‍", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"advanced settings", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"പ്രീ-ഫെച്ചിംഗ് ഡിസേബിള്‍ ചെയ്യുക (ബ്ലോക്ക് ചെയ്ത നെറ്റ്‌വര്‍ക്ക് അപേക്ഷകള്‍ക്ക് കണക്ഷന്‍ ലഭിക്കുന്നത് തടയുന്നതിന്)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "ക്ലിക്ക്, Ctrl - ക്ലിക്ക്", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"ഹൈപര്‍ ലിങ്ക് ഓഡിറ്റിങ്ങ്\/ബീക്കന്‍ ഡിസേബിള്‍ ചെയ്യുക", - "description":"English: " + "pickerContextMenuEntry": { + "message": "എലമെന്‍ഡ് ബ്ലോക്ക് ചെയ്യുക", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"വെബ്‌ആര്‍ടിസി ലോക്കല്‍ ഐ പി അഡ്രസുകള്‍ ലീക്ക് ചെയ്യുന്നത് തടയുക", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "ബ്ലോക്ക് ചെയ്യപ്പെട്ട എലമെന്‍ഡുകള്‍ക്ക് പകരമായുള്ള പ്ലയ്സ്ഹോള്‍ഡറുകള്‍ മറയ്ക്കുക", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"സ്ഥിര രീതി", - "description":"" + "settingsIconBadgePrompt": { + "message": "ഐക്കണില്‍ ബ്ലോക്ക് ചെയ്യപ്പെട്ട അപേക്ഷകളുടെ എണ്ണം കാണിക്കുക", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"These default behaviors can be overridden on a per-site basis", - "description":"" + "settingsTooltipsPrompt": { + "message": "ടൂള്ടിപ്പ് പ്രവർത്തനരഹിതമാക്കുക", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"കോസ്മെറ്റിക് ഫിൽട്ടറിംഗ് പ്രവർത്തനരഹിതമാക്കുക", - "description":"" + "settingsContextMenuPrompt": { + "message": "ആവശ്യമായ ഇടങ്ങളില്‍ കോണ്‍ടെക്സ്റ്റ്‌ മെനു ഉപയോഗിക്കുക", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Block media elements larger than {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "വർണ്ണാന്ധതാ സൗഹാര്‍ദ്ദപരമായത്", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"വിദൂര ഫോണ്ടുകൾ തടയുക", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "ക്ലൌഡ് സ്റ്റോറെജ് സപ്പോര്‍ട്ട് എനേബിള്‍ ചെയ്യുക", + "description": "" }, - "settingsStorageUsed":{ - "message":"സ്റ്റോറേജ് ഉപയോഗം: {{value}} ബൈറ്റുകള്‍", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "ഞാന്‍ ഒരു അഡ്വാന്‍സ്ഡ് യൂസര്‍ ആണ് ( വായിക്കേണ്ടത്<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"അവസാന റീസ്റ്റോര്‍:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"അവസാന ബാക്ക്അപ്:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "പ്രീ-ഫെച്ചിംഗ് ഡിസേബിള്‍ ചെയ്യുക (ബ്ലോക്ക് ചെയ്ത നെറ്റ്‌വര്‍ക്ക് അപേക്ഷകള്‍ക്ക് കണക്ഷന്‍ ലഭിക്കുന്നത് തടയുന്നതിന്)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} നെറ്റ്‌വര്‍ക്ക് ഫില്‍ട്ടറുകള്‍ + {{cosmeticFilterCount}} സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ ഇവിടെ നിന്നും:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "ഹൈപര്‍ ലിങ്ക് ഓഡിറ്റിങ്ങ്\/ബീക്കന്‍ ഡിസേബിള്‍ ചെയ്യുക", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}} ല്‍ നിന്നും {{used}} ഉപയോഗിക്കുന്നു", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "വെബ്‌ആര്‍ടിസി ലോക്കല്‍ ഐ പി അഡ്രസുകള്‍ ലീക്ക് ചെയ്യുന്നത് തടയുക", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"ഫില്‍ട്ടര്‍ ലിസ്റ്റുകള്‍ ഓട്ടോ-അപ്ഡേറ്റ് ചെയ്യുക.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "സ്ഥിര രീതി", + "description": "" }, - "3pUpdateNow":{ - "message":"ഇപ്പോള്‍ അപ്ഡേറ്റ് ചെയ്യുക", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" }, - "3pPurgeAll":{ - "message":"ക്യാഷ് ശുദ്ധീകരിക്കുക", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "കോസ്മെറ്റിക് ഫിൽട്ടറിംഗ് പ്രവർത്തനരഹിതമാക്കുക", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"ശുദ്ധീകരിച്ച് സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ എന്‍ഫോര്‍സ് ചെയ്യുക.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "വിദൂര ഫോണ്ടുകൾ തടയുക", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "സ്റ്റോറേജ് ഉപയോഗം: {{value}} ബൈറ്റുകള്‍", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lists of blocked hosts", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "അവസാന റീസ്റ്റോര്‍:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "അവസാന ബാക്ക്അപ്:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"പരസ്യങ്ങള്‍", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} നെറ്റ്‌വര്‍ക്ക് ഫില്‍ട്ടറുകള്‍ + {{cosmeticFilterCount}} സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ ഇവിടെ നിന്നും:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"സ്വകാര്യത", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} ല്‍ നിന്നും {{used}} ഉപയോഗിക്കുന്നു", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"മാല്‍വെയര്‍ ഡൊമൈനുകള്‍", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "ഫില്‍ട്ടര്‍ ലിസ്റ്റുകള്‍ ഓട്ടോ-അപ്ഡേറ്റ് ചെയ്യുക.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"സാമൂഹിക", - "description":"English: Social" + "3pUpdateNow": { + "message": "ഇപ്പോള്‍ അപ്ഡേറ്റ് ചെയ്യുക", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"മള്‍ട്ടിപര്‍പ്പസ്", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "ക്യാഷ് ശുദ്ധീകരിക്കുക", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"പ്രാദേശികം, ഭാഷകള്‍", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "ശുദ്ധീകരിച്ച് സൗന്ദര്യ ഫില്‍ട്ടറുകള്‍ എന്‍ഫോര്‍സ് ചെയ്യുക.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"കസ്റ്റം", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"ഒരു വരിയില്‍ ഒരു യുആര്‍എല്‍ എന്ന രീതിയില്‍. ‘!’ എന്നിവയില്‍ തുടങ്ങുന്ന വരികള്‍ ഇഗ്നോര്‍ ചെയ്യപ്പെടും. ഇന്‍വാലിഡ്‌ ആയ യുആര്‍എല്ലുകള്‍ നിശബ്ദമായി ഇഗ്നോര്‍ ചെയ്യപ്പെടും.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"കാലഹരണപ്പെട്ടത്", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"അവസാന അപ്ഡേറ്റ്:{{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Updating...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"A network error prevented the resource from being updated.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "പരസ്യങ്ങള്‍", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"ഒരു വരിയില്‍ ഒരു ഫില്‍റ്റര്‍ എന്ന രീതിയില്‍. ഒരു ഫില്‍റ്റര്‍ എന്നത്, ഹോസ്റ്റ് നെയിം, അല്ലെങ്കില്‍ ആഡ് ബ്ലോക്ക് പ്ലസ്‌-നോട്‌ കംപാറ്റബിള്‍ ആയ ഫില്‍റ്റര്‍ എന്നിവ ആകാം. ‘!’ എന്നിവയില്‍ ആരംഭിക്കുന്ന വരികള്‍ ഇഗ്നോര്‍ ചെയ്യപ്പെടും.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "സ്വകാര്യത", + "description": "English: Privacy" }, - "1pImport":{ - "message":"ഇമ്പോര്‍ട്ടും കൂട്ടിചേര്‍ക്കലും ചെയ്യുക", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "മാല്‍വെയര്‍ ഡൊമൈനുകള്‍", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"എക്സ്പോര്‍ട്ട്‌", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"എന്‍റെ-യുബ്ലോക്ക്-സ്റ്റാറ്റിക്ക്-ഫില്‍ട്ടറുകള്‍_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "മള്‍ട്ടിപര്‍പ്പസ്", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "പ്രാദേശികം, ഭാഷകള്‍", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"സ്ഥിര നിയമങ്ങള്‍", - "description":"header" + "3pGroupCustom": { + "message": "കസ്റ്റം", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"താല്‍ക്കാലിക നിയമങ്ങള്‍", - "description":"header" + "3pExternalListsHint": { + "message": "ഒരു വരിയില്‍ ഒരു യുആര്‍എല്‍ എന്ന രീതിയില്‍. ‘!’ എന്നിവയില്‍ തുടങ്ങുന്ന വരികള്‍ ഇഗ്നോര്‍ ചെയ്യപ്പെടും. ഇന്‍വാലിഡ്‌ ആയ യുആര്‍എല്ലുകള്‍ നിശബ്ദമായി ഇഗ്നോര്‍ ചെയ്യപ്പെടും.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"റിവേര്‍ട്ട്", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "കാലഹരണപ്പെട്ടത്", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"കമ്മിറ്റ്", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "അവസാന അപ്ഡേറ്റ്:{{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"എഡിറ്റ്‌", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Updating...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"സേവ്", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"കളയുക", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "ഒരു വരിയില്‍ ഒരു ഫില്‍റ്റര്‍ എന്ന രീതിയില്‍. ഒരു ഫില്‍റ്റര്‍ എന്നത്, ഹോസ്റ്റ് നെയിം, അല്ലെങ്കില്‍ ആഡ് ബ്ലോക്ക് പ്ലസ്‌-നോട്‌ കംപാറ്റബിള്‍ ആയ ഫില്‍റ്റര്‍ എന്നിവ ആകാം. ‘!’ എന്നിവയില്‍ ആരംഭിക്കുന്ന വരികള്‍ ഇഗ്നോര്‍ ചെയ്യപ്പെടും.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"ഫയലില്‍ നിന്നും ഇമ്പോര്‍ട്ട് ചെയ്യുക...", - "description":"" + "1pImport": { + "message": "ഇമ്പോര്‍ട്ടും കൂട്ടിചേര്‍ക്കലും ചെയ്യുക", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"ഫയലിലേക്ക് എക്സ്പോര്‍ട്ട്‌ ചെയ്യുക", - "description":"" + "1pExport": { + "message": "എക്സ്പോര്‍ട്ട്‌", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"എന്‍റെ-യുബ്ലോക്ക്-ഡൈനാമിക്-നിയമങ്ങള്‍_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "എന്‍റെ-യുബ്ലോക്ക്-സ്റ്റാറ്റിക്ക്-ഫില്‍ട്ടറുകള്‍_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"താങ്കളുടെ ഡൈനാമിക് ഫില്‍റ്റര്‍ നിയമങ്ങളുടെ ലിസ്റ്റ്.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"നിയമത്തിന്‍റെ സിന്‍റ്റാക്സ്‌: സോര്‍സ് ഡെസ്റ്റിനേഷന്‍ ടൈപ്പ് ആക്ഷന്‍<\/code> ( മുഴുനീള പ്രമാണം<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "സ്ഥിര നിയമങ്ങള്‍", + "description": "header" }, - "whitelistPrompt":{ - "message":"യുബ്ലോക്ക്ഒ ഡിസേബിള്‍ ചെയ്യപ്പെടേണ്ട ഹോസ്റ്റ് നെയിമുകള്‍. ഒരു വരിയില്‍ ഒരു എന്‍ട്രി എന്ന രീതിയില്‍ ചേര്‍ക്കുക. ഇന്‍വാലിഡ്‌ ഹോസ്റ്റ് നെയിമുകള്‍ നിശബ്ദമായി ഇഗ്നോര്‍ ചെയ്യപെടും.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "താല്‍ക്കാലിക നിയമങ്ങള്‍", + "description": "header" }, - "whitelistImport":{ - "message":"ഇമ്പോര്‍ട്ടും കൂട്ടിചേര്‍ക്കലും ചെയ്യുക", - "description":"English: Import and append" + "rulesRevert": { + "message": "റിവേര്‍ട്ട്", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"എക്സ്പോര്‍ട്ട്‌", - "description":"English: Export" + "rulesCommit": { + "message": "കമ്മിറ്റ്", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"എന്‍റെ-യുബ്ലോക്ക്-വൈറ്റ്ലിസ്റ്റ്_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "എഡിറ്റ്‌", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "സേവ്", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"ടൈപ്പ്", - "description":"English: Type" + "rulesEditDiscard": { + "message": "കളയുക", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"ഡൊമൈന്‍", - "description":"English: Domain" + "rulesImport": { + "message": "ഫയലില്‍ നിന്നും ഇമ്പോര്‍ട്ട് ചെയ്യുക...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"യുആര്‍എല്‍", - "description":"English: URL" + "rulesExport": { + "message": "ഫയലിലേക്ക് എക്സ്പോര്‍ട്ട്‌ ചെയ്യുക", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"ഫില്‍ട്ടര്‍", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "എന്‍റെ-യുബ്ലോക്ക്-ഡൈനാമിക്-നിയമങ്ങള്‍_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"എല്ലാം", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "താങ്കളുടെ ഡൈനാമിക് ഫില്‍റ്റര്‍ നിയമങ്ങളുടെ ലിസ്റ്റ്.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"സീനിനു പിന്നില്‍", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "നിയമത്തിന്‍റെ സിന്‍റ്റാക്സ്‌: സോര്‍സ് ഡെസ്റ്റിനേഷന്‍ ടൈപ്പ് ആക്ഷന്‍<\/code> ( മുഴുനീള പ്രമാണം<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"ലോഗ് എന്‍ട്രി ഫില്‍ട്ടര്‍ ചെയ്യുക", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "യുബ്ലോക്ക്ഒ ഡിസേബിള്‍ ചെയ്യപ്പെടേണ്ട ഹോസ്റ്റ് നെയിമുകള്‍. ഒരു വരിയില്‍ ഒരു എന്‍ട്രി എന്ന രീതിയില്‍ ചേര്‍ക്കുക. ഇന്‍വാലിഡ്‌ ഹോസ്റ്റ് നെയിമുകള്‍ നിശബ്ദമായി ഇഗ്നോര്‍ ചെയ്യപെടും.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"ലോഗ് എന്‍ട്രികളുടെ മാക്സിമം എണ്ണം", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "ഇമ്പോര്‍ട്ടും കൂട്ടിചേര്‍ക്കലും ചെയ്യുക", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"കോണ്‍ടെക്സ്റ്റ്:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "എക്സ്പോര്‍ട്ട്‌", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"ടൈപ്പ്:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "എന്‍റെ-യുബ്ലോക്ക്-വൈറ്റ്ലിസ്റ്റ്_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"ഡൈനാമിക് യുആര്‍എല്‍ ഫില്‍ട്ടറിങ്ങ്", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "മാറ്റങ്ങള്‍ അപ്ലേ ചെയ്യുക", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"സ്റ്റാറ്റിക് ഫില്‍ട്ടറിങ്ങ്", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "ടൈപ്പ്", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "ഡൊമൈന്‍", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"ബ്ലോക്ക്‌ ചെയ്യുക", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "യുആര്‍എല്‍", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"അനുവദിക്കുക", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "ഫില്‍ട്ടര്‍", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"ടൈപ്പ് \"{{type}}\"", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "എല്ലാം", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"ഏതു ടൈപ്പും", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "സീനിനു പിന്നില്‍", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"\"{{origin}}\"ല്‍ നിന്നും", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "ലോഗ് എന്‍ട്രി ഫില്‍ട്ടര്‍ ചെയ്യുക", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"എവിടെ നിന്നും", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "ലോഗ് എന്‍ട്രികളുടെ മാക്സിമം എണ്ണം", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"അങ്ങിനെ അല്ലെങ്കില്‍", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "കോണ്‍ടെക്സ്റ്റ്:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"എന്നിരുന്നാലും", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "ടൈപ്പ്:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"സ്റ്റാറ്റിക് ഫില്‍ട്ടര്‍ {{filter}} ഇതില്‍ കണ്ടെത്തി:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "ഡൈനാമിക് യുആര്‍എല്‍ ഫില്‍ട്ടറിങ്ങ്", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"മാറ്റങ്ങളുടെ ലോഗ്", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "സ്റ്റാറ്റിക് ഫില്‍ട്ടറിങ്ങ്", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"വിക്കി", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "ബ്ലോക്ക്‌ ചെയ്യുക", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"സോര്‍സ് കോഡ് (ജിപിഎല്‍വി3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "അനുവദിക്കുക", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"കോണ്‍ട്രിബ്യൂട്ടര്‍മാര്‍", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "ടൈപ്പ് \"{{type}}\"", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"ഫയലിലേക്ക് ബാക്അപ്", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "ഏതു ടൈപ്പും", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"എന്‍റെ-യുബ്ലോക്ക്-ബാക്ക്അപ്_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "\"{{origin}}\"ല്‍ നിന്നും", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"ഫയലില്‍ നിന്നും റീസ്റ്റോര്‍ ചെയ്യുക...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "എവിടെ നിന്നും", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"ഡീഫാള്‍ട്ട് സെറ്റിംഗ്സിലേക്ക് റീസ്റ്റോര്‍ ചെയ്യുക...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "അങ്ങിനെ അല്ലെങ്കില്‍", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"{{time}}ല്‍ ബാക്ക്അപ് ചെയ്യപ്പെട്ട ഡേറ്റ ഉപയോഗിച്ച് താങ്കളുടെ എല്ലാ സെറ്റിംഗ്സും ഓവര്‍ റൈറ്റ് ചെയ്യപ്പെടും. അതിനു ശേഷം യുബ്ലോക്ക്‌ഒ റീസ്റ്റാര്‍ട്ട്‌ ചെയ്യപ്പെടും.\n\nനിലവിലുള്ള എല്ലാ സെറ്റിങ്ങുകളും ഓവര്‍റൈറ്റ് ചെയ്യട്ടെയോ?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "എന്നിരുന്നാലും", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"ഡേറ്റ വായിക്കാന്‍ ഒക്കുന്നില്ല അല്ലെങ്കില്‍ അത് ഇന്‍വാലിഡ്‌ ആണ്", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "സ്റ്റാറ്റിക് ഫില്‍ട്ടര്‍ {{filter}} ഇതില്‍ കണ്ടെത്തി:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"എല്ലാ സെറ്റിങ്ങുകളും റിമൂവ് ചെയ്യപ്പെടും. അതിനു ശേഷം യുബ്ലോക്ക്ഒ റീസ്റ്റാര്‍ട്ട്‌ ചെയ്യപ്പെടും.\n\nയുബ്ലോക്ക്ഒ-യെ ഫാക്ടറി സെറ്റിങ്ങുകളിലേക്ക് റീസെറ്റ് ചെയ്യട്ടെയോ?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "മാറ്റങ്ങളുടെ ലോഗ്", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"{{url}} എന്നതിലേക്ക് കണക്റ്റ് ചെയ്യാനാകുന്നില്ല", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "വിക്കി", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"യുബ്ലോക്ക്ഒ: താഴെ പറയുന്ന യുആര്‍എല്‍ താങ്കളുടെ കസ്റ്റം ഫില്‍റ്ററില്‍ ചേര്‍ക്കട്ടേയോ?\n\nടൈറ്റില്‍: \"{{title}}\"\nയുആര്‍എല്‍: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Support", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"ഒരു മിനിറ്റ് മുന്‍പ്", - "description":"English: a minute ago" + "aboutCode": { + "message": "സോര്‍സ് കോഡ് (ജിപിഎല്‍വി3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} മിനിറ്റുകള്‍ മുന്‍പ്", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "കോണ്‍ട്രിബ്യൂട്ടര്‍മാര്‍", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"ഒരു മണിക്കൂര്‍ മുന്‍പ്", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "ഫയലിലേക്ക് ബാക്അപ്", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} മണിക്കൂറുകള്‍ മുന്‍പ്", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "എന്‍റെ-യുബ്ലോക്ക്-ബാക്ക്അപ്_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"ഒരു ദിവസം മുന്‍പ്", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "ഫയലില്‍ നിന്നും റീസ്റ്റോര്‍ ചെയ്യുക...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} ദിവസങ്ങള്‍ക്ക്മുന്‍പ്", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "ഡീഫാള്‍ട്ട് സെറ്റിംഗ്സിലേക്ക് റീസ്റ്റോര്‍ ചെയ്യുക...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"ഡാഷ്ബോര്‍ഡ് കാണിക്കുക", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "{{time}}ല്‍ ബാക്ക്അപ് ചെയ്യപ്പെട്ട ഡേറ്റ ഉപയോഗിച്ച് താങ്കളുടെ എല്ലാ സെറ്റിംഗ്സും ഓവര്‍ റൈറ്റ് ചെയ്യപ്പെടും. അതിനു ശേഷം യുബ്ലോക്ക്‌ഒ റീസ്റ്റാര്‍ട്ട്‌ ചെയ്യപ്പെടും.\n\nനിലവിലുള്ള എല്ലാ സെറ്റിങ്ങുകളും ഓവര്‍റൈറ്റ് ചെയ്യട്ടെയോ?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"ലോഗ്ഗര്‍ കാണിക്കുക", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "ഡേറ്റ വായിക്കാന്‍ ഒക്കുന്നില്ല അല്ലെങ്കില്‍ അത് ഇന്‍വാലിഡ്‌ ആണ്", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"ഓഫ്", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "എല്ലാ സെറ്റിങ്ങുകളും റിമൂവ് ചെയ്യപ്പെടും. അതിനു ശേഷം യുബ്ലോക്ക്ഒ റീസ്റ്റാര്‍ട്ട്‌ ചെയ്യപ്പെടും.\n\nയുബ്ലോക്ക്ഒ-യെ ഫാക്ടറി സെറ്റിങ്ങുകളിലേക്ക് റീസെറ്റ് ചെയ്യട്ടെയോ?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"താഴെ പറയുന്ന പേജ് ലോഡ് ചെയ്യുന്നത് യുബ്ലോക്ക് ഒറിജിന്‍ തടഞ്ഞിരിക്കുന്നു:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "{{url}} എന്നതിലേക്ക് കണക്റ്റ് ചെയ്യാനാകുന്നില്ല", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"ഈ ഫില്‍റ്റര്‍ കാരണം", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "യുബ്ലോക്ക്ഒ: താഴെ പറയുന്ന യുആര്‍എല്‍ താങ്കളുടെ കസ്റ്റം ഫില്‍റ്ററില്‍ ചേര്‍ക്കട്ടേയോ?\n\nടൈറ്റില്‍: \"{{title}}\"\nയുആര്‍എല്‍: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"പാരാമീറ്ററുകള്‍ ഇല്ലാതെ", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "ഒരു മിനിറ്റ് മുന്‍പ്", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"ഇതില്‍ കണ്ടെത്തി:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} മിനിറ്റുകള്‍ മുന്‍പ്", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"പിന്നിലേക്ക്‌ പോകുക", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "ഒരു മണിക്കൂര്‍ മുന്‍പ്", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"ഈ വിന്‍ഡോ ക്ലോസ് ചെയ്യുക", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} മണിക്കൂറുകള്‍ മുന്‍പ്", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"{{hostname}}ലേക്ക് കര്‍ശന ബ്ലോക്കിംഗ് ഡിസേബിള്‍ ചെയ്യുക", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "ഒരു ദിവസം മുന്‍പ്", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"താല്‍ക്കാലികമായി", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} ദിവസങ്ങള്‍ക്ക്മുന്‍പ്", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"സ്ഥിരമായി", - "description":"English: Permanently" + "showDashboardButton": { + "message": "ഡാഷ്ബോര്‍ഡ് കാണിക്കുക", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"ക്ലൌഡ് സ്റ്റോറേജിലേക്ക് എക്സ്പോര്‍ട്ട്‌ ചെയ്യുക", - "description":"tooltip" + "showNetworkLogButton": { + "message": "ലോഗ്ഗര്‍ കാണിക്കുക", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"ക്ലൌഡ് സ്റ്റോറേജില്‍ നിന്ന് ഇമ്പോര്‍ട്ട് ചെയ്യുക", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "ഓഫ്", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"ക്ലൗഡ് സംഭരനിയില്‍ നിന്ന് ഇറക്കുമതി ചെയ്ത് നിലവിലെ ക്രമീകരണത്തില്‍ ലയിപ്പിക്കും", - "description":"tooltip" + "docblockedPrompt1": { + "message": "താഴെ പറയുന്ന പേജ് ലോഡ് ചെയ്യുന്നത് യുബ്ലോക്ക് ഒറിജിന്‍ തടഞ്ഞിരിക്കുന്നു:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "ഈ ഫില്‍റ്റര്‍ കാരണം", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"ഈ ഉപകരണത്തിന്‍റെ പേര്:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "പാരാമീറ്ററുകള്‍ ഇല്ലാതെ", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warning! Change these advanced settings at your own risk.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "ഇതില്‍ കണ്ടെത്തി:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"സബ്മിറ്റ്", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "പിന്നിലേക്ക്‌ പോകുക", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Apply changes", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "ഈ വിന്‍ഡോ ക്ലോസ് ചെയ്യുക", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"റിവേര്‍ട്ട്", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "{{hostname}}ലേക്ക് കര്‍ശന ബ്ലോക്കിംഗ് ഡിസേബിള്‍ ചെയ്യുക", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"ബൈറ്റുകള്‍", - "description":"" + "docblockedDisableTemporary": { + "message": "താല്‍ക്കാലികമായി", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"താൽക്കാലികമായി വലിയ മീഡിയ അനുവദിക്കുക", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "സ്ഥിരമായി", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "ക്ലൌഡ് സ്റ്റോറേജിലേക്ക് എക്സ്പോര്‍ട്ട്‌ ചെയ്യുക", + "description": "tooltip" + }, + "cloudPull": { + "message": "ക്ലൌഡ് സ്റ്റോറേജില്‍ നിന്ന് ഇമ്പോര്‍ട്ട് ചെയ്യുക", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "ക്ലൗഡ് സംഭരനിയില്‍ നിന്ന് ഇറക്കുമതി ചെയ്ത് നിലവിലെ ക്രമീകരണത്തില്‍ ലയിപ്പിക്കും", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "ഈ ഉപകരണത്തിന്‍റെ പേര്:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "സബ്മിറ്റ്", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "റിവേര്‍ട്ട്", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "ബൈറ്റുകള്‍", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "താൽക്കാലികമായി വലിയ മീഡിയ അനുവദിക്കുക", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/mr/messages.json b/src/_locales/mr/messages.json index 0d7380effa2b7..16b43a6d6653b 100644 --- a/src/_locales/mr/messages.json +++ b/src/_locales/mr/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"शेवटी, एक कार्यक्षम ब्लॉकर क्रोमियम आधारित ब्राउझरांसाठी. सीपीयू आणि मेमरी वर सोपे जातो.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "शेवटी, एक कार्यक्षम ब्लॉकर क्रोमियम आधारित ब्राउझरांसाठी. सीपीयू आणि मेमरी वर सोपे जातो.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"म्यूब्लॉक — डैशबोर्ड", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "म्यूब्लॉक — डैशबोर्ड", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"सेटिंग्ज", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "सेटिंग्ज", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"तृतीय-पक्ष फिल्टर", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "तृतीय-पक्ष फिल्टर", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"आपले फिल्टर", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "आपले फिल्टर", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"माझे नियम", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "माझे नियम", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"श्वेतसूची", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "श्वेतसूची", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — लॉगर", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — लॉगर", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"माहिती", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "माहिती", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Advanced settings", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Advanced settings", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"क्लिक करा : या साइटसाठी म्यूब्लॉक अक्षम\/सक्षम.\n\nCtrl+क्लिक करा: फक्त या पृष्ठावर म्यूब्लॉक अक्षम.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "क्लिक करा : या साइटसाठी म्यूब्लॉक अक्षम\/सक्षम.\n\nCtrl+क्लिक करा: फक्त या पृष्ठावर म्यूब्लॉक अक्षम.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"विनंत्या अवरोधित", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"या पृष्ठावर", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} किंवा {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "विनंत्या अवरोधित", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"स्थापने पासून", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "या पृष्ठावर", + "description": "English: on this page" }, - "popupOr":{ - "message":"किंवा", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} किंवा {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"डॅशबोर्ड उघडण्यासाठी क्लिक करा", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "स्थापने पासून", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "किंवा", + "description": "English: or" }, - "popupTipPicker":{ - "message":"घटक निवडक मोड प्रविष्ट करा", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "डॅशबोर्ड उघडण्यासाठी क्लिक करा", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"विनंती लॉग ला जा", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"या साइटसाठी सर्व पॉपअप अवरोधित करणे टॉगल करा", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "घटक निवडक मोड प्रविष्ट करा", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"या साइटसाठी मोठ्या माध्यम घटक अवरोधित करणे टॉगल करा", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "विनंती लॉग ला जा", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"या साइटसाठी कॉस्मेटिक फिल्टरिंग टॉगल करा", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "या साइटसाठी सर्व पॉपअप अवरोधित करणे टॉगल करा", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Toggle the blocking of remote fonts for this site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Global rules: this column is for rules which apply to all sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "या साइटसाठी मोठ्या माध्यम घटक अवरोधित करणे टॉगल करा", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Click to make your changes permanent.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Click to revert your changes.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"सर्व", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "या साइटसाठी कॉस्मेटिक फिल्टरिंग टॉगल करा", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"चित्रे", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"3rd-party", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"3rd-party css\/images", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Toggle the blocking of remote fonts for this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scripts", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"1st-party scripts", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"3rd-party scripts", - "description":"" + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"3rd-party frames", - "description":"" + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domains connected", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Click to make your changes permanent.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} पैकी {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Click to revert your changes.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"निर्माण करा", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "सर्व", + "description": "" }, - "pickerPick":{ - "message":"निवडा", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "चित्रे", + "description": "" }, - "pickerQuit":{ - "message":"बाहेर पडा", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "3rd-party", + "description": "" }, - "pickerPreview":{ - "message":"Preview", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "3rd-party css\/images", + "description": "" }, - "pickerNetFilters":{ - "message":"नेट फिल्टर", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"उटणे फिल्टर", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "1st-party scripts", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Ctrl - क्लिक करा", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "3rd-party scripts", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"घटक अवरोधित करा", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "3rd-party frames", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"अवरोधित घटकाचे प्लेसहोल्डर लपवा", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domains connected", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"अवरोधित विनंत्यांची संख्या चिन्हावर दाखवा", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} पैकी {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Disable tooltips", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "निर्माण करा", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"जेथे योग्य तेथे संदर्भ मेनू याचा वापर करा", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "निवडा", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Color-blind friendly", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "बाहेर पडा", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Enable cloud storage support", - "description":"" + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"I am an advanced user (required reading<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "नेट फिल्टर", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"advanced settings", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "उटणे फिल्टर", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disable pre-fetching (to prevent any connection for blocked network requests)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Ctrl - क्लिक करा", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Disable hyperlink auditing", - "description":"English: " + "pickerContextMenuEntry": { + "message": "घटक अवरोधित करा", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Prevent WebRTC from leaking local IP addresses", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "अवरोधित घटकाचे प्लेसहोल्डर लपवा", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Default behavior", - "description":"" + "settingsIconBadgePrompt": { + "message": "अवरोधित विनंत्यांची संख्या चिन्हावर दाखवा", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"These default behaviors can be overridden on a per-site basis", - "description":"" + "settingsTooltipsPrompt": { + "message": "Disable tooltips", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Disable cosmetic filtering", - "description":"" + "settingsContextMenuPrompt": { + "message": "जेथे योग्य तेथे संदर्भ मेनू याचा वापर करा", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Block media elements larger than {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Color-blind friendly", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Block remote fonts", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" }, - "settingsStorageUsed":{ - "message":"Storage used: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "I am an advanced user (required reading<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"अखेरचे पुनर्संचयित:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Last backup:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} नेटवर्क फिल्टर + {{cosmeticFilterCount}} उटणे फिल्टर :", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} वापरले {{total}} पैकी", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"स्वयं-अद्यतन फिल्टर यादी.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" }, - "3pUpdateNow":{ - "message":"आता अद्यतनित करा", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" }, - "3pPurgeAll":{ - "message":"सर्व कॅशे साफ करा", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"उटणे फिल्टरना विश्लेषित करा आणि त्यांची अंमलबजावणी करा.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

हे वैशिष्ट्य सक्षम केले तरम्यूब्लॉकचे<\/i> मेमरी पावलाचा ठसा वाढतो.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignore generic cosmetic filters", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Storage used: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"उअवरोधित होस्ट यांची सूची", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "अखेरचे पुनर्संचयित:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"बदल लागू करा", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"जाहिराती", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} नेटवर्क फिल्टर + {{cosmeticFilterCount}} उटणे फिल्टर :", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"गोपनीयता", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} वापरले {{total}} पैकी", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"मालवेअर डोमेन", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "स्वयं-अद्यतन फिल्टर यादी.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"सामाजिक", - "description":"English: Social" + "3pUpdateNow": { + "message": "आता अद्यतनित करा", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"बहुउद्देशीय", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "सर्व कॅशे साफ करा", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"विभाग , भाषा", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "उटणे फिल्टरना विश्लेषित करा आणि त्यांची अंमलबजावणी करा.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"सानुकूल", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

हे वैशिष्ट्य सक्षम केले तरम्यूब्लॉकचे<\/i> मेमरी पावलाचा ठसा वाढतो.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"प्रति ओळ एक युआरएल. ओळी सह प्रिफिक्स ‘!’ कढे दुर्लक्ष केले जाईल. अवैध युआरएल शांतपणे दुर्लक्ष केले जाईल.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"कालबाह्य", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Last update: {{ago}}.\nClick to force an update.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "उअवरोधित होस्ट यांची सूची", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Updating...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "बदल लागू करा", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"A network error prevented the resource from being updated.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "जाहिराती", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"प्रति ओळ एक फिल्टर. फिल्टर एक साधे होस्ट नावाचा असू शकतो, किंवा एक अद्ब्लोक प्लस सुसंगत फिल्टर असू शकतो. ओळी सह प्रिफिक्स ‘!’ कढे दुर्लक्ष केले जाईल.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "गोपनीयता", + "description": "English: Privacy" }, - "1pImport":{ - "message":"आयात आणि समावेश करा", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "मालवेअर डोमेन", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"निर्यात करा", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "बहुउद्देशीय", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"बदल लागू करा", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "विभाग , भाषा", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"स्थायी नियम", - "description":"header" + "3pGroupCustom": { + "message": "सानुकूल", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"अस्थायी नियम", - "description":"header" + "3pExternalListsHint": { + "message": "प्रति ओळ एक युआरएल. ओळी सह प्रिफिक्स ‘!’ कढे दुर्लक्ष केले जाईल. अवैध युआरएल शांतपणे दुर्लक्ष केले जाईल.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Revert", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "कालबाह्य", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Commit", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"संपादित करा", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Updating...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Save", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Discard", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "प्रति ओळ एक फिल्टर. फिल्टर एक साधे होस्ट नावाचा असू शकतो, किंवा एक अद्ब्लोक प्लस सुसंगत फिल्टर असू शकतो. ओळी सह प्रिफिक्स ‘!’ कढे दुर्लक्ष केले जाईल.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Import from file...", - "description":"" + "1pImport": { + "message": "आयात आणि समावेश करा", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Export to file", - "description":"" + "1pExport": { + "message": "निर्यात करा", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"List of your dynamic filtering rules.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "बदल लागू करा", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "स्थायी नियम", + "description": "header" }, - "whitelistPrompt":{ - "message":"आपली होस्ट नावांची यादी ज्याचासाठी म्यूब्लॉक अक्षम केले जाईल. प्रति ओळ एक प्रविष्टी. अवैध होस्ट नावांकडे शांतपणे दुर्लक्ष केले जाईल.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "अस्थायी नियम", + "description": "header" }, - "whitelistImport":{ - "message":"आयात आणि समावेश करा", - "description":"English: Import and append" + "rulesRevert": { + "message": "Revert", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"निर्यात करा", - "description":"English: Export" + "rulesCommit": { + "message": "Commit", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "संपादित करा", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"बदल लागू करा", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Save", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"प्रकार", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Discard", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"डोमेन", - "description":"English: Domain" + "rulesImport": { + "message": "Import from file...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"यूआरएल", - "description":"English: URL" + "rulesExport": { + "message": "Export to file", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"फिल्टर", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"All", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Behind the scene", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Rule syntax: source destination type action<\/code> (full documentation<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filter log entries", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "आपली होस्ट नावांची यादी ज्याचासाठी म्यूब्लॉक अक्षम केले जाईल. प्रति ओळ एक प्रविष्टी. अवैध होस्ट नावांकडे शांतपणे दुर्लक्ष केले जाईल.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maximum number of log entries", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "आयात आणि समावेश करा", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "निर्यात करा", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamic URL filtering", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "बदल लागू करा", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Static filtering", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "प्रकार", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "डोमेन", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Block", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "यूआरएल", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Allow", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "फिल्टर", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "All", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"any type", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Behind the scene", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"from “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filter log entries", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"from anywhere", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maximum number of log entries", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"except when", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"even if", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamic URL filtering", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"बदल नोंदी", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Static filtering", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Support", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Block", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"स्त्रोत कोड (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Allow", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"सहभागी", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"फाइल वर बॅकअप करा...", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"फाइल पासून पुनर्संचयित करा...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"मुळापासून सुरू करा...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"आपले सर्व सेटिंग्ज ना खोडून {{time}} चा बॅकअप डेटा वापरला जाईल, आणि म्यूब्लॉक रीस्टार्ट होईल.\n\nसर्व विद्यमान सेटिंग्ज ना खोडून बॅकअप डेटा वापरावे का?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"आपले सर्व सेटिंग्ज पुसले जातील, आणि म्यूब्लॉक रीस्टार्ट होईल .\n\nम्यूब्लॉक ला फॉक्टोरी सेटिंग्ज ला रीसेट करावे का?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "बदल नोंदी", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"{{url}} ला कनेक्ट करण्यात अक्षम", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Support", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"a minute ago", - "description":"English: a minute ago" + "aboutCode": { + "message": "स्त्रोत कोड (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutes ago", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "सहभागी", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"an hour ago", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "फाइल वर बॅकअप करा...", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} hours ago", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"a day ago", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "फाइल पासून पुनर्संचयित करा...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} days ago", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "मुळापासून सुरू करा...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Show Dashboard", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "आपले सर्व सेटिंग्ज ना खोडून {{time}} चा बॅकअप डेटा वापरला जाईल, आणि म्यूब्लॉक रीस्टार्ट होईल.\n\nसर्व विद्यमान सेटिंग्ज ना खोडून बॅकअप डेटा वापरावे का?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Show Logger", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"off", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "आपले सर्व सेटिंग्ज पुसले जातील, आणि म्यूब्लॉक रीस्टार्ट होईल .\n\nम्यूब्लॉक ला फॉक्टोरी सेटिंग्ज ला रीसेट करावे का?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "{{url}} ला कनेक्ट करण्यात अक्षम", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Because of the following filter", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"without parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "a minute ago", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Found in:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minutes ago", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Go back", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "an hour ago", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Close this window", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} hours ago", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Disable strict blocking for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "a day ago", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporarily", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} days ago", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanently", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Export to cloud storage", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Import from cloud storage", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Import from cloud storage and merge with current settings", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Because of the following filter", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"This device name:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warning! Change these advanced settings at your own risk.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Found in:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Submit", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Go back", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Apply changes", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Close this window", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Revert", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporarily", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Temporarily allow large media elements", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanently", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "This device name:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Submit", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Revert", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/ms/messages.json b/src/_locales/ms/messages.json new file mode 100644 index 0000000000000..900670bcf5535 --- /dev/null +++ b/src/_locales/ms/messages.json @@ -0,0 +1,754 @@ +{ + "extName": { + "message": "uBlock₀", + "description": "extension name." + }, + "extShortDesc": { + "message": "Akhirnya, penghalang iklan yang cekap.", + "description": "this will be in the chrome web store: must be 132 characters or less" + }, + "dashboardName": { + "message": "uBlock₀ — Papanmuka", + "description": "English: uBlock₀ — Dashboard" + }, + "settingsPageName": { + "message": "Tetapan", + "description": "appears as tab name in dashboard" + }, + "3pPageName": { + "message": "Penapis pihak luar", + "description": "appears as tab name in dashboard" + }, + "1pPageName": { + "message": "Penapis saya", + "description": "appears as tab name in dashboard" + }, + "rulesPageName": { + "message": "Peraturan saya", + "description": "appears as tab name in dashboard" + }, + "whitelistPageName": { + "message": "Senarai putih", + "description": "appears as tab name in dashboard" + }, + "statsPageName": { + "message": "uBlock₀ — Catatan", + "description": "Title for the logger window" + }, + "aboutPageName": { + "message": "Mengenai", + "description": "appears as tab name in dashboard" + }, + "advancedSettingsPageName": { + "message": "Tetapan lanjut", + "description": "Title for the advanced settings page" + }, + "popupPowerSwitchInfo": { + "message": "Klik: tutup\/aktifkan uBlock₀ untuk laman web ini.\n\nCtrl+klik: tutupkan uBlock₀ pada halaman ini sahaja.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + }, + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" + }, + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" + }, + "popupBlockedRequestPrompt": { + "message": "permintaan dihalang", + "description": "English: requests blocked" + }, + "popupBlockedOnThisPagePrompt": { + "message": "pada halaman ini", + "description": "English: on this page" + }, + "popupBlockedStats": { + "message": "{{count}} atau {{percent}}%", + "description": "Example: 15 or 13%" + }, + "popupBlockedSinceInstallPrompt": { + "message": "sejak dipasang", + "description": "English: since install" + }, + "popupOr": { + "message": "atau", + "description": "English: or" + }, + "popupTipDashboard": { + "message": "Klik untuk membuka dashboard", + "description": "English: Click to open the dashboard" + }, + "popupTipZapper": { + "message": "Masuk mod pilihan elemen", + "description": "Tooltip for the element-zapper icon in the popup panel" + }, + "popupTipPicker": { + "message": "Memasuki mod pemetik elemen", + "description": "English: Enter element picker mode" + }, + "popupTipLog": { + "message": "Membuka catatan", + "description": "Tooltip used for the logger icon in the panel" + }, + "popupTipNoPopups": { + "message": "Togol penghalang untuk segala popup laman ini", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" + }, + "popupTipNoLargeMedia": { + "message": "Togol penghalang semua elemen media besar untuk laman ini", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" + }, + "popupTipNoCosmeticFiltering": { + "message": "Togol penapis kosmetik untuk laman ini", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" + }, + "popupTipNoRemoteFonts": { + "message": "Toggle the blocking of remote fonts for this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" + }, + "popupTipGlobalRules": { + "message": "Peraturan global: kolumn ini adalah untuk peraturan yang dikuatkuasakan untuk semua laman.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." + }, + "popupTipLocalRules": { + "message": "Peraturan tempatan: kolumn ini adalah untuk peraturan yang dikuatkuasakan untuk laman semasa sahaja.\nPeraturan tempatan mengatasikan peraturan global.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." + }, + "popupTipSaveRules": { + "message": "Klik untuk membuat perubahan anda kekal.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." + }, + "popupTipRevertRules": { + "message": "Klik untuk memungkiri perubahan anda.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." + }, + "popupAnyRulePrompt": { + "message": "semua", + "description": "" + }, + "popupImageRulePrompt": { + "message": "gambar", + "description": "" + }, + "popup3pAnyRulePrompt": { + "message": "pihak ketiga", + "description": "" + }, + "popup3pPassiveRulePrompt": { + "message": "css\/imej pihak ketiga", + "description": "" + }, + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" + }, + "popup1pScriptRulePrompt": { + "message": "1st-party scripts", + "description": "" + }, + "popup3pScriptRulePrompt": { + "message": "3rd-party scripts", + "description": "" + }, + "popup3pFrameRulePrompt": { + "message": "3rd-party frames", + "description": "" + }, + "popupHitDomainCountPrompt": { + "message": "domains connected", + "description": "appears in popup" + }, + "popupHitDomainCount": { + "message": "{{count}} daripada {{total}}", + "description": "appears in popup" + }, + "pickerCreate": { + "message": "Cipta", + "description": "English: Create" + }, + "pickerPick": { + "message": "Pilih", + "description": "English: Pick" + }, + "pickerQuit": { + "message": "Keluar", + "description": "English: Quit" + }, + "pickerPreview": { + "message": "Preview", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + }, + "pickerNetFilters": { + "message": "Penapis network", + "description": "English: header for a type of filter in the element picker dialog" + }, + "pickerCosmeticFilters": { + "message": "Penapis Kosmetik", + "description": "English: Cosmetic filters" + }, + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" + }, + "pickerContextMenuEntry": { + "message": "Halang elemen", + "description": "English: Block element" + }, + "settingsCollapseBlockedPrompt": { + "message": "Hide placeholders of blocked elements", + "description": "English: Hide placeholders of blocked elements" + }, + "settingsIconBadgePrompt": { + "message": "Show the number of blocked requests on the icon", + "description": "English: Show the number of blocked requests on the icon" + }, + "settingsTooltipsPrompt": { + "message": "Menutupkan mesej bantuan", + "description": "A checkbox in the Settings pane" + }, + "settingsContextMenuPrompt": { + "message": "Make use of context menu where appropriate", + "description": "English: Make use of context menu where appropriate" + }, + "settingsColorBlindPrompt": { + "message": "Color-blind friendly", + "description": "English: Color-blind friendly" + }, + "settingsCloudStorageEnabledPrompt": { + "message": "Enable cloud storage support", + "description": "" + }, + "settingsAdvancedUserPrompt": { + "message": "I am an advanced user (required reading<\/a>)", + "description": "" + }, + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" + }, + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " + }, + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Disable hyperlink auditing", + "description": "English: " + }, + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prevent WebRTC from leaking local IP addresses", + "description": "English: " + }, + "settingPerSiteSwitchGroup": { + "message": "Default behavior", + "description": "" + }, + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" + }, + "settingsNoCosmeticFilteringPrompt": { + "message": "Disable cosmetic filtering", + "description": "" + }, + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input:number}} kB", + "description": "" + }, + "settingsNoRemoteFontsPrompt": { + "message": "Block remote fonts", + "description": "" + }, + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" + }, + "settingsStorageUsed": { + "message": "Storage used: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" + }, + "settingsLastRestorePrompt": { + "message": "Last restore:", + "description": "English: Last restore:" + }, + "settingsLastBackupPrompt": { + "message": "Last backup:", + "description": "English: Last backup:" + }, + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:", + "description": "Appears at the top of the _3rd-party filters_ pane" + }, + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} used out of {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" + }, + "3pAutoUpdatePrompt1": { + "message": "Auto-update filter lists", + "description": "A checkbox in the _3rd-party filters_ pane" + }, + "3pUpdateNow": { + "message": "Update sekarang", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pPurgeAll": { + "message": "Purge all caches", + "description": "A button in the in the _3rd-party filters_ pane" + }, + "3pParseAllABPHideFiltersPrompt1": { + "message": "Parse and enforce cosmetic filters", + "description": "English: Parse and enforce Adblock+ element hiding filters." + }, + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Enabling this feature increases uBlock₀'s memory footprint.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + }, + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignore generic cosmetic filters", + "description": "This will cause uBO to ignore all generic cosmetic filters." + }, + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." + }, + "3pListsOfBlockedHostsHeader": { + "message": "Lists of blocked hosts", + "description": "English: Lists of blocked hosts" + }, + "3pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "3pGroupAds": { + "message": "Iklan", + "description": "English: Ads" + }, + "3pGroupPrivacy": { + "message": "Privasi", + "description": "English: Privacy" + }, + "3pGroupMalware": { + "message": "Malware domains", + "description": "English: Malware domains" + }, + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" + }, + "3pGroupMultipurpose": { + "message": "Pelbagai guna", + "description": "English: Multipurpose" + }, + "3pGroupRegions": { + "message": "Regions, languages", + "description": "English: Regions, languages" + }, + "3pGroupCustom": { + "message": "Custom", + "description": "English: Custom" + }, + "3pExternalListsHint": { + "message": "One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + }, + "3pExternalListObsolete": { + "message": "Out of date.", + "description": "used as a tooltip for the out-of-date icon beside a list" + }, + "3pLastUpdate": { + "message": "Last update: {{ago}}.\nClick to force an update.", + "description": "used as a tooltip for the clock icon beside a list" + }, + "3pUpdating": { + "message": "Sedang mengemaskini...", + "description": "used as a tooltip for the spinner icon beside a list" + }, + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" + }, + "1pFormatHint": { + "message": "One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + }, + "1pImport": { + "message": "Import and append", + "description": "English: Import and append" + }, + "1pExport": { + "message": "Export", + "description": "English: Export" + }, + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" + }, + "1pApplyChanges": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "rulesPermanentHeader": { + "message": "Peraturan kekal", + "description": "header" + }, + "rulesTemporaryHeader": { + "message": "Peraturan sementara", + "description": "header" + }, + "rulesRevert": { + "message": "Revert", + "description": "This will remove all temporary rules" + }, + "rulesCommit": { + "message": "Commit", + "description": "This will persist temporary rules" + }, + "rulesEdit": { + "message": "Edit", + "description": "Will enable manual-edit mode (textarea)" + }, + "rulesEditSave": { + "message": "Simpan", + "description": "Will save manually-edited content and exit manual-edit mode" + }, + "rulesEditDiscard": { + "message": "Batal", + "description": "Will discard manually-edited content and exit manual-edit mode" + }, + "rulesImport": { + "message": "Import from file...", + "description": "" + }, + "rulesExport": { + "message": "Export to file", + "description": "" + }, + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" + }, + "rulesHint": { + "message": "List of your dynamic filtering rules.", + "description": "English: List of your dynamic filtering rules." + }, + "rulesFormatHint": { + "message": "Rule syntax: source destination type action<\/code> (full documentation<\/a>).", + "description": "English: dynamic rule syntax and full documentation." + }, + "whitelistPrompt": { + "message": "The whitelist directives dictate on which web pages uBlock Origin should be disabled. One entry per line. Invalid directives will be silently ignored and commented out.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." + }, + "whitelistImport": { + "message": "Import and append", + "description": "English: Import and append" + }, + "whitelistExport": { + "message": "Export", + "description": "English: Export" + }, + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" + }, + "whitelistApply": { + "message": "Apply changes", + "description": "English: Apply changes" + }, + "logRequestsHeaderType": { + "message": "Jenis", + "description": "English: Type" + }, + "logRequestsHeaderDomain": { + "message": "Domain", + "description": "English: Domain" + }, + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" + }, + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" + }, + "logAll": { + "message": "Semua", + "description": "Appears in the logger's tab selector" + }, + "logBehindTheScene": { + "message": "Behind the scene", + "description": "Pretty name for behind-the-scene network requests" + }, + "logFilterPrompt": { + "message": "filter log entries", + "description": "English: filter log entries" + }, + "logMaxEntriesTip": { + "message": "Maximum number of log entries", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" + }, + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" + }, + "loggerURLFilteringTypeLabel": { + "message": "Jenis:", + "description": "Label for the type selector" + }, + "loggerURLFilteringHeader": { + "message": "Dynamic URL filtering", + "description": "Small header to identify the dynamic URL filtering section" + }, + "loggerStaticFilteringHeader": { + "message": "Static filtering", + "description": "Small header to identify the static filtering section" + }, + "loggerStaticFilteringSentence": { + "message": "{{action}} network requests of {{type}} {{br}}which URL address matches {{url}} {{br}}and which originates {{origin}},{{br}}{{importance}} there is a matching exception filter.", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartBlock": { + "message": "Block", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAllow": { + "message": "Allow", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyType": { + "message": "any type", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartOrigin": { + "message": "from “{{origin}}”", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "from anywhere", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartNotImportant": { + "message": "except when", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringSentencePartImportant": { + "message": "even if", + "description": "Used in the static filtering wizard" + }, + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter lists in which the filter was found" + }, + "aboutChangelog": { + "message": "Catatan perubahan", + "description": "English: Change log" + }, + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" + }, + "aboutSupport": { + "message": "Support", + "description": "A link for where to get support" + }, + "aboutCode": { + "message": "Kod sumber (GPLv3)", + "description": "English: Source code (GPLv3)" + }, + "aboutContributors": { + "message": "Contributors", + "description": "English: Contributors" + }, + "aboutBackupDataButton": { + "message": "Back up to file", + "description": "Text for button to create a backup of all settings" + }, + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" + }, + "aboutRestoreDataButton": { + "message": "Restore from file...", + "description": "English: Restore from file..." + }, + "aboutResetDataButton": { + "message": "Reset to default settings...", + "description": "English: Reset to default settings..." + }, + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" + }, + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" + }, + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" + }, + "errorCantConnectTo": { + "message": "Network error: {{msg}}", + "description": "English: Network error: {{msg}}" + }, + "subscriberConfirm": { + "message": "uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" + }, + "elapsedOneMinuteAgo": { + "message": "a minute ago", + "description": "English: a minute ago" + }, + "elapsedManyMinutesAgo": { + "message": "{{value}} minit yang lalu", + "description": "English: {{value}} minutes ago" + }, + "elapsedOneHourAgo": { + "message": "an hour ago", + "description": "English: an hour ago" + }, + "elapsedManyHoursAgo": { + "message": "{{value}} jam yang lalu", + "description": "English: {{value}} hours ago" + }, + "elapsedOneDayAgo": { + "message": "a day ago", + "description": "English: a day ago" + }, + "elapsedManyDaysAgo": { + "message": "{{value}} hari yang lalu", + "description": "English: {{value}} days ago" + }, + "showDashboardButton": { + "message": "Show Dashboard", + "description": "Firefox\/Fennec-specific: Show Dashboard" + }, + "showNetworkLogButton": { + "message": "Show Logger", + "description": "Firefox\/Fennec-specific: Show Logger" + }, + "fennecMenuItemBlockingOff": { + "message": "off", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" + }, + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "English: uBlock₀ has prevented the following page from loading:" + }, + "docblockedPrompt2": { + "message": "Because of the following filter", + "description": "English: Because of the following filter" + }, + "docblockedNoParamsPrompt": { + "message": "without parameters", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + }, + "docblockedFoundIn": { + "message": "Found in:", + "description": "English: List of filter list names follows" + }, + "docblockedBack": { + "message": "Kembali", + "description": "English: Go back" + }, + "docblockedClose": { + "message": "Close this window", + "description": "English: Close this window" + }, + "docblockedProceed": { + "message": "Disable strict blocking for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." + }, + "docblockedDisableTemporary": { + "message": "Temporarily", + "description": "English: Temporarily" + }, + "docblockedDisablePermanent": { + "message": "Permanently", + "description": "English: Permanently" + }, + "cloudPush": { + "message": "Export to cloud storage", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import from cloud storage", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Import from cloud storage and merge with current settings", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "This device name:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Submit", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Revert", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Temporarily allow large media elements", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" + } +} \ No newline at end of file diff --git a/src/_locales/nb/messages.json b/src/_locales/nb/messages.json index 4d78a6970bd45..75de1f938b5e3 100644 --- a/src/_locales/nb/messages.json +++ b/src/_locales/nb/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Endelig en effektiv blokkeringsutvidelse. Lavt CPU- og minnebruk.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Endelig en effektiv blokkeringsutvidelse. Lavt CPU- og minnebruk.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Dashbord", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Dashbord", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Innstillinger", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Innstillinger", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Tredjeparts filtre", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Tredjeparts filtre", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Mine filtre", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Mine filtre", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Mine regler", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mine regler", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Hviteliste", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Hviteliste", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Logg", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Logg", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Om", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Om", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Avanserte innstillinger", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Avanserte innstillinger", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klikk: Deaktiver\/aktiver uBlock₀ for dette nettstedet.\n\nCtrl+klikk: Deaktiver uBlock₀ bare på denne siden.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klikk: Deaktiver\/aktiver uBlock₀ for dette nettstedet.\n\nCtrl+klikk: Deaktiver uBlock₀ bare på denne siden.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"forespørsler blokkert", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Klikk for å deaktivere uBlock₀ for dette nettstedet.\n\nCtrl+klikk for å deaktivere uBlock₀ bare på denne siden.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"på denne siden", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Klikk for å aktivere uBlock₀ for dette nettstedet.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} eller {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "forespørsler blokkert", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"siden installering", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "på denne siden", + "description": "English: on this page" }, - "popupOr":{ - "message":"eller", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} eller {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Åpne dashbordet", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "siden installering", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Gå til element-fjerningsmodus", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "eller", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Gå til element-velgermodus", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Åpne dashbordet", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Åpne loggen", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Gå til element-fjerningsmodus", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Slå av\/på blokkering av alle oppspretts-vinduer for dette nettstedet", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Gå til element-velgermodus", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Slå av\/på blokkering av store mediaelementer for dette nettstedet", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Åpne loggen", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Slå av\/på kosmetisk filtrering for dette nettstedet", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Slå av\/på blokkering av alle oppspretts-vinduer for dette nettstedet", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Slå av\/på blokkering av eksterne skrifttyper for dette nettstedet", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Klikk for å blokkere alle oppspretts-vinduer på dette nettstedet", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globale regler: Denne kolonnen er for regler som gjelder alle nettsteder.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Klikk for å ikke lenger blokkere alle oppspretts-vinduer på dette nettstedet", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokale regler: Denne kolonnen er for regler som bare gjelder for det gjeldende nettstedet.\nLokale regler har prioritet foran globale regler.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Slå av\/på blokkering av store mediaelementer for dette nettstedet", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Klikk for å gjøre endringer permanente.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Klikk for å blokkere store mediaelementer på dette nettstedet", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Klikk for å tilbakestille endringer.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Klikk for å ikke lenger blokkere store mediaelementer på dette nettstedet", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"alle", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Slå av\/på kosmetisk filtrering for dette nettstedet", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"bilder", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Klikk for å slå av kosmetisk filtrering på dette nettstedet", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"tredjepart", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Klikk for å slå på kosmetisk filtrering på dette nettstedet", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"tredjeparts css\/bilder", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Slå av\/på blokkering av eksterne skrifttyper for dette nettstedet", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"integrerte skript", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Klikk for å blokkere eksterne skrifttyper på dette nettstedet", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"førsteparts skript", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Klikk for å ikke lenger blokkere eksterne skrifttyper på dette nettstedet", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"tredjeparts skript", - "description":"" + "popupTipGlobalRules": { + "message": "Globale regler: Denne kolonnen er for regler som gjelder alle nettsteder.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"tredjeparts rammer", - "description":"" + "popupTipLocalRules": { + "message": "Lokale regler: Denne kolonnen er for regler som bare gjelder for det gjeldende nettstedet.\nLokale regler har prioritet foran globale regler.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domener tilkoblet", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Klikk for å gjøre endringer permanente.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} av {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Klikk for å tilbakestille endringer.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Opprett", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "alle", + "description": "" }, - "pickerPick":{ - "message":"Velg", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "bilder", + "description": "" }, - "pickerQuit":{ - "message":"Avslutt", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "tredjepart", + "description": "" }, - "pickerPreview":{ - "message":"Forhåndsvis", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "tredjeparts css\/bilder", + "description": "" }, - "pickerNetFilters":{ - "message":"Nettfiltre", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "integrerte skript", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kosmetiske filtre", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "førsteparts skript", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klikk, Ctrl-klikk", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "tredjeparts skript", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blokker element", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "tredjeparts rammer", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Skjul blokkerte elementers plassholdere", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domener tilkoblet", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Vis antall blokkerte forespørsler på ikonet", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} av {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Deaktiver hjelpetekst (verktøytips)", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Opprett", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Gjør bruk av høyreklikkmeny der det er hensiktsmessig", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Velg", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Fargeblind-vennlig", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Avslutt", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Aktiver støtte for nettlagring", - "description":"" + "pickerPreview": { + "message": "Forhåndsvis", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Jeg er en avansert bruker (Nødvendig lesning<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Nettfiltre", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"Avanserte innstillinger", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kosmetiske filtre", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Deaktiver forhåndshenting (for å hindre enhver tilkobling for blokkerte nettverksforespørsler)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klikk, Ctrl-klikk", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Deaktiver lenkesporing", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blokker element", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Hindre WebRTC i å lekke lokale IP-adresser", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Skjul blokkerte elementers plassholdere", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Standard virkemåte", - "description":"" + "settingsIconBadgePrompt": { + "message": "Vis antall blokkerte forespørsler på ikonet", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Disse standard virkemåtene kan overstyres for hvert enkelt nettsted", - "description":"" + "settingsTooltipsPrompt": { + "message": "Deaktiver hjelpetekst (verktøytips)", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Deaktiver kosmetisk filtrering", - "description":"" + "settingsContextMenuPrompt": { + "message": "Gjør bruk av høyreklikkmeny der det er hensiktsmessig", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokker mediaelementer større enn {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Fargeblind-vennlig", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokker eksterne skrifttyper", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Aktiver støtte for nettlagring", + "description": "" }, - "settingsStorageUsed":{ - "message":"Brukt lagringsplass: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Jeg er en avansert bruker (Nødvendig lesning<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Siste gjenoppretting:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "Avanserte innstillinger", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Siste sikkerhetskopi:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Deaktiver forhåndshenting (for å hindre enhver tilkobling for blokkerte nettverksforespørsler)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} nettverksfiltre + {{cosmeticFilterCount}} kosmetiske filtre fra:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Deaktiver lenkesporing", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} brukt av {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Hindre WebRTC i å lekke lokale IP-adresser", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Automatisk oppdatering av filterlister", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Standard virkemåte", + "description": "" }, - "3pUpdateNow":{ - "message":"Oppdater nå", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Disse standard virkemåtene kan overstyres for hvert enkelt nettsted", + "description": "" }, - "3pPurgeAll":{ - "message":"Tøm alle hurtigbuffere", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Deaktiver kosmetisk filtrering", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analyser og bruk kosmetiske filtre", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blokker mediaelementer større enn {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Aktivering av denne funksjonen øker minnebruken til uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blokker eksterne skrifttyper", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorer generelle kosmetiske filtre", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Blokker CSP-rapporter", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Det anbefales å aktivere dette alternativet på mindre kraftige enheter.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Brukt lagringsplass: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lister over blokkerte verter", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Siste gjenoppretting:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Bruk endringer", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Siste sikkerhetskopi:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklame", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} nettverksfiltre + {{cosmeticFilterCount}} kosmetiske filtre fra:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Personvern", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} brukt av {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domener med skadelig programvare", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Automatisk oppdatering av filterlister", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Sosiale nettverk", - "description":"English: Social" + "3pUpdateNow": { + "message": "Oppdater nå", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Multi-formål", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Tøm alle hurtigbuffere", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regioner, språk", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analyser og bruk kosmetiske filtre", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Egendefinert", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Aktivering av denne funksjonen øker minnebruken til uBlock₀<\/i>.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"En nettadresse per linje. Linjer med prefikset ‘!’ vil bli ignorert. Ugyldige nettadresser ignoreres stille.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorer generelle kosmetiske filtre", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Utgått på dato", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Det anbefales å aktivere dette alternativet på mindre kraftige enheter.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Siste oppdatering: {{ago}}.\nKlikk for å framtvinge en oppdatering.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lister over blokkerte verter", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Oppdaterer…", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Bruk endringer", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"En nettverksfeil forhindret ressursen i å bli oppdatert.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklame", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Ett filter per linje. Et filter kan være et vanlig vertsnavn eller et Adblock Plus-kompatibelt filter. Linjer med prefikset ‘!’ vil bli ignorert.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Personvern", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importer og legg til", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domener med skadelig programvare", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Eksporter", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Irritasjonsmomenter", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"mine-ublock-statiske-filtre_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Multi-formål", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Bruk endringer", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regioner, språk", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Permanente regler", - "description":"header" + "3pGroupCustom": { + "message": "Egendefinert", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Midlertidige regler", - "description":"header" + "3pExternalListsHint": { + "message": "En nettadresse per linje. Linjer med prefikset ‘!’ vil bli ignorert. Ugyldige nettadresser ignoreres stille.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Tilbakestill", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Utgått på dato", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Send", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Siste oppdatering: {{ago}}.\nKlikk for å framtvinge en oppdatering.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Rediger", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Oppdaterer…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Lagre", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "En nettverksfeil forhindret ressursen i å bli oppdatert.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Forkast", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Ett filter per linje. Et filter kan være et vanlig vertsnavn eller et Adblock Plus-kompatibelt filter. Linjer med prefikset ‘!’ vil bli ignorert.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importer fra fil", - "description":"" + "1pImport": { + "message": "Importer og legg til", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Eksporter til fil", - "description":"" + "1pExport": { + "message": "Eksporter", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"mine-ublock-dynamiske-regler_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "mine-ublock-statiske-filtre_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Liste over dine dynamiske filtreringsregler.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Bruk endringer", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Regelsyntaks: kilde destinasjon type handling<\/code> (full dokumentasjon<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Permanente regler", + "description": "header" }, - "whitelistPrompt":{ - "message":"Hvitelistedirektivene bestemmer hvilke nettsider uBlock Origin ikke skal være aktiv på. Én oppføring per linje. Ugyldige direktiver blir stille ignorert og kommentert ut.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Midlertidige regler", + "description": "header" }, - "whitelistImport":{ - "message":"Importer og legg til", - "description":"English: Import and append" + "rulesRevert": { + "message": "Tilbakestill", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Eksporter", - "description":"English: Export" + "rulesCommit": { + "message": "Send", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"min-ublock-hviteliste_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Rediger", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Bruk endringer", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Lagre", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Forkast", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domene", - "description":"English: Domain" + "rulesImport": { + "message": "Importer fra fil", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"Nettadresse", - "description":"English: URL" + "rulesExport": { + "message": "Eksporter til fil", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "mine-ublock-dynamiske-regler_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Alle", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Liste over dine dynamiske filtreringsregler.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Bak kulissene", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Regelsyntaks: kilde destinasjon type handling<\/code> (full dokumentasjon<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtrer loggoppføringer", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Hvitelistedirektivene bestemmer hvilke nettsider uBlock Origin ikke skal være aktiv på. Én oppføring per linje. Ugyldige direktiver blir stille ignorert og kommentert ut.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maksimum antall loggoppføringer", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importer og legg til", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Eksporter", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Type:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "min-ublock-hviteliste_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamisk adressefiltrering", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Bruk endringer", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statisk filtrering", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} nettverksforespørsler av {{type}} {{br}}som matcher nettadressen {{url}} {{br}}og som stammer {{origin}},{{br}}{{importance}} det er et matchende unntaksfilter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domene", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokker", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "Nettadresse", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Tillat", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Alle", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"enhver type", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Bak kulissene", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"fra “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtrer loggoppføringer", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"fra hvor som helst", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maksimum antall loggoppføringer", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"unntatt når", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"selv om", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Type:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statisk filter {{filter}} funnet i:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamisk adressefiltrering", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Endringslogg", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statisk filtrering", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} nettverksforespørsler av {{type}} {{br}}som matcher nettadressen {{url}} {{br}}og som stammer {{origin}},{{br}}{{importance}} det er et matchende unntaksfilter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Brukerstøtte", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokker", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Kildekode (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Tillat", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Bidragsytere", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "type “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Sikkerhetskopier til fil", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "enhver type", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"min-ublock-sikkerhetskopi_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "fra “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Gjenopprett fra fil", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "fra hvor som helst", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Tilbakestill til standardinnstillinger", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "unntatt når", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Alle dine innstillinger vil bli overskrevet med data sikkerhetskopiert {{time}}, og uBlock₀ vil starte på nytt.\n\nOverskrive alle eksisterende innstillinger med sikkerhetskopierte data?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "selv om", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Dataene kunne ikke leses eller er ugyldige", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statisk filter {{filter}} funnet i:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Alle dine innstillinger blir fjernet, og uBlock₀ vil starte på nytt.\n\nTilbakestille uBlock₀ til opprinnelige innstillinger?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Endringslogg", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Nettverksfeil: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Legge til følgende nettadresse i din egendefinerte filterliste?\n\nTittel: \"{{title}}\"\nNettadresse: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Brukerstøtte", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"et minutt siden", - "description":"English: a minute ago" + "aboutCode": { + "message": "Kildekode (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutter siden", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Bidragsytere", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"en time siden", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Sikkerhetskopier til fil", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} timer siden", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "min-ublock-sikkerhetskopi_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"en dag siden", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Gjenopprett fra fil", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dager siden", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Tilbakestill til standardinnstillinger", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Vis dashbord", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Alle dine innstillinger vil bli overskrevet med data sikkerhetskopiert {{time}}, og uBlock₀ vil starte på nytt.\n\nOverskrive alle eksisterende innstillinger med sikkerhetskopierte data?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Vis logg", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Dataene kunne ikke leses eller er ugyldige", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"av", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Alle dine innstillinger blir fjernet, og uBlock₀ vil starte på nytt.\n\nTilbakestille uBlock₀ til opprinnelige innstillinger?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin har forhindret lasting av følgende side:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Nettverksfeil: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"På grunn av følgende filter:", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Legge til følgende nettadresse i din egendefinerte filterliste?\n\nTittel: \"{{title}}\"\nNettadresse: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"uten parametere", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "et minutt siden", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Funnet i:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minutter siden", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Gå tilbake", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "en time siden", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Lukk dette vinduet", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} timer siden", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Slå av streng (fullstendig) blokkering for {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "en dag siden", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Midlertidig", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} dager siden", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Vis dashbord", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Eksporter til nettlagring", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Vis logg", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importer fra nettlagring", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "av", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importer fra nettlagring og slå sammen med gjeldende innstillinger", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin har forhindret lasting av følgende side:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "På grunn av følgende filter:", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Denne enhets navn:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "uten parametere", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Advarsel! Endringer av de avanserte innstillingene skjer på eget ansvar.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Funnet i:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Send", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Gå tilbake", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Bruk endringer", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Lukk dette vinduet", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Tilbakestill", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Slå av streng (fullstendig) blokkering for {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Midlertidig", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Tillat store mediaelementer midlertidig", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanent", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Eksporter til nettlagring", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importer fra nettlagring", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importer fra nettlagring og slå sammen med gjeldende innstillinger", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Denne enhets navn:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Advarsel! Endringer av de avanserte innstillingene skjer på eget ansvar.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Send", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Bruk endringer", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Tilbakestill", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Tillat store mediaelementer midlertidig", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/nl/messages.json b/src/_locales/nl/messages.json index 8b165636e261c..3804f7b674c00 100644 --- a/src/_locales/nl/messages.json +++ b/src/_locales/nl/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Eindelijk, een efficiënte adblocker. Gebruikt weinig processorkracht en geheugen.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Eindelijk, een efficiënte adblocker. Gebruikt weinig processorkracht en geheugen.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ – Dashboard", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ – Dashboard", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Instellingen", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Instellingen", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filters van derden", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filters van derden", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Mijn filters", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Mijn filters", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Mijn regels", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mijn regels", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Whitelist", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Whitelist", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ – Logger", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ – Logger", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Over", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Over", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Geavanceerde instellingen", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Geavanceerde instellingen", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klikken: uBlock₀ voor deze website in- of uitschakelen.\n\nCtrl+klikken: uBlock₀ alleen voor deze pagina uitschakelen.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klikken: uBlock₀ voor deze website in- of uitschakelen.\n\nCtrl+klikken: uBlock₀ alleen voor deze pagina uitschakelen.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"geblokkeerde aanvragen", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Klik om uBlock₀ voor deze website uit te schakelen.\n\nCtrl+klik om uBlock₀ alleen op deze pagina uit te schakelen.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"op deze pagina", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Klik om uBlock₀ voor deze website in te schakelen.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} of {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "geblokkeerde aanvragen", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"sinds installatie", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "op deze pagina", + "description": "English: on this page" }, - "popupOr":{ - "message":"of", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} of {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Dashboard openen", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "sinds installatie", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Elementwissermodus openen", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "of", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Elementkiezermodus openen", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Dashboard openen", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Logger openen", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Elementwissermodus openen", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Alle pop-ups voor deze website in-\/uitschakelen", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Elementkiezermodus openen", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Grote media-elementen voor deze website in-\/uitschakelen", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Logger openen", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Cosmetische filters voor deze website in-\/uitschakelen", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Alle pop-ups voor deze website in-\/uitschakelen", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Blokkeren van externe lettertypen voor deze website in-\/uitschakelen", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Klik om alle pop-ups op deze website te blokkeren", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Algemene regels: deze kolom is voor regels die op alle websites van toepassing zijn.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Klik om alle pop-ups op deze website niet meer te blokkeren", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokale regels: deze kolom is voor regels die alleen op de huidige website van toepassing zijn.\nLokale regels hebben voorrang op algemene regels.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Grote media-elementen voor deze website in-\/uitschakelen", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Klik om uw wijzigingen permanent te maken.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Klik om grote media-elementen op deze website te blokkeren", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Klik om uw wijzigingen ongedaan te maken.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Klik om grote media-elementen op deze website niet meer te blokkeren", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"alles", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Cosmetische filters voor deze website in-\/uitschakelen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"afbeeldingen", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Klik om cosmetische filters op deze website uit te schakelen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"van derden", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Klik om cosmetische filters op deze website in te schakelen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/afbeeldingen van derden", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Blokkeren van externe lettertypen voor deze website in-\/uitschakelen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"inline scripts", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Klik om externe lettertypen op deze website te blokkeren", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"scripts van de webpagina", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Klik om externe lettertypen op deze website niet meer te blokkeren", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"scripts van derden", - "description":"" + "popupTipGlobalRules": { + "message": "Algemene regels: deze kolom is voor regels die op alle websites van toepassing zijn.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"frames van derden", - "description":"" + "popupTipLocalRules": { + "message": "Lokale regels: deze kolom is voor regels die alleen op de huidige website van toepassing zijn.\nLokale regels hebben voorrang op algemene regels.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"verbonden domeinen", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Klik om uw wijzigingen permanent te maken.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} van {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Klik om uw wijzigingen ongedaan te maken.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Aanmaken", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "alles", + "description": "" }, - "pickerPick":{ - "message":"Kiezen", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "afbeeldingen", + "description": "" }, - "pickerQuit":{ - "message":"Afsluiten", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "van derden", + "description": "" }, - "pickerPreview":{ - "message":"Voorbeeld", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css\/afbeeldingen van derden", + "description": "" }, - "pickerNetFilters":{ - "message":"Netwerkfilters", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "inline scripts", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Cosmetische filters", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "scripts van de webpagina", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "scripts van derden", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Element blokkeren", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "frames van derden", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Tijdelijke aanduidingen van geblokkeerde elementen verbergen", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "verbonden domeinen", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Het aantal geblokkeerde aanvragen op het pictogram tonen", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} van {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Tooltips uitschakelen", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Aanmaken", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Waar mogelijk gebruikmaken van het contextmenu", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Kiezen", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Vriendelijk voor kleurenblinden", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Afsluiten", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ondersteuning voor cloudopslag inschakelen", - "description":"" + "pickerPreview": { + "message": "Voorbeeld", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Ik ben een ervaren gebruiker (Lees dit eerst<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Netwerkfilters", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"geavanceerde instellingen", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Cosmetische filters", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Vooraf ophalen uitschakelen (om verbindingen voor geblokkeerde netwerkaanvragen te voorkomen)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Hyperlink auditing uitschakelen", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Element blokkeren", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Het lekken van lokale IP-adressen via WebRTC voorkomen", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Tijdelijke aanduidingen van geblokkeerde elementen verbergen", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Standaardgedrag", - "description":"" + "settingsIconBadgePrompt": { + "message": "Het aantal geblokkeerde aanvragen op het pictogram tonen", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Van deze standaardgedragingen kan per website worden afgeweken", - "description":"" + "settingsTooltipsPrompt": { + "message": "Tooltips uitschakelen", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Cosmetische filters uitschakelen", - "description":"" + "settingsContextMenuPrompt": { + "message": "Waar mogelijk gebruikmaken van het contextmenu", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Media-elementen groter dan {{input:number}} kB blokkeren", - "description":"" + "settingsColorBlindPrompt": { + "message": "Vriendelijk voor kleurenblinden", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Externe lettertypen blokkeren", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Ondersteuning voor cloudopslag inschakelen", + "description": "" }, - "settingsStorageUsed":{ - "message":"Gebruikte opslagruimte: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Ik ben een ervaren gebruiker (Lees dit eerst<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Laatste terugzetactie:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "geavanceerde instellingen", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Laatste back-up:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Vooraf ophalen uitschakelen (om verbindingen voor geblokkeerde netwerkaanvragen te voorkomen)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} netwerkfilters + {{cosmeticFilterCount}} cosmetische filters van:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Hyperlink auditing uitschakelen", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} van {{total}} gebruikt", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Het lekken van lokale IP-adressen via WebRTC voorkomen", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Filterlijsten automatisch bijwerken", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Standaardgedrag", + "description": "" }, - "3pUpdateNow":{ - "message":"Nu bijwerken", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Van deze standaardgedragingen kan per website worden afgeweken", + "description": "" }, - "3pPurgeAll":{ - "message":"Alle caches legen", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Cosmetische filters uitschakelen", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Cosmetische filters inlezen en toepassen", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Media-elementen groter dan {{input:number}} kB blokkeren", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Het inschakelen van deze functie verhoogt het geheugengebruik van uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Externe lettertypen blokkeren", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Algemene cosmetische filters negeren", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "CSP-rapporten blokkeren", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Het wordt aanbevolen deze optie op minder krachtige apparaten in te schakelen.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Gebruikte opslagruimte: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lijst van geblokkeerde hosts", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Laatste terugzetactie:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Wijzigingen toepassen", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Laatste back-up:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Advertenties", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} netwerkfilters + {{cosmeticFilterCount}} cosmetische filters van:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privacy", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} van {{total}} gebruikt", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Malwaredomeinen", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Filterlijsten automatisch bijwerken", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Sociaal", - "description":"English: Social" + "3pUpdateNow": { + "message": "Nu bijwerken", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Multifunctioneel", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Alle caches legen", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Gebieden, talen", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Cosmetische filters inlezen en toepassen", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Aangepast", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Het inschakelen van deze functie verhoogt het geheugengebruik van uBlock₀.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Eén URL per regel. Regels beginnend met ‘!’ worden genegeerd. Ongeldige URL’s worden zonder mededeling genegeerd.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Algemene cosmetische filters negeren", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Verouderd.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Het wordt aanbevolen deze optie op minder krachtige apparaten in te schakelen.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Laatst bijgewerkt: {{ago}}.\nKlik om een update af te dwingen.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lijst van geblokkeerde hosts", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Bijwerken...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Wijzigingen toepassen", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Een netwerkfout heeft voorkomen dat de bron werd bijgewerkt.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Advertenties", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Eén filter per regel. Een filter kan een gewone hostnaam of een Adblock Plus-compatibel filter zijn. Regels beginnend met ‘!’ worden genegeerd.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privacy", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importeren en toevoegen", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Malwaredomeinen", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exporteren", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Storende elementen", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"mijn-ublock-statische-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Multifunctioneel", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Wijzigingen toepassen", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Gebieden, talen", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Permanente regels", - "description":"header" + "3pGroupCustom": { + "message": "Aangepast", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Tijdelijke regels", - "description":"header" + "3pExternalListsHint": { + "message": "Eén URL per regel. Regels beginnend met ‘!’ worden genegeerd. Ongeldige URL’s worden zonder mededeling genegeerd.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Terugzetten", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Verouderd.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Vastleggen", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Laatst bijgewerkt: {{ago}}.\nKlik om een update af te dwingen.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Bewerken", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Bijwerken...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Opslaan", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Een netwerkfout heeft voorkomen dat de bron werd bijgewerkt.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Annuleren", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Eén filter per regel. Een filter kan een gewone hostnaam of een Adblock Plus-compatibel filter zijn. Regels beginnend met ‘!’ worden genegeerd.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importeren uit bestand...", - "description":"" + "1pImport": { + "message": "Importeren en toevoegen", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exporteren naar bestand...", - "description":"" + "1pExport": { + "message": "Exporteren", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"mijn-ublock-dynamische-regels_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "mijn-ublock-statische-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Lijst van uw dynamische filterregels.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Wijzigingen toepassen", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Regelsyntaxis: bron bestemming type actie<\/code> (volledige documentatie<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Permanente regels", + "description": "header" }, - "whitelistPrompt":{ - "message":"De whitelist-instructies schrijven voor op welke webpagina’s uBlock Origin dient te worden uitgeschakeld. Eén vermelding per regel. Ongeldige instructies worden zonder mededeling genegeerd en uitgecommentarieerd.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Tijdelijke regels", + "description": "header" }, - "whitelistImport":{ - "message":"Importeren en toevoegen", - "description":"English: Import and append" + "rulesRevert": { + "message": "Terugzetten", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exporteren", - "description":"English: Export" + "rulesCommit": { + "message": "Vastleggen", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"mijn-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Bewerken", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Wijzigingen toepassen", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Opslaan", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Type", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Annuleren", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domein", - "description":"English: Domain" + "rulesImport": { + "message": "Importeren uit bestand...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Exporteren naar bestand...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "mijn-ublock-dynamische-regels_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Alles", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Lijst van uw dynamische filterregels.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Achter de schermen", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Regelsyntaxis: bron bestemming type actie<\/code> (volledige documentatie<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"logboekvermeldingen filteren", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "De whitelist-instructies schrijven voor op welke webpagina’s uBlock Origin dient te worden uitgeschakeld. Eén vermelding per regel. Ongeldige instructies worden zonder mededeling genegeerd en uitgecommentarieerd.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maximale aantal logboekvermeldingen", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importeren en toevoegen", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exporteren", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Soort:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "mijn-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamische URL-filtering", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Wijzigingen toepassen", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statische filtering", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Type", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"Netwerkaanvragen van {{type}} {{action}}{{br}}waarvan de URL overeenkomt met {{url}} {{br}}en die {{origin}} afkomstig zijn,{{br}}{{importance}} er een overeenkomstig uitzonderingsfilter bestaat.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domein", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokkeren", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Toestaan", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"type ‘{{type}}’", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Alles", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"elk type", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Achter de schermen", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"van ‘{{origin}}’", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "logboekvermeldingen filteren", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"van overal", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maximale aantal logboekvermeldingen", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"behalve wanneer", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"zelfs als", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Soort:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statisch filter {{filter}} gevonden in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamische URL-filtering", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Wijzigingenlogboek", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statische filtering", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "Netwerkaanvragen van {{type}} {{action}}{{br}}waarvan de URL overeenkomt met {{url}} {{br}}en die {{origin}} afkomstig zijn,{{br}}{{importance}} er een overeenkomstig uitzonderingsfilter bestaat.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Ondersteuning", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokkeren", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Broncode (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Toestaan", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Medewerkers", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "type ‘{{type}}’", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Back-up maken naar bestand...", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "elk type", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"mijn-ublock-back-up_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "van ‘{{origin}}’", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Terugzetten uit bestand...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "van overal", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Standaardinstellingen terugzetten...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "behalve wanneer", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Al uw instellingen zullen met back-upgegevens van {{time}} worden overschreven, en uBlock₀ zal worden herstart.\n\nWilt u alle bestaande instellingen met back-upgegevens overschrijven?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "zelfs als", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"De gegevens konden niet worden gelezen of zijn ongeldig", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statisch filter {{filter}} gevonden in:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Al uw instellingen zullen worden verwijderd, waarna uBlock₀ wordt herstart.\n\nStandaardwaarden van uBlock₀ terugzetten?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Wijzigingenlogboek", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Netwerkfout: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: de volgende URL aan uw lijsten met aangepaste filters toevoegen?\n\nTitel: ‘{{title}}’\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Ondersteuning", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"een minuut geleden", - "description":"English: a minute ago" + "aboutCode": { + "message": "Broncode (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuten geleden", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Medewerkers", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"een uur geleden", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Back-up maken naar bestand...", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} uur geleden", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "mijn-ublock-back-up_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"een dag geleden", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Terugzetten uit bestand...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dagen geleden", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Standaardinstellingen terugzetten...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Dashboard tonen", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Al uw instellingen zullen met back-upgegevens van {{time}} worden overschreven, en uBlock₀ zal worden herstart.\n\nWilt u alle bestaande instellingen met back-upgegevens overschrijven?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Logger tonen", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "De gegevens konden niet worden gelezen of zijn ongeldig", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"uitgeschakeld", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Al uw instellingen zullen worden verwijderd, waarna uBlock₀ wordt herstart.\n\nStandaardwaarden van uBlock₀ terugzetten?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ heeft het laden van de volgende pagina voorkomen:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Netwerkfout: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Vanwege het volgende filter", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: de volgende URL aan uw lijsten met aangepaste filters toevoegen?\n\nTitel: ‘{{title}}’\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"zonder parameters", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "een minuut geleden", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Gevonden in:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minuten geleden", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Teruggaan", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "een uur geleden", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Dit venster sluiten", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} uur geleden", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Strenge blokkering voor {{hostname}} uitschakelen", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "een dag geleden", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Tijdelijk", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} dagen geleden", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Dashboard tonen", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exporteren naar cloudopslag", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Logger tonen", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importeren uit cloudopslag", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "uitgeschakeld", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importeren uit cloudopslag en samenvoegen met huidige instellingen", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ heeft het laden van de volgende pagina voorkomen:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"... \n...", - "description":"" + "docblockedPrompt2": { + "message": "Vanwege het volgende filter", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Apparaatnaam:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "zonder parameters", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Waarschuwing! Wijzig deze geavanceerde instellingen op eigen risico.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Gevonden in:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Verzenden", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Teruggaan", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Wijzigingen toepassen", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Dit venster sluiten", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Ongedaan maken", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Strenge blokkering voor {{hostname}} uitschakelen", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Tijdelijk", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Grote media-elementen tijdelijk toestaan", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanent", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exporteren naar cloudopslag", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importeren uit cloudopslag", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importeren uit cloudopslag en samenvoegen met huidige instellingen", + "description": "tooltip" + }, + "cloudNoData": { + "message": "... \n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Apparaatnaam:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Waarschuwing! Wijzig deze geavanceerde instellingen op eigen risico.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Verzenden", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Wijzigingen toepassen", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Ongedaan maken", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Grote media-elementen tijdelijk toestaan", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/pl/messages.json b/src/_locales/pl/messages.json index c01c915de032b..e17038f4b5d41 100644 --- a/src/_locales/pl/messages.json +++ b/src/_locales/pl/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Nareszcie skuteczne blokowanie reklam, niskie użycie procesora i pamięci.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Nareszcie, skuteczny bloker, charakteryzujący się niskim użyciem procesora i pamięci.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ – Panel sterowania", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ – Panel sterowania", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ustawienia", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ustawienia", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Zewnętrzne filtry", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Zewnętrzne filtry", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Moje filtry", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Moje filtry", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Moje reguły", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Moje reguły", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Wyjątki", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Wyjątki", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock — Dziennik żądań sieciowych", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock — Dziennik żądań sieciowych", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Informacje", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Informacje", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Ustawienia zaawansowane", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Ustawienia zaawansowane", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Kliknij, aby włączyć\/wyłączyć uBlock₀ na tej witrynie.\n\nKliknij z wciśniętym klawiszem Ctrl, aby włączyć\/wyłączyć uBlock₀ tylko na tej stronie.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Kliknij, aby włączyć\/wyłączyć uBlock₀ na tej witrynie.\n\nKliknij z wciśniętym klawiszem Ctrl, aby włączyć\/wyłączyć uBlock₀ tylko na tej stronie.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"Zablokowane żądania", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Kliknij, aby wyłączyć uBlock₀ dla tej witryny.\n\nKliknij z wciśniętym klawiszem Ctrl, aby wyłączyć uBlock₀ tylko dla tej strony.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"na tej stronie", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Kliknij, aby włączyć uBlock₀ dla tej witryny.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} ({{percent}}%)", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "Zablokowane żądania", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"od zainstalowania", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "na tej stronie", + "description": "English: on this page" }, - "popupOr":{ - "message":"lub", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} ({{percent}}%)", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Kliknij, aby otworzyć panel sterowania", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "od zainstalowania", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Przejdź do trybu usuwania elementów", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "lub", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Przejdź do trybu zaznaczania elementów", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Otwórz panel sterowania", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Przejdź do dziennika żądań", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Przejdź do trybu usuwania elementów", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Włącz\/wyłącz blokowanie wyskakujących okien na tej witrynie", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Przejdź do trybu zaznaczania elementów", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Włącz\/wyłącz blokowanie elementów multimedialnych", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Przejdź do dziennika żądań", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Włącz\/wyłącz kosmetyczne filtrowanie na tej witrynie", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Włącz\/wyłącz blokowanie wyskakujących okien na tej witrynie", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Włącz\/wyłącz blokowanie zdalnych czcionek na tej stronie", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Kliknij, aby zablokować wszystkie wyskakujące okna na tej witrynie", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Reguły globalne. W tej kolumnie znajdują się reguły stosowane na wszystkich witrynach.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Kliknij, aby nie blokować wyskakujących okien na tej witrynie", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Reguły lokalne. W tej kolumnie znajdują się reguły stosowane tylko na bieżącej witrynie.\nReguły lokalne zastępują reguły globalne.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Włącz\/wyłącz blokowanie dużych elementów multimedialnych na tej witrynie", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Kliknij, aby zastosować zmiany na stałe.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Kliknij, aby zablokować duże elementy multimedialne na tej witrynie", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Kliknij, aby przywrócić zmiany.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Kliknij, aby nie blokować dużych elementów multimedialnych na tej witrynie", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"wszystko", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Włącz\/wyłącz kosmetyczne filtrowanie na tej witrynie", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"obrazki", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Kliknij, aby wyłączyć filtrowanie kosmetyczne na tej witrynie", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"domeny zewnętrzne", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Kliknij, aby włączyć filtrowanie kosmetyczne na tej witrynie", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"zewnętrzne css\/obrazki", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Włącz\/wyłącz blokowanie zdalnych czcionek na tej witrynie", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"zagnieżdżone skrypty", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Kliknij, aby zablokować zdalne czcionki na tej witrynie", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"skrypty z tej domeny", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Kliknij, aby nie blokować zdalnych czcionek na tej witrynie", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"skrypty z zewnętrznej domeny", - "description":"" + "popupTipGlobalRules": { + "message": "Reguły globalne. W tej kolumnie znajdują się reguły stosowane na wszystkich witrynach.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"ramki z zewnętrznej domeny", - "description":"" + "popupTipLocalRules": { + "message": "Reguły lokalne. W tej kolumnie znajdują się reguły stosowane tylko na bieżącej witrynie.\nReguły lokalne zastępują reguły globalne.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"Podłączone domeny", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Kliknij, aby zastosować zmiany na stałe.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} z {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Kliknij, aby odrzucić zmiany.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Utwórz", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "wszystko", + "description": "" }, - "pickerPick":{ - "message":"Wybierz", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "obrazki", + "description": "" }, - "pickerQuit":{ - "message":"Zamknij", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "domeny zewnętrzne", + "description": "" }, - "pickerPreview":{ - "message":"Podgląd", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "zewnętrzne css\/obrazki", + "description": "" }, - "pickerNetFilters":{ - "message":"Filtry sieciowe", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "zagnieżdżone skrypty", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Filtry kosmetyczne", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "skrypty z tej domeny", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Kliknięcie, kliknięcie z Ctrl", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "skrypty z zewnętrznej domeny", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Zablokuj element", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "ramki z zewnętrznej domeny", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ukrywaj symbole zastępcze zablokowanych elementów", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "Podłączone domeny", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Wyświetlaj liczbę zablokowanych żądań na ikonie rozszerzenia", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} z {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Nie wyświetlaj podpowiedzi", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Utwórz", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Korzystaj z menu kontekstowego w stosownych przypadkach", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Wybierz", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Zastosuj schemat kolorów przyjazny osobom niedowidzącym", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Zamknij", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Włącz obsługę dysków w chmurze", - "description":"" + "pickerPreview": { + "message": "Podgląd", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Funkcje dla zaawansowanych użytkowników (Przeczytaj instrukcje<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Filtry sieciowe", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"Ustawienia zaawansowane", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Filtry kosmetyczne", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Wyłącz wstępne pobieranie, by uniknąć połączeń z zablokowanymi zapytaniami sieciowymi", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Kliknięcie, kliknięcie z Ctrl", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Nie śledź kliknięć odnośników", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Zablokuj element", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Zapobiegaj wyciekom adresu IP poprzez interfejs WebRTC", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Ukrywaj symbole zastępcze zablokowanych elementów", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Działanie domyślne", - "description":"" + "settingsIconBadgePrompt": { + "message": "Wyświetlaj liczbę zablokowanych żądań na ikonie rozszerzenia", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Te ustawienia mogą być zastąpione przez ustawienia danej witryny", - "description":"" + "settingsTooltipsPrompt": { + "message": "Nie wyświetlaj podpowiedzi", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Wyłącz filtrowanie kosmetyczne", - "description":"" + "settingsContextMenuPrompt": { + "message": "Korzystaj z menu kontekstowego w stosownych przypadkach", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokuj elementy multimedialne większe niż {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Interfejs przyjazny osobom z zaburzeniami widzenia kolorów", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokuj zdalne czcionki", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Włącz obsługę zapisu ustawień w chmurze", + "description": "" }, - "settingsStorageUsed":{ - "message":"Użycie pamięci masowej: {{value}} bajtów", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Jestem zaawansowanym użytkownikiem (Wymagana lektura<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Ostatnie przywrócenie wykonano:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "Ustawienia zaawansowane", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Ostatnią kopię zapasową wykonano:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Wyłącz wstępne pobieranie, by uniknąć połączeń z zablokowanymi zapytaniami sieciowymi", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"Filtry sieciowe: {{netFilterCount}} ÷ Filtry kosmetyczne: {{cosmeticFilterCount}} z:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Nie śledź kliknięć odnośników", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"użytych {{used}} z {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Zapobiegaj wyciekom adresu IP poprzez interfejs WebRTC", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Automatycznie aktualizuj listy filtrów", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Działanie domyślne", + "description": "" }, - "3pUpdateNow":{ - "message":"Aktualizuj teraz", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Te ustawienia mogą być zastąpione przez ustawienia danej witryny", + "description": "" }, - "3pPurgeAll":{ - "message":"Wyczyść całą pamięć podręczną", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Wyłącz filtrowanie kosmetyczne", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Przetwarzaj i stosuj filtry kosmetyczne", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blokuj elementy multimedialne większe niż {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Włączenie tej funkcji powoduje zwiększenie użycia pamięci przez uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blokuj zdalne czcionki", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignoruj ogólne filtry kosmetyczne", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Blokuj raporty CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Zaleca się włączenie tej funkcji na mniej wydajnych urządzeniach.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Użycie pamięci masowej: {{value}} bajtów", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listy zablokowanych hostów", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Ostatnie przywrócenie wykonano:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Zastosuj zmiany", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Ostatnią kopię zapasową wykonano:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklamy", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "Filtry sieciowe: {{netFilterCount}} + filtry kosmetyczne: {{cosmeticFilterCount}} z:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Prywatność", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "użytych {{used}} z {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domeny ze złośliwym oprogramowaniem", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Automatycznie aktualizuj listy filtrów", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Serwisy społecznościowe", - "description":"English: Social" + "3pUpdateNow": { + "message": "Aktualizuj teraz", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Wielofunkcyjne", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Wyczyść całą pamięć podręczną", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regiony, języki", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Przetwarzaj i stosuj filtry kosmetyczne", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Specjalne", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Włączenie tej funkcji powoduje zwiększenie użycia pamięci przez uBlock₀.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"W jednym wierszu może być tylko jeden adres URL. Wiersze poprzedzone znakiem wykrzyknika [ ! ] i błędne adresy URL będą pomijane.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignoruj ogólne filtry kosmetyczne", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Nieaktualne.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

Ogólne filtry kosmetyczne, to filtry które mają być zastosowane na wszystkich stronach internetowych.

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

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

Zaleca się włączenie tej funkcji na mniej wydajnych urządzeniach.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Zaktualizowano: {{ago}}.\nKliknij by wymusić aktualizację.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Listy zablokowanych hostów", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Aktualizowanie...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Zastosuj zmiany", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Błąd sieci uniemożliwił aktualizację zasobów.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklamy", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"W jednym wierszu może być tylko jeden filtr. Filtrem może być nazwa hosta lub filtr kompatybilny z dodatkiem AdBlock Plus. Wiersze poprzedzone znakiem wykrzyknika [ ! ] będą pomijane.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Prywatność", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importuj i dołącz", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domeny ze złośliwym oprogramowaniem", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Eksportuj", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Elementy irytujące", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-statyczne-filtry_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Wielofunkcyjne", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Zastosuj zmiany", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regiony, języki", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Stałe reguły", - "description":"header" + "3pGroupCustom": { + "message": "Własne", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Tymczasowe reguły", - "description":"header" + "3pExternalListsHint": { + "message": "W jednym wierszu może być tylko jeden adres URL. Wiersze poprzedzone znakiem wykrzyknika [ ! ] i błędne adresy URL będą pomijane.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Przywróć", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Nieaktualne.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Zatwierdź", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Zaktualizowano: {{ago}}.\nKliknij, aby wymusić aktualizację.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Edytuj", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Aktualizowanie...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Zapisz", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Błąd sieci uniemożliwił aktualizację zasobów.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Odrzuć", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "W jednym wierszu może być tylko jeden filtr. Filtrem może być nazwa hosta lub filtr kompatybilny z dodatkiem AdBlock Plus. Wiersze poprzedzone znakiem wykrzyknika [ ! ] będą pomijane.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importuj z pliku…", - "description":"" + "1pImport": { + "message": "Importuj i dołącz", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Eksportuj do pliku…", - "description":"" + "1pExport": { + "message": "Eksportuj", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"ublock-dynamiczne-reguly_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-statyczne-filtry_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Lista reguł dynamicznego filtrowania.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Zastosuj zmiany", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Składnia reguły: źródło cel typ akcja<\/code> (pełna dokumentacja<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Stałe reguły", + "description": "header" }, - "whitelistPrompt":{ - "message":"Wytyczne wyjątków nakazują, na których stronach uBlock Origin powinien zostać wyłączony. Jeden wpis na linię. Nieprawidłowe wytyczne zostaną bez powiadomienia zignorowane i wykomentowane.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Tymczasowe reguły", + "description": "header" }, - "whitelistImport":{ - "message":"Importuj i dołącz", - "description":"English: Import and append" + "rulesRevert": { + "message": "Przywróć", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Eksportuj", - "description":"English: Export" + "rulesCommit": { + "message": "Zatwierdź", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"ublock-lista-wyjatkow_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Edytuj", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Zastosuj zmiany", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Zapisz", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Typ", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Odrzuć", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domena", - "description":"English: Domain" + "rulesImport": { + "message": "Importuj z pliku…", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"Adres URL", - "description":"English: URL" + "rulesExport": { + "message": "Eksportuj do pliku…", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtr", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "ublock-dynamiczne-reguly_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Wszystkie", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Lista reguł dynamicznego filtrowania.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Ukryte żądania", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Składnia reguły: źródło cel typ akcja<\/code> (pełna dokumentacja<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtruj wpisy", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Wytyczne wyjątków nakazują, na których stronach uBlock Origin powinien zostać wyłączony. Jeden wpis na linię. Nieprawidłowe wytyczne zostaną bez powiadomienia zignorowane i wykomentowane.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maksymalna liczba wyświetlanych wpisów", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importuj i dołącz", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontekst:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Eksportuj", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Typ:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "ublock-lista-wyjatkow_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamiczne filtrowanie URL", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Zastosuj zmiany", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrowanie statyczne", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Typ", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} żądania sieciowe {{type}}, których adres URL jest zgodny z: {{url}} {{br}}i pochodzi {{origin}}, {{importance}} filtr znajduje się na liście wyjątków.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domena", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokuj", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "Adres URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Zezwalaj na", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtr", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"typu „{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Wszystkie", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"każdego typu", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Ukryte żądania", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"z „{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtruj wpisy", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"z dowolnego miejsca", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maksymalna liczba wyświetlanych wpisów", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"z wyjątkiem, gdy", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kontekst:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"nawet, jeśli", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Typ:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtr statyczny {{filter}} znajdujący się w:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamiczne filtrowanie URL", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Dziennik zmian", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Filtrowanie statyczne", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Informacje", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} żądania sieciowe {{type}}, których adres URL jest zgodny z: {{url}} {{br}}i pochodzi {{origin}}, {{importance}} filtr znajduje się na liście wyjątków.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Pomoc", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokuj", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Kod źródłowy (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Zezwalaj na", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Współtwórcy", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "typu „{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Utwórz kopię zapasową", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "każdego typu", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-kopia-zapasowa_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "z „{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Przywróć z kopii…", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "z dowolnego miejsca", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Przywróć ustawienia domyślne…", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "z wyjątkiem, gdy", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Wszystkie twoje ustawienia zostaną zastąpione ustawieniami z kopii stworzonej {{time}}. Po zakończeniu uBlock₀ zostanie uruchomiony ponownie.\n\nPrzywrócić ustawienia z kopii zapasowej?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "nawet, jeśli", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Danych nie można odczytać lub są nieprawidłowe", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Filtr statyczny {{filter}} znajdujący się w:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Wszystkie twoje ustawienia zostaną usunięte i uBlock₀ zostanie ponownie uruchomiony.\n\nCzy chcesz przywrócić ustawienia domyślne?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Dziennik zmian", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Błąd sieci: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Informacje", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Dodać następujący URL do twojej listy filtrów?\n\nTytuł: \"{{title}}\"\nAdres: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Pomoc", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"minutę temu", - "description":"English: a minute ago" + "aboutCode": { + "message": "Kod źródłowy (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} min. temu", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Współtwórcy", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"godzinę temu", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Utwórz kopię zapasową", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} godz. temu", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-kopia-zapasowa_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"wczoraj", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Przywróć z kopii…", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dni temu", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Przywróć ustawienia domyślne…", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Panel sterowania", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Wszystkie twoje ustawienia zostaną zastąpione ustawieniami z kopii stworzonej {{time}}. Po zakończeniu uBlock₀ zostanie uruchomiony ponownie.\n\nPrzywrócić ustawienia z kopii zapasowej?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Dziennik żądań", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Danych nie można odczytać lub są nieprawidłowe", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"wyłączony", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Wszystkie twoje ustawienia zostaną usunięte i uBlock₀ zostanie ponownie uruchomiony.\n\nCzy chcesz przywrócić ustawienia domyślne?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ zablokował wczytywanie strony", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Błąd sieci: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Powodem zablokowania jest filtr", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Dodać następujący URL do twojej listy filtrów?\n\nTytuł: \"{{title}}\"\nAdres: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"bez parametrów", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "minutę temu", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Filtr znajduje się na liście:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} min. temu", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Wstecz", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "godzinę temu", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Zamknij to okno", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} godz. temu", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Wyłącz skrupulatne blokowanie na {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "wczoraj", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Tymczasowo", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} dni temu", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Na stałe", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Panel sterowania", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Eksport do dysku w chmurze", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Dziennik żądań", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Import z dysku w chmurze", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "wyłączony", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importuj z chmury i połącz z aktualnymi ustawieniami", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ zablokował wczytywanie następującej strony:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Powodem zablokowania jest filtr", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Nazwa urządzenia:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "bez parametrów", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Uwaga! Te ustawienia zmieniasz na własne ryzyko.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Filtr znajduje się na liście:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Wyślij", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Wstecz", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Zastosuj zmiany", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Zamknij to okno", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Przywróć", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Wyłącz skrupulatne blokowanie na {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bajty", - "description":"" + "docblockedDisableTemporary": { + "message": "Tymczasowo", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Tymczasowo zezwalaj na wyświetlanie dużych elementów multimedialnych", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Na stałe", + "description": "English: Permanently" }, - "dummy":{ - "message":"Ten wpis musi być ostatni", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Eksport ustawień do chmury", + "description": "tooltip" + }, + "cloudPull": { + "message": "Import ustawień z chmury", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importuj z chmury i połącz z aktualnymi ustawieniami", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nazwa urządzenia:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Uwaga! Te ustawienia zmieniasz na własne ryzyko.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Wyślij", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Zastosuj zmiany", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Przywróć", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajty", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Tymczasowo zezwalaj na wyświetlanie dużych elementów multimedialnych", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Ten wpis musi być ostatni", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/pt_BR/messages.json b/src/_locales/pt_BR/messages.json index 5c7d041e3b401..1bb458ace4dce 100644 --- a/src/_locales/pt_BR/messages.json +++ b/src/_locales/pt_BR/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Finalmente, um bloqueador eficiente. Com baixo uso de memória e CPU.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Finalmente, um bloqueador eficiente. Com baixo uso de memória e CPU.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Painel de controle", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Painel de controle", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Configurações", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Configurações", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filtros de terceiros", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtros de terceiros", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Meus filtros", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Meus filtros", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Minhas regras", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Minhas regras", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista branca", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Lista branca", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Registro de Eventos", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Registro de Eventos", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Sobre", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Sobre", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Configurações avançadas", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Configurações avançadas", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Clique: desativa\/ativa o uBlock₀ para este site.\n\nCtrl+clique: desativa o uBlock₀ apenas nesta página.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Clique: desativa\/ativa o uBlock₀ para este site.\n\nCtrl+clique: desativa o uBlock₀ apenas nesta página.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"pedidos bloqueados", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Clique para desativar uBO neste site.\n\nCtrl+clique para desativar o uBO apenas nesta página.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"nesta página", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Clique para ativar o uBO neste site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} ou {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "solicitações bloqueadas", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"desde a instalação", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "nesta página", + "description": "English: on this page" }, - "popupOr":{ - "message":"ou", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} ou {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Clique para abrir o painel", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "desde a instalação", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Entrar no modo elemento zapper", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "ou", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Entrar no modo de seleção de elemento", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Abrir painel de controle", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Abrir registro de eventos", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Entrar no modo elemento zapper", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Alternar o bloqueio de todos popups para este site", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Entrar no modo de seleção de elemento", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Alternar o bloqueio de grandes elementos de mídia para este site", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Abrir registro de eventos", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Alternar a filtragem cosmética para este site", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Alternar o bloqueio de todos popups para este site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Alternar o bloqueio de fontes remotas para este site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Clique para bloquear todos os popups neste site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Regras globais: esta coluna é para as regras que se aplicam a todos os sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Clique para deixar de bloquear todos os popups neste site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Regras locais: esta coluna é para as regras que se aplicam somente ao site atual.\nRegras locais substituem regras globais.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Alternar o bloqueio de grandes elementos de mídia para este site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Clique para fazer suas mudanças permanentes.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Clique para bloquear grandes elementos de mídia neste site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Clique para reverter suas mudanças.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Clique para não bloquear grandes elementos de mídia neste site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"todos", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Alternar a filtragem cosmética para este site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"imagens", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Clique para desativar a filtragem cosmética neste site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"terceiros", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Clique para ativar a filtragem cosmética neste site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css de terceiros\/imagens", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Alternar o bloqueio de fontes remotas para este site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"scripts internos", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Clique para bloquear fontes remotas neste site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"scripts do domínio", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Clique para não bloquear as fontes remotas neste site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"scripts de terceiros", - "description":"" + "popupTipGlobalRules": { + "message": "Regras globais: esta coluna é para as regras que se aplicam a todos os sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"frames de terceiros", - "description":"" + "popupTipLocalRules": { + "message": "Regras locais: esta coluna é para as regras que se aplicam somente ao site atual.\nRegras locais substituem regras globais.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domínios conectados", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Clique para tornar suas alterações permanentes.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Clique para reverter suas alterações.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Criar", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "todos", + "description": "" }, - "pickerPick":{ - "message":"Selecionar", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "imagens", + "description": "" }, - "pickerQuit":{ - "message":"Sair", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "terceiros", + "description": "" }, - "pickerPreview":{ - "message":"Pré-visualizar", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css de terceiros\/imagens", + "description": "" }, - "pickerNetFilters":{ - "message":"Filtros de rede", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "scripts incorporados", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Filtros cosméticos", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "scripts do domínio", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Clique, Ctrl-clique", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "scripts de terceiros", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Bloquear elemento", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "frames de terceiros", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ocultar espaços ocupados por elementos bloqueados", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domínios conectados", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Mostrar o número de pedidos bloqueados no ícone", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Desabilitar dicas de ferramentas", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Criar", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Utilizar o menu de contexto onde apropriado", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Selecionar", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Modo daltonismo", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Sair", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ativar suporte de armazenamento na nuvem", - "description":"" + "pickerPreview": { + "message": "Pré-visualizar", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Eu sou um usuário avançado (leitura necessária<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Filtros de rede", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"configurações avançadas", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Filtros cosméticos", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Desativar pré-chamadas (para impedir qualquer conexão de pedidos de rede bloqueados)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Clique, Ctrl-clique", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Desativar auditoria em hyperlinks", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Bloquear elemento", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Impedir o protocolo WebRTC de vazar endereços de IP locais", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Ocultar espaços ocupados por elementos bloqueados", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Comportamento padrão", - "description":"" + "settingsIconBadgePrompt": { + "message": "Mostrar o número de solicitações bloqueadas no ícone", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Esses comportamentos padrões podem ser substituídos por site", - "description":"" + "settingsTooltipsPrompt": { + "message": "Desativar dicas de balão", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Desativar filtragem cosmética", - "description":"" + "settingsContextMenuPrompt": { + "message": "Utilizar o menu de contexto onde apropriado", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloquear elementos de mídia maiores que {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Modo daltonismo", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloquear fontes remotas", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Ativar suporte de armazenamento na nuvem", + "description": "" }, - "settingsStorageUsed":{ - "message":"Armazenamento utilizado: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Eu sou um usuário avançado (leitura necessária<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Última restauração:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "configurações avançadas", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Último backup:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Desativar pré-chamadas (para impedir qualquer conexão de solicitações de rede bloqueadas)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos de:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Desativar auditoria em hyperlinks", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} usado(s) de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Impedir o protocolo WebRTC de vazar endereços de IP locais", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Atualizar automaticamente as listas de filtros", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Comportamento padrão", + "description": "" }, - "3pUpdateNow":{ - "message":"Atualizar agora", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Esses comportamentos padrões podem ser substituídos por site", + "description": "" }, - "3pPurgeAll":{ - "message":"Limpar todos caches", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Desativar filtragem cosmética", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analisar e aplicar filtros cosméticos", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Bloquear elementos de mídia maiores que {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Ativando este recurso aumenta o consumo de memória do uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Bloquear fontes remotas", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorar filtros cosméticos genéricos", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Bloquear relatórios CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

É recomendado que ative esta opção em dispositivos menos poderosos.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Armazenamento utilizado: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listas de servidores bloqueados", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Última restauração:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Último backup:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Anúncios", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos de:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privacidade", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} usado(s) de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domínios de malware", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Atualizar automaticamente as listas de filtros", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pUpdateNow": { + "message": "Atualizar agora", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Multiuso", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Limpar todos caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regiões, idiomas", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analisar e aplicar filtros cosméticos", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Personalizado", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Ativando este recurso aumenta o consumo de memória do uBlock₀.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Uma URL por linha. As linhas prefixadas com ‘!’ serão ignoradas. URLs inválidas serão silenciosamente ignoradas.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorar filtros cosméticos genéricos", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Desatualizada.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

É recomendado que ative esta opção em dispositivos menos poderosos.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Última atualização: {{ago}}.\nClique para forçar uma atualização.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Listas de servidores bloqueados", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Atualizando...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Aplicar alterações", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Um erro de rede impediu a atualização desse recurso.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Anúncios", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Adicione um filtro por linha. Um filtro pode ser um simples nome de servidor ou um filtro compatível com o Adblock Plus. Linhas prefixadas com ‘!’ serão ignoradas.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privacidade", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importar e adicionar", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domínios de malware", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exportar", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Aborrecimentos", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"meus-filtros-estáticos-do-ublock_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Multiuso", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regiões, idiomas", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Regras permanentes", - "description":"header" + "3pGroupCustom": { + "message": "Personalizado", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Regras temporárias", - "description":"header" + "3pExternalListsHint": { + "message": "Uma URL por linha. As linhas prefixadas com ‘!’ serão ignoradas. URLs inválidas serão silenciosamente ignoradas.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Reverter", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Desatualizada.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Confirmar", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Última atualização: {{ago}}.\nClique para forçar uma atualização.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Editar", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Atualizando...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Salvar", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Um erro de rede impediu a atualização desse recurso.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Descartar", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Um filtro por linha. Um filtro pode ser um simples nome de servidor ou um filtro compatível com o Adblock Plus. Linhas prefixadas com ‘!’ serão ignoradas.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importar do arquivo...", - "description":"" + "1pImport": { + "message": "Importar e adicionar", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exportar para arquivo", - "description":"" + "1pExport": { + "message": "Exportar", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"minhas-regras-dinâmicas-do-ublock.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "meus-filtros-estáticos-do-ublock_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Lista de suas regras de filtragem dinâmica.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Aplicar alterações", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Regras de sintaxe: origem destino tipo ação<\/code> (documentação completa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Regras permanentes", + "description": "header" }, - "whitelistPrompt":{ - "message":"Sua lista branca de servidores para qual o uBlock Origin será desativado. Uma regra por linha. Servidores inválidos serão silenciosamente ignorados.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Regras temporárias", + "description": "header" }, - "whitelistImport":{ - "message":"Importar e adicionar", - "description":"English: Import and append" + "rulesRevert": { + "message": "Reverter", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exportar", - "description":"English: Export" + "rulesCommit": { + "message": "Confirmar", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"minha-listabranca-ublock_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Editar", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Salvar", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Descartar", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domínio", - "description":"English: Domain" + "rulesImport": { + "message": "Importar do arquivo...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Exportar para arquivo", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtro", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "minhas-regras-dinâmicas-do-ublock.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Tudo", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Lista de suas regras de filtragem dinâmica.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Por trás da cena", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Regras de sintaxe: origem destino tipo ação<\/code> (documentação completa<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtrar entradas de registro", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Sua lista branca de servidores para qual o uBlock Origin será desativado. Uma regra por linha. Servidores inválidos serão ignorados silenciosamente.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Número máximo de entradas de registro", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importar e adicionar", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Contexto:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exportar", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "minha-listabranca-ublock_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Filtragem de URL dinâmica", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Aplicar alterações", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Filtragem estática", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} pedidos de rede de {{type}} {{br}}que corresponde ao endereço de URL {{url}} {{br}}e que tem origem de {{origin}},{{br}}{{importance}} existir um filtro de exceção correspondente.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domínio", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloquear", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permitir", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtro", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Tudo", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"qualquer tipo", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Por trás da cena", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"de “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtrar entradas de registro", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"de qualquer lugar", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Número máximo de entradas de registro", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"exceto quando", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Contexto:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"mesmo se", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtro estático {{filter}} encontrado em:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Filtragem dinâmica de URL", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Registro de alterações", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Filtragem estática", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Documentação", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} solicitações de rede de {{type}} {{br}}que corresponde ao endereço de URL {{url}} {{br}}e que tem origem de {{origin}},{{br}}{{importance}} existir um filtro de exceção correspondente.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Suporte", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloquear", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Código-fonte (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Permitir", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Contribuidores", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tipo “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Backup para arquivo", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "qualquer tipo", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"meu-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "de “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Restaurar do arquivo...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "de qualquer lugar", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Restaurar configurações padrão...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "exceto quando", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Todas as suas configurações serão substituídas pelos dados do backup salvo em {{time}}, e o uBlock₀ será reiniciado. \n\nDeseja substituir todas as configurações existentes usando os dados do backup?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "mesmo se", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Os dados não podem ser lidos ou são inválidos", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Filtro estático {{filter}} encontrado em:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Todas as suas configurações serão apagadas, e o uBlock₀ será reiniciado. \n\nDeseja restaurar as configurações originais do uBlock₀?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Registro de alterações", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Erro na rede: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Documentação", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Adicionar a seguinte URL na sua lista de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Suporte", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"um minuto atrás", - "description":"English: a minute ago" + "aboutCode": { + "message": "Código-fonte (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minutos atrás", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Contribuidores", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"uma hora atrás", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Backup para arquivo", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} horas atrás", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "meu-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"um dia atrás", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Restaurar do arquivo...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dias atrás", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Restaurar configurações padrão...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Mostrar Painel de Controle", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Todas as suas configurações serão substituídas pelos dados do backup salvo em {{time}}, e o uBlock₀ será reiniciado. \n\nDeseja substituir todas as configurações existentes usando os dados do backup?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Mostrar Registro de Eventos", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Os dados não podem ser lidos ou são inválidos", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"desativado", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Todas as suas configurações serão apagadas, e o uBlock₀ será reiniciado. \n\nDeseja restaurar as configurações originais do uBlock₀?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin impediu a seguinte página de ser carregada:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Erro na rede: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Por causa do seguinte filtro", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Adicionar a seguinte URL na sua lista de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"sem parâmetros", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "um minuto atrás", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Encontrado em:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minutos atrás", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Voltar", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "uma hora atrás", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Fechar esta janela", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} horas atrás", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Desativar o bloqueio estrito para {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "um dia atrás", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporariamente", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} dias atrás", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanentemente", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Mostrar Painel de Controle", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exportar para armazenamento na nuvem", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Mostrar Registro de Eventos", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importação do armazenamento na nuvem", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "desativado", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importar do armazenamento em nuvem e fundir com as configurações atuais", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin impediu a seguinte página de ser carregada:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Por causa do seguinte filtro", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Nome deste dispositivo:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "sem parâmetros", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Atenção! Altere essas configurações avançadas por sua própria conta e risco.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Encontrado em:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Enviar", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Voltar", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Aplicar alterações", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Fechar esta janela", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Reverter", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Desativar o bloqueio estrito para {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporariamente", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permitir temporariamente grandes elementos de mídia", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanentemente", + "description": "English: Permanently" }, - "dummy":{ - "message":"Esta entrada deve ser a última", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exportar para o armazenamento na nuvem", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importar do armazenamento na nuvem", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importar do armazenamento na nuvem e combinar com as configurações atuais", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nome deste dispositivo:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Atenção! Altere essas configurações avançadas por sua própria conta e risco.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Enviar", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplicar alterações", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Reverter", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permitir temporariamente grandes elementos de mídia", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Esta entrada deve ser a última", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/pt_PT/messages.json b/src/_locales/pt_PT/messages.json index 48bb006a56d0b..e726a731308a6 100644 --- a/src/_locales/pt_PT/messages.json +++ b/src/_locales/pt_PT/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Finalmente, um bloqueador eficiente. Leve na CPU e memória.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Finalmente, um bloqueador eficiente. Leve na CPU e memória.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Painel de controlo", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Painel de controlo", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Definições", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Definições", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filtros de terceiros", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtros de terceiros", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Meus filtros", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Meus filtros", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Minhas regras", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Minhas regras", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista branca", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Lista branca", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Registador", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Registador", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Acerca", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Acerca", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Definições avançadas", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Definições avançadas", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Clique: desativar\/ativar o uBlock₀ para este site.\n\nCtrl+clique: desativar o uBlock₀ apenas nesta página.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Clique: desativar\/ativar o uBlock₀ para este site.\n\nCtrl+clique: desativar o uBlock₀ apenas nesta página.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"pedidos bloqueados", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Clique para desativar o uBlock₀ para este site.\n\nCtrl+clique para desativar o uBlock₀ apenas nesta página.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"nesta página", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Clique para ativar o uBlock₀ para este site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} ou {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "pedidos bloqueados", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"desde a instalação", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "nesta página", + "description": "English: on this page" }, - "popupOr":{ - "message":"ou", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} ou {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Abrir o painel de controlo", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "desde a instalação", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Entrar no modo \"zapper\" de elemento", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "ou", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Entrar no modo de seleção de elemento", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Abrir o painel de controlo", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Abrir o registador", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Entrar no modo \"zapper\" de elemento", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Alternar o bloqueio de todos os popups para este site", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Entrar no modo de seleção de elemento", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Alternar o bloqueio de elementos multimédia grandes para este site", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Abrir o registador", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Alternar a filtragem cosmética para este site", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Alternar o bloqueio de todos os popups para este site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Alternar o bloqueio de tipos de letra remotos para este site", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Clique para bloquear todos os popups neste site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Regras globais: esta coluna é para as regras que se aplicam a todos os sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Clique para deixar de bloquear todos os popups neste site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Regras locais: esta coluna é para as regras que se aplicam apenas a este site.\nAs regras locais sobrepõem-se às regras globais.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Alternar o bloqueio de elementos multimédia grandes para este site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Clique para tornar as suas alterações permanentes.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Clique para bloquear elementos multimédia grandes neste site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Clique para reverter as suas alterações.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Clique para deixar de bloquear elementos multimédia grandes neste site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"tudo", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Alternar a filtragem cosmética para este site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"imagens", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Clique para desativar a filtragem cosmética neste site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"terceiros", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Clique para ativar a filtragem cosmética neste site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/imagens de terceiros", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Alternar o bloqueio de tipos de letra remotos para este site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"scripts em linha", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Clique para bloquear os tipos de letra remotos neste site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"scripts de primeiros", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Clique para deixar de bloquear os tipos de letra remotos neste site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"scripts de terceiros", - "description":"" + "popupTipGlobalRules": { + "message": "Regras globais: esta coluna é para as regras que se aplicam a todos os sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"frames de terceiros", - "description":"" + "popupTipLocalRules": { + "message": "Regras locais: esta coluna é para as regras que se aplicam apenas a este site.\nAs regras locais sobrepõem-se às regras globais.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domínios ligados", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Clique para tornar as suas alterações permanentes.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} de {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Clique para reverter as suas alterações.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Criar", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "tudo", + "description": "" }, - "pickerPick":{ - "message":"Selecionar", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "imagens", + "description": "" }, - "pickerQuit":{ - "message":"Sair", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "terceiros", + "description": "" }, - "pickerPreview":{ - "message":"Pré-visualizar", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css\/imagens de terceiros", + "description": "" }, - "pickerNetFilters":{ - "message":"Filtros de rede", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "scripts em linha", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Filtros cosméticos", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "scripts de primeiros", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Clique, Ctrl-clique", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "scripts de terceiros", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Bloquear elemento", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "frames de terceiros", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ocultar espaços ocupados por elementos bloqueados", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domínios ligados", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Mostrar o número de pedidos bloqueados no ícone", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} de {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Desativar dicas", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Criar", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Fazer uso do menu de contexto onde apropriado", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Selecionar", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Cores amigáveis para daltónicos", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Sair", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Ativar suporte à nuvem", - "description":"" + "pickerPreview": { + "message": "Pré-visualizar", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Sou um utilizador avançado (leitura necessária<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Filtros de rede", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"definições avançadas", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Filtros cosméticos", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Desativar \"pre-fetching\" (para impedir qualquer ligação para pedidos de rede bloqueados)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Clique, Ctrl-clique", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Desativar auditoria de hiperligações", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Bloquear elemento", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Impedir que o WebRTC divulgue endereços de IP locais", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Ocultar espaços ocupados por elementos bloqueados", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Comportamento predefinido", - "description":"" + "settingsIconBadgePrompt": { + "message": "Mostrar o número de pedidos bloqueados no ícone", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Estes comportamentos predefinidos podem ser substituídos numa base por site", - "description":"" + "settingsTooltipsPrompt": { + "message": "Desativar dicas", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Desativar filtragem cosmética", - "description":"" + "settingsContextMenuPrompt": { + "message": "Fazer uso do menu de contexto onde apropriado", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Bloquear elementos multimédia maiores do que {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Cores amigáveis para daltónicos", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bloquear tipos de letra remotos", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Ativar suporte à nuvem", + "description": "" }, - "settingsStorageUsed":{ - "message":"Armazenamento utilizado: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Sou um utilizador avançado (leitura necessária<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Último restauro:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "definições avançadas", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Último backup:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Desativar pré-obtenção (para impedir qualquer ligação para pedidos de rede bloqueados)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos a partir de:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Desativar auditoria de hiperligações", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} utilizados de {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Impedir que o WebRTC divulgue endereços de IP locais", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Atualizar automaticamente as listas dos filtros.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Comportamento predefinido", + "description": "" }, - "3pUpdateNow":{ - "message":"Atualizar agora", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Estes comportamentos predefinidos podem ser substituídos numa base por site", + "description": "" }, - "3pPurgeAll":{ - "message":"Limpar todas as caches", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Desativar filtragem cosmética", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analisar e aplicar filtros cosméticos.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Bloquear elementos multimédia maiores do que {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Ativar esta funcionalidade aumenta o consumo de memória do uBlock₀<\/i>.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Bloquear tipos de letra remotos", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorar filtros cosméticos genéricos.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Bloquear relatórios CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

É recomendado que ative esta opção em dispositivos menos poderosos.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Armazenamento utilizado: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listas de servidores bloqueados", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Último restauro:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Último backup:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Anúncios", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtros de rede + {{cosmeticFilterCount}} filtros cosméticos a partir de:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privacidade", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} utilizados de {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domínios maliciosos", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Atualizar automaticamente as listas dos filtros.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pUpdateNow": { + "message": "Atualizar agora", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Multi-uso", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Limpar todas as caches", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regiões, idiomas", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analisar e aplicar filtros cosméticos.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Personalizado", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Ativar esta funcionalidade aumenta o consumo de memória do uBlock₀<\/i>.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Um endereço por linha. Linhas começadas com ‘!’ serão ignoradas. Endereços inválidos serão ignorados silenciosamente.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorar filtros cosméticos genéricos.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Desatualizada.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

É recomendado que ative esta opção em dispositivos menos poderosos.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Última atualização: {{ago}}.\nClique para forçar uma atualização.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Listas de servidores bloqueados", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"A atualizar...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Aplicar alterações", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Um erro de rede impediu que o recurso fosse atualizado.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Anúncios", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Um filtro por linha. Um filtro pode ser um simples nome de servidor, ou um filtro compatível com o Adblock Plus. Linhas começadas por ‘!’ serão ignoradas.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privacidade", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importar e anexar", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domínios maliciosos", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exportar", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Incómodos", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Multi-uso", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regiões, idiomas", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Regras permanentes", - "description":"header" + "3pGroupCustom": { + "message": "Personalizado", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Regras temporárias", - "description":"header" + "3pExternalListsHint": { + "message": "Um endereço por linha. Linhas começadas com ‘!’ serão ignoradas. Endereços inválidos serão ignorados silenciosamente.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Reverter", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Desatualizada.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Aplicar", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Última atualização: {{ago}}.\nClique para forçar uma atualização.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Editar", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "A atualizar...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Guardar", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Um erro de rede impediu que o recurso fosse atualizado.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Descartar", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Um filtro por linha. Um filtro pode ser um simples nome de servidor, ou um filtro compatível com o Adblock Plus. Linhas começadas por ‘!’ serão ignoradas.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importar do ficheiro...", - "description":"" + "1pImport": { + "message": "Importar e anexar", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exportar para ficheiro", - "description":"" + "1pExport": { + "message": "Exportar", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-custom-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Lista das suas regras de filtragem dinâmica.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Aplicar alterações", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Regra de sintaxe: origem destino tipo ação<\/code> (documentação completa<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Regras permanentes", + "description": "header" }, - "whitelistPrompt":{ - "message":"Lista pessoal de servidores para os quais o uBlock Origin será desativado. Uma entrada por linha. Servidores inválidos serão ignorados silenciosamente.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Regras temporárias", + "description": "header" }, - "whitelistImport":{ - "message":"Importar e anexar", - "description":"English: Import and append" + "rulesRevert": { + "message": "Reverter", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exportar", - "description":"English: Export" + "rulesCommit": { + "message": "Aplicar", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Editar", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Aplicar alterações", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Guardar", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tipo", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Descartar", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domínio", - "description":"English: Domain" + "rulesImport": { + "message": "Importar do ficheiro...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"Endereço", - "description":"English: URL" + "rulesExport": { + "message": "Exportar para ficheiro", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtro", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Todos", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Lista das suas regras de filtragem dinâmica.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Bastidores", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Regra de sintaxe: origem destino tipo ação<\/code> (documentação completa<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtrar entradas de registo", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Lista pessoal de servidores para os quais o uBlock Origin será desativado. Uma entrada por linha. Servidores inválidos serão ignorados silenciosamente.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Número máximo de entradas de registo", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importar e anexar", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Contexto:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exportar", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tipo:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Filtragem dinâmica de URL", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Aplicar alterações", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Filtragem estática", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tipo", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} pedidos de rede de {{type}} {{br}}cujo endereço URL corresponde a {{url}} {{br}}e que origina {{origin}},{{br}}{{importance}} há um filtro de exceção correspondente.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domínio", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bloquear", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "Endereço", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permitir", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtro", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tipo \"{{type}}\"", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Todos", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"qualquer tipo", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Bastidores", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"de \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtrar entradas de registo", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"de qualquer lugar", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Número máximo de entradas de registo", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"exceto quando", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Contexto:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"mesmo se", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tipo:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtro estático {{filter}} encontrado em:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Filtragem dinâmica de URL", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Registo de alterações", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Filtragem estática", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} pedidos de rede de {{type}} {{br}}cujo endereço URL corresponde a {{url}} {{br}}e que origina {{origin}},{{br}}{{importance}} há um filtro de exceção correspondente.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Suporte", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Bloquear", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Código fonte (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Permitir", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Contribuidores", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tipo \"{{type}}\"", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Cópia para ficheiro", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "qualquer tipo", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "de \"{{origin}}\"", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Restaurar a partir de um ficheiro...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "de qualquer lugar", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Restaurar predefinições...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "exceto quando", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Todas as suas definições serão substituídas utilizando os dados da cópia de segurança de {{time}}, e o uBlock₀ irá reiniciar.\n\nSubstituir todas as definições existentes utilizando os dados da cópia de segurança?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "mesmo se", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Os dados não puderam ser lidos ou são inválidos", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Filtro estático {{filter}} encontrado em:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Todas as suas definições serão removidas e o uBlock₀ será reiniciado.\n\nRestaurar predefinições do uBlock₀?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Registo de alterações", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Erro de rede: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Adicionar o seguinte URL à sua lista de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Suporte", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"há um minuto", - "description":"English: a minute ago" + "aboutCode": { + "message": "Código fonte (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"há {{value}} minutos", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Contribuidores", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"há uma hora", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Cópia para ficheiro", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"há {{value}} horas", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"há um dia", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Restaurar a partir de um ficheiro...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"há {{value}} dias", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Restaurar predefinições...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Mostrar painel de controlo", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Todas as suas definições serão substituídas utilizando os dados da cópia de segurança de {{time}}, e o uBlock₀ irá reiniciar.\n\nSubstituir todas as definições existentes utilizando os dados da cópia de segurança?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Mostrar registador", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Os dados não puderam ser lidos ou são inválidos", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"desativado", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Todas as suas definições serão removidas e o uBlock₀ será reiniciado.\n\nRestaurar predefinições do uBlock₀?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"O uBlock Origin impediu que a seguinte página fosse carregada:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Erro de rede: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Por causa do seguinte filtro", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Adicionar o seguinte URL à sua lista de filtros personalizados?\n\nTítulo: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"sem parâmetros", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "há um minuto", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Encontrado em:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "há {{value}} minutos", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Retroceder", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "há uma hora", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Fechar esta janela", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "há {{value}} horas", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Desativar bloqueio estrito para {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "há um dia", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporariamente", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "há {{value}} dias", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanentemente", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Mostrar painel de controlo", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exportar para a nuvem", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Mostrar registador", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importar a partir da nuvem", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "desativado", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importar a partir da nuvem e juntar às definições atuais", - "description":"tooltip" + "docblockedPrompt1": { + "message": "O uBlock Origin impediu que a seguinte página fosse carregada:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Por causa do seguinte filtro", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Nome deste dispositivo:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "sem parâmetros", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Atenção! Altere estas definições avançadas por sua conta e risco.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Encontrado em:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Submeter", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Retroceder", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Aplicar alterações", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Fechar esta janela", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Reverter", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Desativar bloqueio estrito para {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bytes", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporariamente", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permitir temporariamente elementos multimédia grandes", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanentemente", + "description": "English: Permanently" }, - "dummy":{ - "message":"Esta entrada deve ser a última", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exportar para a nuvem", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importar a partir da nuvem", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importar a partir da nuvem e juntar às definições atuais", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Nome deste dispositivo:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Atenção! Altere estas definições avançadas por sua conta e risco.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Submeter", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplicar alterações", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Reverter", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bytes", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permitir temporariamente elementos multimédia grandes", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Esta entrada deve ser a última", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/ro/messages.json b/src/_locales/ro/messages.json index 04c8e45fc5d79..ac9d254cece5a 100644 --- a/src/_locales/ro/messages.json +++ b/src/_locales/ro/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"În sfârșit, un blocant eficient. Are un impact mic asupra procesorului și memoriei.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "În sfârșit, un blocant eficient. Are un impact mic asupra procesorului și memoriei.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Panou de control", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Panou de control", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Opțiuni", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Opțiuni", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filtre terțe", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtre terțe", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Filtrele mele", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Filtrele mele", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Regulile mele", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Regulile mele", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista de excluderi", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Lista de excluderi", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Jurnal", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Jurnal", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Despre", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Despre", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Setări avansate", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Setări avansate", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Clic: dezactivează\/activează uBlock₀ pentru acest sait.\n\nCtrl+clic: dezactivează uBlock₀ doar pe această pagină.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Clic: dezactivează\/activează uBlock₀ pentru acest sait.\n\nCtrl+clic: dezactivează uBlock₀ doar pe această pagină.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"cereri blocate", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Dați clic pentru a dezactiva uBlock₀ pentru acest sait.\n\nDați Ctrl+clic pentru a dezactiva uBlock₀ doar pe această pagină.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"pe această pagină", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Dați clic pentru a activa uBlock₀ pentru acest sait.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} sau {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "cereri blocate", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"de la instalare", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "pe această pagină", + "description": "English: on this page" }, - "popupOr":{ - "message":"sau", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} sau {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Clic pentru a deschide tabloul de bord", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "de la instalare", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Accesați modul de eliminare elemente", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "sau", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Modul alege element", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Deschide panoul de control", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Deschide jurnalul", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Accesați modul de eliminare elemente", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Comută blocarea tuturor popup-urilor pentru acest sait", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Modul alege element", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Modifică modul de blocare a elementelor media de mari dimensiuni pentru acest sait", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Deschide jurnalul", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Comută filtrarea vizuală pentru acest sait", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Comută blocarea tuturor popup-urilor pentru acest sait", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Comută blocarea fonturilor externe pentru acest sait", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Dați clic pentru a bloca popup-urile pentru acest site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Reguli globale: această coloană este pentru regulile care se aplică tuturor site-urilor.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Dați clic pentru a nu mai bloca popup-urile pentru acest site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Reguli locale: această coloană este pentru regulile care se aplică doar site-ului curent.\nRegulile locale suprascriu pe cele globale.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Modifică modul de blocare a elementelor media de mari dimensiuni pentru acest sait", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Apasă pentru a face modificările permanente.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Dați clic pentru a bloca elementele media de mari dimensiuni pentru acest sait", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Apasă pentru a renunța la modificări.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Dați clic pentru a nu mai bloca elementele media de mari dimensiuni pentru acest sait", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"tot", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Comută filtrarea vizuală pentru acest sait", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"imagini", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Dați clic pentru a dezactiva filtrele vizuale pentru acest sait", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"terțe", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Dați clic pentru a activa filtrele vizuale pentru acest sait", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/imagini terțe", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Comută blocarea fonturilor externe pentru acest sait", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"scripturi înglobate", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Dați clic pentru a bloca fonturile externe pentru acest site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"scripturi din saitul primar", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Dați clic pentru a nu mai bloca fonturile externe pentru acest sait", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"scripturi din saituri terțe", - "description":"" + "popupTipGlobalRules": { + "message": "Reguli globale: această coloană este pentru regulile care se aplică tuturor site-urilor.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"cadre din saituri terțe", - "description":"" + "popupTipLocalRules": { + "message": "Reguli locale: această coloană este pentru regulile care se aplică doar site-ului curent.\nRegulile locale suprascriu pe cele globale.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"domenii conectate", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Apasă pentru a face modificările permanente.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} din {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Apasă pentru a renunța la modificări.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Creează", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "tot", + "description": "" }, - "pickerPick":{ - "message":"Alege", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "imagini", + "description": "" }, - "pickerQuit":{ - "message":"Ieșire", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "terțe", + "description": "" }, - "pickerPreview":{ - "message":"Previzualizare", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css\/imagini terțe", + "description": "" }, - "pickerNetFilters":{ - "message":"Filtre de rețea", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "scripturi înglobate", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Filtre vizuale", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "scripturi din saitul primar", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Clic, Ctrl-clic", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "scripturi din saituri terțe", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blochează elementul", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "cadre din saituri terțe", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ascunde substituenții elementelor blocate", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "domenii conectate", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Arată numărul cererilor blocate pe pictogramă", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} din {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Dezactivează indiciile", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Creează", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Folosește meniul contextual unde este cazul", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Alege", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Accesibil pentru daltonism", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Ieșire", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Activează suportul pentru stocare în cloud", - "description":"" + "pickerPreview": { + "message": "Previzualizare", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Sunt un utilizator avansat (Lectură obligatorie<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Filtre de rețea", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"setări avansate", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Filtre vizuale", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Dezactivează preluarea în avans (pentru a preveni orice conexiune ce s-ar încadra în cereri de rețea blocate)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Clic, Ctrl-clic", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Dezactivează auditarea hiperlinkurilor", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blochează elementul", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Previne dezvăluirea adreselor IP locale prin intermediul protocolului WebRTC", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Ascunde substituenții elementelor blocate", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Comportament implicit", - "description":"" + "settingsIconBadgePrompt": { + "message": "Arată numărul cererilor blocate pe pictogramă", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Aceste comportamente implicite pot fi suprascrise pentru fiecare sait în parte", - "description":"" + "settingsTooltipsPrompt": { + "message": "Dezactivează indiciile", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Dezactivează filtrele cosmetice", - "description":"" + "settingsContextMenuPrompt": { + "message": "Folosește meniul contextual unde este cazul", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blochează elementele media mai mari de {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Accesibil pentru daltonism", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blochează fonturile de la distanță", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Activează suportul pentru stocare în cloud", + "description": "" }, - "settingsStorageUsed":{ - "message":"Spațiu de stocare utilizat: {{value}} octeți", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Sunt un utilizator avansat (Lectură obligatorie<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Ultima restaurare:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "setări avansate", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Ultima copie de siguranță:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Dezactivează preluarea în avans (pentru a preveni orice conexiune ce s-ar încadra în cereri de rețea blocate)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtre rețea + {{cosmeticFilterCount}} filtre vizuale din:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Dezactivează auditarea hiperlinkurilor", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} folosite din {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Previne dezvăluirea adreselor IP locale prin intermediul protocolului WebRTC", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Actualizare automată a listelor de filtre.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Comportament implicit", + "description": "" }, - "3pUpdateNow":{ - "message":"Actualizează acum", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Aceste comportamente implicite pot fi suprascrise pentru fiecare sait în parte", + "description": "" }, - "3pPurgeAll":{ - "message":"Golește tot din memoria tampon", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Dezactivează filtrele cosmetice", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Citește și aplică filtrele vizuale.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blochează elementele media mai mari de {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Activând această opțiune memoria utilizată de uBlock₀ va crește.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blochează fonturile de la distanță", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignoră filtrele cosmetice generice", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Blochează rapoartele CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Se recomandă activarea acestei opțiuni pe dispozitivele mai puțin performante.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Spațiu de stocare utilizat: {{value}} octeți", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista adreselor blocate", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Ultima restaurare:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Aplică modificările", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Ultima copie de siguranță:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reclame", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtre rețea + {{cosmeticFilterCount}} filtre vizuale din:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Intimitate", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} folosite din {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domenii malițioase", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Actualizare automată a listelor de filtre.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Social", - "description":"English: Social" + "3pUpdateNow": { + "message": "Actualizează acum", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Multifuncționale", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Golește tot din memoria tampon", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regiuni, limbi", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Citește și aplică filtrele vizuale.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Personalizare", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Activând această opțiune memoria utilizată de uBlock₀ va crește.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"O adresă pe linie. Liniile care încep cu ‘!’ vor fi ignorate. Adresele nevalide vor fi ignorate fără avertizare.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignoră filtrele cosmetice generice", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"învechit", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Se recomandă activarea acestei opțiuni pe dispozitivele mai puțin performante.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Ultima actualizare: {{ago}}.\nClic pentru a forța o actualizare.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lista adreselor blocate", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"În curs de actualizare...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Aplică modificările", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"O eroare de rețea a împiedicat actualizarea resursei.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reclame", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Un filtru pe linie. Un filtru poate fi un simplu nume de gazdă sau un filtru compatibil Adblock Plus. Liniile precedate de ‘!’ vor fi ignorate.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Intimitate", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importă și adaugă", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domenii malițioase", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exportă", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Neplăceri", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"filtrele-mele-statice-ublock_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Multifuncționale", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Aplică modificările", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regiuni, limbi", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Reguli permanente", - "description":"header" + "3pGroupCustom": { + "message": "Personalizare", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Reguli temporare", - "description":"header" + "3pExternalListsHint": { + "message": "O adresă pe linie. Liniile care încep cu ‘!’ vor fi ignorate. Adresele nevalide vor fi ignorate fără avertizare.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Înlătură", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "învechit", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Aplică", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Ultima actualizare: {{ago}}.\nClic pentru a forța o actualizare.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Modifică", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "În curs de actualizare...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Salvează", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "O eroare de rețea a împiedicat actualizarea resursei.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Elimină", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Un filtru pe linie. Un filtru poate fi un simplu nume de gazdă sau un filtru compatibil Adblock Plus. Liniile precedate de ‘!’ vor fi ignorate.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importă din fișier...", - "description":"" + "1pImport": { + "message": "Importă și adaugă", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exportă în fișier...", - "description":"" + "1pExport": { + "message": "Exportă", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"regulile-mele-dinamice-ublock_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "filtrele-mele-statice-ublock_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Lista regulilor tale de filtrare dinamică.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Aplică modificările", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Sintaxa pentru regulă: sursă destinație tip acțiune<\/code> (documentație<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Reguli permanente", + "description": "header" }, - "whitelistPrompt":{ - "message":"Lista ta de nume de gazde unde uBlock va fi dezactivat. Fiecare adresă pe o singură linie. Adresele nevalide vor fi ignorate automat.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Reguli temporare", + "description": "header" }, - "whitelistImport":{ - "message":"Importă și adaugă", - "description":"English: Import and append" + "rulesRevert": { + "message": "Înlătură", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exportă", - "description":"English: Export" + "rulesCommit": { + "message": "Aplică", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"lista-mea-de-excluderi-ublock_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Modifică", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Aplică modificările", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Salvează", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tip", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Elimină", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domeniu", - "description":"English: Domain" + "rulesImport": { + "message": "Importă din fișier...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Exportă în fișier...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtru", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "regulile-mele-dinamice-ublock_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Tot", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Lista regulilor tale de filtrare dinamică.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"În spatele scenei", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Sintaxa pentru regulă: sursă destinație tip acțiune<\/code> (documentație<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtrează intrările din jurnal", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Lista ta de nume de gazde unde uBlock va fi dezactivat. Fiecare adresă pe o singură linie. Adresele nevalide vor fi ignorate automat.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Numărul maxim de intrări în jurnal", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importă și adaugă", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Context:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exportă", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tip:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "lista-mea-de-excluderi-ublock_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Filtrare dinamică a URL-urilor", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Aplică modificările", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrare statică", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tip", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} cererile de rețea de {{type}} {{br}}când adresa URL corespunde cu {{url}} {{br}}și care își au originea {{origin}},{{br}}{{importance}} există un filtru corespondent de excepție.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domeniu", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blochează", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Permite", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtru", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"tip “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Tot", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"orice tip", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "În spatele scenei", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"de la “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtrează intrările din jurnal", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"de oriunde", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Numărul maxim de intrări în jurnal", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"exceptând când", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Context:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"chiar dacă", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tip:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtru static {{filter}} găsit în:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Filtrare dinamică a URL-urilor", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Jurnalul de modificări", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Filtrare statică", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} cererile de rețea de {{type}} {{br}}când adresa URL corespunde cu {{url}} {{br}}și care își au originea {{origin}},{{br}}{{importance}} există un filtru corespondent de excepție.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Suport", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blochează", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Cod sursă (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Permite", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Contribuitori", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "tip “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Copie de siguranță în fișier", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "orice tip", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"salvarea-mea-ublock_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "de la “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Restaurează din fișier...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "de oriunde", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Restaurează la configurarea implicită...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "exceptând când", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Toate opțiunile vor fi suprascrise cu datele din {{time}} și uBlock₀ va fi repornit.\n\nDorești să suprascrii toate opțiunile folosind datele salvate?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "chiar dacă", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Datele nu au putut fi citite sau sunt nevalide", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Filtru static {{filter}} găsit în:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Toate configurările tale vor fi eliminate și uBlock₀ va reporni.\n\nRestaurează uBlock₀ la configurările din fabrică?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Jurnalul de modificări", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Eroare de rețea: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Adaug următorul URL în lista ta de filtre personalizate?\n\nTitlu: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Suport", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"acum un minut", - "description":"English: a minute ago" + "aboutCode": { + "message": "Cod sursă (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"acum {{value}} minute", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Contribuitori", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"acum o oră", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Copie de siguranță în fișier", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"acum {{value}} ore", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "salvarea-mea-ublock_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"în urmă cu o zi", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Restaurează din fișier...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"în urmă cu {{value}} zile", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Restaurează la configurarea implicită...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Deschide panoul de control", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Toate opțiunile vor fi suprascrise cu datele din {{time}} și uBlock₀ va fi repornit.\n\nDorești să suprascrii toate opțiunile folosind datele salvate?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Arată jurnalul", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Datele nu au putut fi citite sau sunt nevalide", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"dezactivat", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Toate configurările tale vor fi eliminate și uBlock₀ va reporni.\n\nRestaurează uBlock₀ la configurările din fabrică?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin a prevenit încărcarea acestei pagini:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Eroare de rețea: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Din cauza următorului filtru", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Adaug următorul URL în lista ta de filtre personalizate?\n\nTitlu: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"fără parametri", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "acum un minut", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Găsit în:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "acum {{value}} minute", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Înapoi", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "acum o oră", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Închide această fereastră", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "acum {{value}} ore", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Dezactivează blocarea strictă pentru {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "în urmă cu o zi", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporar", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "în urmă cu {{value}} zile", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Deschide panoul de control", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exportă către stocarea în cloud", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Arată jurnalul", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importă din stocarea în cloud", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "dezactivat", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importă din stocarea în cloud și combină cu setările curente", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin a prevenit încărcarea acestei pagini:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Din cauza următorului filtru", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Numele acestui dispozitiv:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "fără parametri", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Atenție: schimbă aceste setări avansate pe propriul risc.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Găsit în:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Trimite", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Înapoi", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Aplică modificările", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Închide această fereastră", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Înlătură", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Dezactivează blocarea strictă pentru {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"octeți", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporar", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Permite temporar elementele media mari", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanent", + "description": "English: Permanently" }, - "dummy":{ - "message":"Aceasta intrare trebuie sa fie ultima", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exportă către stocarea în cloud", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importă din stocarea în cloud", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importă din stocarea în cloud și combină cu setările curente", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Numele acestui dispozitiv:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Atenție: schimbă aceste setări avansate pe propriul risc.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Trimite", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Aplică modificările", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Înlătură", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "octeți", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Permite temporar elementele media mari", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Aceasta intrare trebuie sa fie ultima", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/ru/messages.json b/src/_locales/ru/messages.json index a36c1cec5f8a2..a13072c283fd5 100644 --- a/src/_locales/ru/messages.json +++ b/src/_locales/ru/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Наконец-то, быстрый и эффективный блокировщик для браузеров.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Наконец-то, быстрый и эффективный блокировщик для браузеров.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Панель управления", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Панель управления", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Настройки", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Настройки", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Сторонние фильтры", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Сторонние фильтры", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Мои фильтры", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Мои фильтры", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Мои правила", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Мои правила", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Белый список", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Белый список", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Журнал сетевых запросов", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Журнал сетевых запросов", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"О расширении", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "О расширении", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Расширенные настройки", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Расширенные настройки", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"ЛКМ: отключить\/включить uBlock₀ для этого сайта.\n\nCtrl+ЛКМ: отключить uBlock₀ только на этой странице.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "ЛКМ: отключить\/включить uBlock₀ для этого сайта.\n\nCtrl+ЛКМ: отключить uBlock₀ только на этой странице.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"запросов заблокировано", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Кликните, чтобы отключить uBlock₀ для этого сайта.\nCtrl+клик, чтобы отключить uBlock₀ только на этой странице.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"на этой странице", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Кликните, чтобы активировать uBlock₀ для этого сайта.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} или {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "запросов заблокировано", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"с момента установки", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "на этой странице", + "description": "English: on this page" }, - "popupOr":{ - "message":"или", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} или {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Открыть панель управления", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "с момента установки", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Войти в режим затирания элементов", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "или", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Войти в режим выбора элемента", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Открыть панель управления", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Открыть журнал сетевых запросов", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Войти в режим затирания элементов", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Вкл\/Выкл блокировку всех всплывающих окон на этом сайте", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Войти в режим выбора элементов", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Вкл\/Выкл блокировку больших медиа-элементов на этом сайте", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Открыть журнал сетевых запросов", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Вкл\/Выкл косметические фильтры на этом сайте", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Вкл\/Выкл блокировку всех всплывающих окон на этом сайте", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Вкл\/Выкл блокировку сторонних шрифтов на этом сайте", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Кликните для блокировки всех всплывающих окон на этом сайте", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Глобальные правила: эта колонка предназначена для правил, применяемых ко всем сайтам.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Кликните для отключения блокировки всех всплывающих окон на этом сайте", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Локальные правила: эта колонка предназначена для правил, применяемых только к текущему сайту.\nЛокальные правила замещают глобальные.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Вкл\/Выкл блокировку больших медиа-элементов на этом сайте", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Нажмите, чтобы сохранить изменения.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Кликните для включения блокировки больших элементов мультимедиа на этом сайте", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Нажмите, чтобы отменить изменения.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Кликните для отключения блокировки больших элементов мультимедиа на этом сайте", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"все", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Вкл\/Выкл косметические фильтры на этом сайте", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"изображения", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Кликните для отключения косметических фильтров на этом сайте", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"сторонние ресурсы", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Кликните для включения косметических фильтров на этом сайте", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"сторонние css\/изображения", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Вкл\/Выкл блокировку сторонних шрифтов на этом сайте", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"inline-скрипты", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Кликните для включения блокировки удаленных шрифтов на этом сайте", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"собственные скрипты", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Кликните для отключения блокировки удаленных шрифтов на этом сайте", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"сторонние скрипты", - "description":"" + "popupTipGlobalRules": { + "message": "Глобальные правила: этот столбец предназначен для правил, применяемых ко всем сайтам.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"сторонние фреймы", - "description":"" + "popupTipLocalRules": { + "message": "Локальные правила: этот столбец предназначен для правил, применяемых только к текущему сайту.\nЛокальные правила переопределяют глобальные.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"доменов подключено", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Нажмите, чтобы сохранить изменения.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} из {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Нажмите, чтобы отменить изменения.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Создать", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "все", + "description": "" }, - "pickerPick":{ - "message":"Выбрать", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "изображения", + "description": "" }, - "pickerQuit":{ - "message":"Выйти", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "сторонние ресурсы", + "description": "" }, - "pickerPreview":{ - "message":"Предпросмотр", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "сторонние css\/изображения", + "description": "" }, - "pickerNetFilters":{ - "message":"Сетевые фильтры", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "inline-скрипты", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Косметические фильтры", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "собственные скрипты", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Щелчок, Ctrl+щелчок", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "сторонние скрипты", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Заблокировать элемент", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "сторонние фреймы", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Скрыть оставшееся от заблокированных элементов место", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "доменов подключено", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Показывать количество заблокированных запросов на иконке", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} из {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Отключить всплывающие подсказки", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Создать", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Использовать контекстное меню, где возможно", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Выбрать", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Режим для дальтоников", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Выйти", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Включить поддержку облачного хранилища", - "description":"" + "pickerPreview": { + "message": "Предпросмотр", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Я опытный пользователь (Обязательно к прочтению<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Сетевые фильтры", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"расширенные настройки", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Косметические фильтры", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Отключить предзагрузку для предотвращения подключений для заблокированных запросов", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Клик, Ctrl+клик", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Отключить проверку гиперссылок", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Заблокировать элемент", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Предотвратить утечку локального IP-адреса через WebRTC", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Скрыть оставшееся от заблокированных элементов место", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Поведение по умолчанию", - "description":"" + "settingsIconBadgePrompt": { + "message": "Показывать количество заблокированных запросов на иконке", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Эти настройки могут быть указаны для каждого сайта отдельно", - "description":"" + "settingsTooltipsPrompt": { + "message": "Отключить всплывающие подсказки", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Отключить косметические фильтры", - "description":"" + "settingsContextMenuPrompt": { + "message": "Использовать контекстное меню, где возможно", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Блокировать медиа-элементы больше {{input:number}} КБ", - "description":"" + "settingsColorBlindPrompt": { + "message": "Цветовая схема для дальтоников", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Блокировать сторонние шрифты", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Включить поддержку облачного хранилища", + "description": "" }, - "settingsStorageUsed":{ - "message":"Места использовано: {{value}} байт", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Я опытный пользователь (Обязательно к прочтению<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Последнее восстановление:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "расширенные настройки", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Последняя резервная копия:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Отключить предзагрузку для предотвращения подключений для заблокированных запросов", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} сетевых фильтров + {{cosmeticFilterCount}} косметических фильтров из:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Отключить проверку гиперссылок", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} используется из {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Предотвратить утечку локального IP-адреса через WebRTC", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Автообновление списков фильтров.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Поведение по умолчанию", + "description": "" }, - "3pUpdateNow":{ - "message":"Обновить сейчас", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Эти настройки могут быть указаны для каждого сайта отдельно", + "description": "" }, - "3pPurgeAll":{ - "message":"Очистить все кэши", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Отключить косметические фильтры", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Парсить и применять косметические фильтры.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Блокировать медиа-элементы больше {{input:number}} КБ", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Использование данной опции увеличивает потребление памяти uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Блокировать сторонние шрифты", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Игнорировать общие косметические фильтры.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Блокировать CSP отчеты", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Рекомендуется включить этот параметр на слабых устройствах.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Места использовано: {{value}} байт", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Список заблокированных хостов", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Последнее восстановление:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Применить изменения", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Последняя резервная копия:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Реклама", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} сетевых фильтров + {{cosmeticFilterCount}} косметических фильтров из:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Приватность", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} используется из {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Вредоносные программы", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Автообновление списков фильтров.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Социальные", - "description":"English: Social" + "3pUpdateNow": { + "message": "Обновить сейчас", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Многоцелевые", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Очистить все кэши", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Регионы, языки", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Парсить и применять косметические фильтры.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Пользовательские", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Использование данной опции увеличивает потребление памяти uBlock₀.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Один URL на строку. Строки, начинающиеся с символа ‘!’, будут игнорироваться. Неверные ссылки будут игнорироваться без предупреждения.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Игнорировать общие косметические фильтры.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Устарел.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Рекомендуется включить этот параметр на слабых устройствах.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Последнее обновление: {{ago}}.\nКликните для принудительного обновления.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Список заблокированных хостов", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Обновляется...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Применить изменения", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"В результате ошибки сети обновление не произошло.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Реклама", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Одно правило на строку. Правилом может быть обычное имя сайта, или Adblock Plus-совместимый фильтр. Строки, начинающиеся с ‘!’, будут игнорироваться.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Приватность", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Импортировать и добавить", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Вредоносные программы", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Экспортировать", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Раздражающие элементы", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Многоцелевые", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Применить изменения", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Регионы, языки", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Постоянные правила", - "description":"header" + "3pGroupCustom": { + "message": "Пользовательские", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Временные правила", - "description":"header" + "3pExternalListsHint": { + "message": "Один URL на строку. Строки, начинающиеся с символа ‘!’, будут игнорироваться. Неверные ссылки будут игнорироваться без предупреждения.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Вернуть", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Устарел.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Утвердить", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Последнее обновление: {{ago}}.\nКликните для принудительного обновления.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Изменить", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Обновляется...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Сохранить", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "В результате ошибки сети обновление не произошло.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Сбросить", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Одно правило на строку. Правилом может быть обычное имя сайта, или Adblock Plus-совместимый фильтр. Строки, начинающиеся с ‘!’, будут игнорироваться.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Импорт из файла...", - "description":"" + "1pImport": { + "message": "Импортировать и добавить", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Экспорт в файл...", - "description":"" + "1pExport": { + "message": "Экспортировать", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-custom-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Список ваших правил динамической фильтрации.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Применить изменения", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Синтаксис правил: источник назначение тип действие<\/code> (полная документация<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Постоянные правила", + "description": "header" }, - "whitelistPrompt":{ - "message":"Белый список указывает на каких веб-страницах uBlock Origin должен быть отключен. Одна запись на строку. Некорректные записи будут без предупреждений проигнорированы и закомментированы.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Временные правила", + "description": "header" }, - "whitelistImport":{ - "message":"Импортировать и добавить", - "description":"English: Import and append" + "rulesRevert": { + "message": "Вернуть", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Экспортировать", - "description":"English: Export" + "rulesCommit": { + "message": "Утвердить", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Изменить", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Применить изменения", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Сохранить", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Тип", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Сбросить", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Домен", - "description":"English: Domain" + "rulesImport": { + "message": "Импорт из файла...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Экспорт в файл...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Фильтр", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Все", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Список ваших правил динамической фильтрации.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Скрытые запросы", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Синтаксис правил: источник назначение тип действие<\/code> (полная документация<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"фильтр записей в журнале", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Белый список указывает на каких веб-страницах uBlock Origin должен быть отключен. Одна запись на строку. Некорректные записи будут без предупреждений проигнорированы и закомментированы.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Максимальное число записей логгера", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Импортировать и добавить", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Контекст:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Экспортировать", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Тип:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Динамическая фильтрация URL", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Применить изменения", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Статическая фильтрация", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Тип", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} сетевые запросы {{type}}, {{br}}URL которых совпадает с {{url}} {{br}} и которые происходят из {{origin}},{{br}}{{importance}} имеется подходящий фильтр-исключение.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Домен", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Блокировать", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Разрешить", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Фильтр", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"типа “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Все", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"любой тип", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Скрытые запросы", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"из “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "фильтр записей в журнале", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"откуда угодно", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Максимальное число записей логгера", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"кроме случаев, когда", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Контекст:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"даже если", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Тип:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Статический фильтр {{filter}} найден в:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Динамическая фильтрация URL", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Список изменений", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Статическая фильтрация", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Вики", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} сетевые запросы {{type}}, {{br}}URL которых совпадает с {{url}} {{br}} и которые происходят из {{origin}},{{br}}{{importance}} имеется подходящий фильтр-исключение.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Поддержка", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Блокировать", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Исходный код (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Разрешить", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Участники", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "типа “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Резервное копирование в файл...", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "любой тип", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "из “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Восстановление из файла...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "откуда угодно", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Восстановить настройки по умолчанию...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "кроме случаев, когда", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Текущие настройки будут заменены данными из резервной копии от {{time}}, и uBlock₀ будет перезапущен.\n\nПерезаписать все существующие параметры данными из резервной копии?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "даже если", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Данные не могут быть прочитаны или ошибочны", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Статический фильтр {{filter}} найден в:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Все ваши настройки будут удалены, uBlock₀ будет перезапущен. \n\nВосстановить настройки по умолчанию?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Список изменений", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Ошибка сети: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Вики", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: добавить следующий адрес в ваш список фильтров?\n\nНазвание: \"{{title}}\"\nURL-адрес: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Поддержка", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"минуту назад", - "description":"English: a minute ago" + "aboutCode": { + "message": "Исходный код (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} минут(-ы) назад", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Участники", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"час назад", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Резервное копирование в файл...", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} часа(-ов) назад", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"день назад", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Восстановление из файла...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} дня(-ей) назад", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Восстановить настройки по умолчанию...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Показать панель управления", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Текущие настройки будут заменены данными из резервной копии от {{time}}, и uBlock₀ будет перезапущен.\n\nПерезаписать все существующие параметры данными из резервной копии?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Показать журнал сетевых запросов", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Данные не могут быть прочитаны или ошибочны", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"выключен", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Все ваши настройки будут удалены, uBlock₀ будет перезапущен. \n\nВосстановить настройки по умолчанию?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin предотвратил загрузку следующей страницы:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Ошибка сети: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Из-за следующего фильтра", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: добавить следующий адрес в ваш список фильтров?\n\nНазвание: \"{{title}}\"\nURL-адрес: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"без параметров", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "минуту назад", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Найден в:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} минут(-ы) назад", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Вернуться", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "час назад", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Закрыть это окно", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} часа(-ов) назад", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Отключить строгую блокировку для {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "день назад", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Временно", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} дня(-ей) назад", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Навсегда", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Показать панель управления", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Экспорт в облачное хранилище", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Показать журнал сетевых запросов", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Импорт из облачного хранилища", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "выключен", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Импортировать из облачного хранилища и объединить с текущими настройками", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin предотвратил загрузку следующей страницы:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Из-за следующего фильтра", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Имя этого устройства:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "без параметров", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Внимание! Изменяйте эти настройки на свой страх и риск.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Найден в:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Принять", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Вернуться", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Применить изменения", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Закрыть это окно", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Вернуть", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Отключить строгую блокировку для {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"байт", - "description":"" + "docblockedDisableTemporary": { + "message": "Временно", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Временно разрешить большие медиа-элементы", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Навсегда", + "description": "English: Permanently" }, - "dummy":{ - "message":"Эта запись должна быть последней", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Экспорт в облачное хранилище", + "description": "tooltip" + }, + "cloudPull": { + "message": "Импорт из облачного хранилища", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Импортировать из облачного хранилища и объединить с текущими настройками", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Имя этого устройства:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Внимание! Изменяйте эти настройки на свой страх и риск.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Принять", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Применить изменения", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Вернуть", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "байт", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Временно разрешить большие медиа-элементы", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Эта запись должна быть последней", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/sk/messages.json b/src/_locales/sk/messages.json index d2f9a28c5b685..85036319fb588 100644 --- a/src/_locales/sk/messages.json +++ b/src/_locales/sk/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Konečne efektívny blokovač, ktorý nezaťažuje CPU a pamäť.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Konečne efektívny blokovač, ktorý nezaťažuje CPU a pamäť.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Ovládací panel", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Ovládací panel", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Nastavenia", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Nastavenia", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filtre tretích strán", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtre tretích strán", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Moje filtre", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Moje filtre", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Moje pravidlá", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Moje pravidlá", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Biela listina", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Biela listina", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Zaznamenávač", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Zaznamenávač", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"O doplnku", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "O doplnku", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Pokročilé nastavenia", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Pokročilé nastavenia", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Kliknutie: zakázať\/povoliť uBlock pre túto stránku.\n\nCtrl+kliknutie: zakázať uBlock₀ len pre túto stránku.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Kliknutie: zakázať\/povoliť uBlock pre túto stránku.\n\nCtrl+kliknutie: zakázať uBlock₀ len pre túto stránku.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"zablokované požiadavky", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Kliknutím zakážete uBlock₀ pre túto stránku.\n\nCtrl+kliknutie zakáže uBlock₀ len pre túto stránku.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"na tejto stránke", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Kliknutím povolíte uBlock₀ pre túto stránku.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} alebo {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "zablokované požiadavky", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"od inštalácie", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "na tejto stránke", + "description": "English: on this page" }, - "popupOr":{ - "message":"alebo", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} alebo {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Kliknite sem pre otvorenie ovládacieho panela", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "od inštalácie", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Prejsť do režimu výberu prvku", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "alebo", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Prejsť do režimu výberu prvku", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Otvoriť ovládací panel", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Otvoriť Zaznamenávač", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Prejsť do režimu výberu prvku", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Žiadne vyskakovacie okná pre túto stránku", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Prejsť do režimu výberu prvku", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Prepnúť blokovanie veľkých multimediálnych prvkov na tejto stránke", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Otvoriť Zaznamenávač", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Prepnúť kozmetické filtrovanie pre túto stránku", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Žiadne vyskakovacie okná pre túto stránku", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Prepnúť blokovanie vzdialených písiem na tejto stránke", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Kliknutím zakážete všetky vyskakovacie okná na tejto stránke", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globálne pravidlá: tento stĺpec slúži pre pravidlá, ktoré platia pre všetky weby.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Kliknutím povolíte všetky vyskakovacie okná na tejto stránke", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokálne pravidlá: tento stĺpec slúži pre pravidlá, ktoré platia len pre aktuálny web.\nLokálne pravidlá prepisujú globálne pravidlá.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Prepnúť blokovanie veľkých multimediálnych prvkov na tejto stránke", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Kliknutím použijete vaše zmeny.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Kliknutím zablokovať veľké multimediálne prvky na tejto stránke", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Kliknutím vrátite vaše zmeny.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Kliknutím povolíte veľké multimediálne prvky na tejto stránke", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"všetko", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Prepnúť kozmetické filtrovanie pre túto stránku", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"obrázky", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Kliknutím zakážete kozmetické filtrovanie na tejto stránke", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"z tretej strany", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Kliknutím povolíte kozmetické filtrovanie na tejto stránke", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"CSS\/obrázky tretích strán", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Prepnúť blokovanie vzdialených písiem na tejto stránke", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"vstavané skripty", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Kliknutím zakážete vzdialené písma pre túto stránku", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"skripty prvej triedy", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Kliknutím povolíte vzdialené písma pre túto stránku", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"skripty tretej triedy", - "description":"" + "popupTipGlobalRules": { + "message": "Globálne pravidlá: tento stĺpec slúži pre pravidlá, ktoré platia pre všetky weby.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"rámy tretej triedy", - "description":"" + "popupTipLocalRules": { + "message": "Lokálne pravidlá: tento stĺpec slúži pre pravidlá, ktoré platia len pre aktuálny web.\nLokálne pravidlá prepisujú globálne pravidlá.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"pripojené domény", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Kliknutím použijete vaše zmeny.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} z {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Kliknutím vrátite vaše zmeny.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Vytvoriť", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "všetko", + "description": "" }, - "pickerPick":{ - "message":"Vybrať", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "obrázky", + "description": "" }, - "pickerQuit":{ - "message":"Ukončiť", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "z tretej strany", + "description": "" }, - "pickerPreview":{ - "message":"Náhľad", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "CSS\/obrázky tretích strán", + "description": "" }, - "pickerNetFilters":{ - "message":"Sieťové filtre", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "vstavané skripty", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kozmetické filtre", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "skripty prvej triedy", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Kliknutie, Ctrl-kliknutie", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "skripty tretej triedy", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Zablokovať prvok", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "rámy tretej triedy", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Skryť zástupcov zablokovaných prvkov", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "pripojené domény", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Zobraziť počet zablokovaných požiadaviek na ikone", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} z {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Zakázať tipy pre nástroje", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Vytvoriť", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Používať kontextovú ponuku v prípade potreby", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Vybrať", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Režim pre farboslepých", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Ukončiť", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Povoliť podporu cloudového úložiska", - "description":"" + "pickerPreview": { + "message": "Náhľad", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Som pokročilý používateľ (povinne prečítať<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Sieťové filtre", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"pokročilé nastavenia", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kozmetické filtre", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Zakázať prednačítavanie (zakáže akékoľvek pripojenie pre zablokované sieťové požiadavky)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Kliknutie, Ctrl-kliknutie", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Zakázať auditovanie hypertextových odkazov", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Zablokovať prvok", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Zabrániť úniku lokálnej IP adresy cez WebRTC", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Skryť zástupcov zablokovaných prvkov", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Predvolené správanie", - "description":"" + "settingsIconBadgePrompt": { + "message": "Zobraziť počet zablokovaných požiadaviek na ikone", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Tieto predvolené správania môžu byť prepísané u jednotlivých stránkach", - "description":"" + "settingsTooltipsPrompt": { + "message": "Zakázať tipy pre nástroje", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Vypnúť kozmetické filtrovanie", - "description":"" + "settingsContextMenuPrompt": { + "message": "Používať kontextovú ponuku v prípade potreby", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokovať multimediálne prvky väčšie ako {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Režim pre farboslepých", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokovať vzdialené písma", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Povoliť podporu cloudového úložiska", + "description": "" }, - "settingsStorageUsed":{ - "message":"Využité miesto: {{value}} bajtov", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Som pokročilý používateľ (povinne prečítať<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Posledná obnova:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "pokročilé nastavenia", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Posledná záloha:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Zakázať prednačítavanie (zakáže akékoľvek pripojenie pre zablokované sieťové požiadavky)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} sieťových filtrov + {{cosmeticFilterCount}} kozmetických filtrov z:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Zakázať auditovanie hypertextových odkazov", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} použitých z {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Zabrániť úniku lokálnej IP adresy cez WebRTC", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Automaticky aktualizovať zoznamy filtrov.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Predvolené správanie", + "description": "" }, - "3pUpdateNow":{ - "message":"Aktualizovať teraz", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Tieto predvolené správania môžu byť prepísané u jednotlivých stránkach", + "description": "" }, - "3pPurgeAll":{ - "message":"Vyčistiť celú vyrovnávaciu pamäť", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Vypnúť kozmetické filtrovanie", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Spracovať a vynútiť kozmetické filtre", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blokovať multimediálne prvky väčšie ako {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Povolenie tejto funkcie zvyšujte nároky uBlock₀<\/i>na pamäť.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blokovať vzdialené písma", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorovať generické kozmetické filtre", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Zablokovať CSP hlásenia", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Odporúča sa povoliť túto možnosť na menej výkonných zariadení.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Využité miesto: {{value}} bajtov", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Zoznamy zablokovaných hostiteľov", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Posledná obnova:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Použiť zmeny", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Posledná záloha:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklamy", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} sieťových filtrov + {{cosmeticFilterCount}} kozmetických filtrov z:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Súkromie", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} použitých z {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domény malvéru", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Automaticky aktualizovať zoznamy filtrov.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Sociálne", - "description":"English: Social" + "3pUpdateNow": { + "message": "Aktualizovať teraz", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Viacúčelové", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Vyčistiť celú vyrovnávaciu pamäť", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regióny, jazyky", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Spracovať a vynútiť kozmetické filtre", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Vlastné", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Povolenie tejto funkcie zvyšujte nároky uBlock₀<\/i>na pamäť.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Jedna URL na riadok. Riadky začínajúce s ‘!’ budú ignorované. Neplatné URL budú potichu ignorované.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorovať generické kozmetické filtre", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Zastarané.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Odporúča sa povoliť túto možnosť na menej výkonných zariadení.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Posledná aktualizácia: {{ago}}.\nKliknutím vynútite aktualizáciu.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Zoznamy zablokovaných hostiteľov", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Aktualizácia...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Použiť zmeny", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Chyba siete zabránila aktualizácii zdroja.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklamy", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Jeden filter na riadok. Filter môže byť jednoduchý názov hostiteľa alebo filter kompatibilný s Adblock Plus. Riadky začínajúce s ‘!’ budú ignorované.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Súkromie", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importovať a pripojiť", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domény malvéru", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exportovať", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Obťažujúce", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-moje-statické-filtre_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Viacúčelové", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Použiť zmeny", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regióny, jazyky", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Trvalé pravidlá", - "description":"header" + "3pGroupCustom": { + "message": "Vlastné", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Dočasné pravidlá", - "description":"header" + "3pExternalListsHint": { + "message": "Jedna URL na riadok. Riadky začínajúce s ‘!’ budú ignorované. Neplatné URL budú potichu ignorované.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Vrátiť", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Zastarané.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Potvrdiť", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Posledná aktualizácia: {{ago}}.\nKliknutím vynútite aktualizáciu.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Upraviť", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Aktualizácia...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Uložiť", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Chyba siete zabránila aktualizácii zdroja.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Zahodiť", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Jeden filter na riadok. Filter môže byť jednoduchý názov hostiteľa alebo filter kompatibilný s Adblock Plus. Riadky začínajúce s ‘!’ budú ignorované.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importovať zo súboru...", - "description":"" + "1pImport": { + "message": "Importovať a pripojiť", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exportovať zo súboru", - "description":"" + "1pExport": { + "message": "Exportovať", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"ublock-moje-dynamické-pravidlá_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-moje-statické-filtre_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Zoznam vašich dynamických filtrovacích pravidiel.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Použiť zmeny", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Syntax pravidla: zdroj cieľ typ akcia<\/code> (úplná dokumentácia<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Trvalé pravidlá", + "description": "header" }, - "whitelistPrompt":{ - "message":"Zoznam hostiteľov, pre ktoré webové stránky bude uBlock Origin zakázaný. Jedna položka na riadok. Neplatní hostitelia budú ignorovaní a zakomentovaní.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Dočasné pravidlá", + "description": "header" }, - "whitelistImport":{ - "message":"Importovať a pripojiť", - "description":"English: Import and append" + "rulesRevert": { + "message": "Vrátiť", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exportovať", - "description":"English: Export" + "rulesCommit": { + "message": "Potvrdiť", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"ublock-moja-biela-listina_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Upraviť", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Použiť zmeny", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Uložiť", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Typ", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Zahodiť", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Doména", - "description":"English: Domain" + "rulesImport": { + "message": "Importovať zo súboru...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Exportovať zo súboru", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "ublock-moje-dynamické-pravidlá_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Všetky", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Zoznam vašich dynamických filtrovacích pravidiel.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Za oponou", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Syntax pravidla: zdroj cieľ typ akcia<\/code> (úplná dokumentácia<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtrovať položky v zázname", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Zoznam hostiteľov, pre ktoré webové stránky bude uBlock Origin zakázaný. Jedna položka na riadok. Neplatní hostitelia budú ignorovaní a zakomentovaní.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maximálny počet položiek v zázname", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importovať a pripojiť", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Kontext:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exportovať", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Typ:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "ublock-moja-biela-listina_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamické filtrovanie URL", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Použiť zmeny", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statické filtrovanie", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Typ", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} sieťové požiadavky {{type}} {{br}}, ktorých URL adresa sa zhoduje s {{url}} {{br}}a pochádza {{origin}},{{br}}{{importance}} zodpovedajúci výnimkový filter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Doména", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Zablokovať", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Povoliť", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"typu “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Všetky", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"akéhokoľvek typu", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Za oponou", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"z “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtrovať položky v zázname", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"z odkiaľkoľvek", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maximálny počet položiek v zázname", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"pokiaľ neexistuje", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Kontext:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"aj keď existuje", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Typ:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statický filter {{filter}} bol nájdený v:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamické filtrovanie URL", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Zoznam zmien", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statické filtrovanie", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} sieťové požiadavky {{type}} {{br}}, ktorých URL adresa sa zhoduje s {{url}} {{br}}a pochádza {{origin}},{{br}}{{importance}} zodpovedajúci výnimkový filter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Podpora", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Zablokovať", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Zdrojový kód (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Povoliť", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Prispievatelia", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "typu “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Zálohovať do súboru", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "akéhokoľvek typu", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-moja-záloha_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "z “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Obnoviť zo súboru...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "z odkiaľkoľvek", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Obnoviť na predvolené nastavenia...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "pokiaľ neexistuje", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Všetky vaše nastavenia budú prepísané pomocou dáta zálohovaných dňa {{time}} a uBlock sa reštartne.\n\nPrepísať všetky existujúce nastavenia pomocou zálohovaných dát?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "aj keď existuje", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Dáta sa nepodarilo načítať alebo sú neplatné", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statický filter {{filter}} bol nájdený v:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Všetky vaše nastavenia budú odstránené a uBlock sa reštartne.\n\nObnoviť uBlock na predvolené nastavenia?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Zoznam zmien", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Chyba siete: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Pridať nasledujúcu URL do zoznamu vlastných filtrov?\n\nNázov: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Podpora", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"pred minútou", - "description":"English: a minute ago" + "aboutCode": { + "message": "Zdrojový kód (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"pred {{value}} minútami", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Prispievatelia", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"pred hodinou", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Zálohovať do súboru", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"pred {{value}} hodinami", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-moja-záloha_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"pred dňom", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Obnoviť zo súboru...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"pred {{value}} dňami", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Obnoviť na predvolené nastavenia...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Zobraziť ovládací panel", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Všetky vaše nastavenia budú prepísané pomocou dáta zálohovaných dňa {{time}} a uBlock sa reštartne.\n\nPrepísať všetky existujúce nastavenia pomocou zálohovaných dát?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Zobraziť Zaznamenávač", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Dáta sa nepodarilo načítať alebo sú neplatné", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"vypnutý", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Všetky vaše nastavenia budú odstránené a uBlock sa reštartne.\n\nObnoviť uBlock na predvolené nastavenia?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin zabránil načítaniu nasledujúcej stránky:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Chyba siete: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Kvôli nasledujúcemu filtru", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Pridať nasledujúcu URL do zoznamu vlastných filtrov?\n\nNázov: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"bez parametrov", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "pred minútou", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Nájdený v:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "pred {{value}} minútami", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Naspäť", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "pred hodinou", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Zatvoriť toto okno", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "pred {{value}} hodinami", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Zakázať prísne blokovanie pre {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "pred dňom", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Dočasne", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "pred {{value}} dňami", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Natrvalo", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Zobraziť ovládací panel", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exportovať do cloudového úložiska", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Zobraziť Zaznamenávač", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importovať z cloudového úložiska", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "vypnutý", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importovať z cloudového úložiska a zlúčiť so súčasnými nastaveniami", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin zabránil načítaniu nasledujúcej stránky:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Kvôli nasledujúcemu filtru", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Názov tohto zariadenia:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "bez parametrov", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Upozornenie! Zmenu pokročilých nastavení vykonávate na vlastné nebezpečenstvo.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Nájdený v:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Poslať", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Naspäť", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Použiť zmeny", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Zatvoriť toto okno", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Vrátiť", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Zakázať prísne blokovanie pre {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bajtov", - "description":"" + "docblockedDisableTemporary": { + "message": "Dočasne", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Dočasne povoliť veľké multimediálne prvky", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Natrvalo", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exportovať do cloudového úložiska", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importovať z cloudového úložiska", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importovať z cloudového úložiska a zlúčiť so súčasnými nastaveniami", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Názov tohto zariadenia:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Upozornenie! Zmenu pokročilých nastavení vykonávate na vlastné nebezpečenstvo.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Poslať", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Použiť zmeny", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Vrátiť", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajtov", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Dočasne povoliť veľké multimediálne prvky", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/sl/messages.json b/src/_locales/sl/messages.json index ca51f8d680a74..13d30f2baae57 100644 --- a/src/_locales/sl/messages.json +++ b/src/_locales/sl/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Končno, učinkovita, procesorju in pomnilniku prijazna razširitev za blokiranje oglasov.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Končno, učinkovita, procesorju in pomnilniku prijazna razširitev za blokiranje oglasov.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Nadzorna plošča", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Nadzorna plošča", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Nastavitve", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Nastavitve", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filtri tretjih oseb", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtri tretjih oseb", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Moji filtri", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Moji filtri", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Moja pravila", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Moja pravila", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Seznam dovoljenih", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Seznam dovoljenih", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Dnevnik omrežnih zahtev", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Dnevnik omrežnih zahtev", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"O razširitvi", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "O razširitvi", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Napredne nastavitve", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Napredne nastavitve", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klik: onemogoči\/omogoči uBlock₀ za to stran.\n\nCtrl+klik: onemogoči uBlock₀ samo na tej strani.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klik: onemogoči\/omogoči uBlock₀ za to stran.\n\nCtrl+klik: onemogoči uBlock₀ samo na tej strani.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"blokirane zahteve", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"na tej strani", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} ali {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "blokirane zahteve", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"od namestitve", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "na tej strani", + "description": "English: on this page" }, - "popupOr":{ - "message":"ali", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} ali {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Klikni za odpiranje nadzorne plošče", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "od namestitve", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "ali", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Vklopi način izbire elementov", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Klikni za odpiranje nadzorne plošče", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Pojdi na dnevnik omrežnih zahtev", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Vklopi način izbire elementov", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Vklop\/Izklop blokiranja vseh pojavnih oken za to stran", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Vklopi način izbire elementov", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Vklop\/izklop blokiranja večjih medijev za to stran", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Pojdi na dnevnik omrežnih zahtev", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Vklop\/Izklop kozmetičnih filtrov za to stran", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Vklop\/Izklop blokiranja vseh pojavnih oken za to stran", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Vklopi\/izklopi blokiranje oddaljenih pisav za to stran", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globalna pravila: ta stolpec je za pravila, ki se uveljavljajo za vse strani.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokalna pravila: ta stolpec je za pravila, ki se uveljavljajo samo za trenutno stran. Lokalna pravila preglasijo globalna pravila.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Vklop\/izklop blokiranja večjih medijev za to stran", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Kliknite za uveljavitev sprememb.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Kliknite za preklic sprememb.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"vse", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Vklop\/Izklop kozmetičnih filtrov za to stran", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"slike", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"tretje-osebne", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/slike tretje osebe", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Vklopi\/izklopi blokiranje oddaljenih pisav za to stran", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"vrinjene skripti", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"strani lastni skripti", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"skripti tretjih oseb", - "description":"" + "popupTipGlobalRules": { + "message": "Globalna pravila: ta stolpec je za pravila, ki se uveljavljajo za vse strani.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"okvirji tretjih oseb", - "description":"" + "popupTipLocalRules": { + "message": "Lokalna pravila: ta stolpec je za pravila, ki se uveljavljajo samo za trenutno stran. Lokalna pravila preglasijo globalna pravila.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"povezane domene", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Kliknite za uveljavitev sprememb.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} od {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Kliknite za preklic sprememb.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Ustvari", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "vse", + "description": "" }, - "pickerPick":{ - "message":"Izberi", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "slike", + "description": "" }, - "pickerQuit":{ - "message":"Končaj", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "tretje-osebne", + "description": "" }, - "pickerPreview":{ - "message":"Predogled", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css\/slike tretje osebe", + "description": "" }, - "pickerNetFilters":{ - "message":"Omrežni filtri", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "vrinjene skripti", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kozmetični filtri", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "strani lastni skripti", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klik, Ctrl-klik", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "skripti tretjih oseb", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blokiraj element", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "okvirji tretjih oseb", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Skrij držala blokiranih elementov", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "povezane domene", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Prikaži število blokiranih zahtevkov na ikoni", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} od {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Onemogoči namige", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Ustvari", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Izkoristite kontekstni meni, kjer je to primerno", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Izberi", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Način prijazen barvno slepim uporabnikom", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Končaj", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Omogoči podporo za shrambo v oblaku", - "description":"" + "pickerPreview": { + "message": "Predogled", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Sem napreden uporabnik (Potrebno branje<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Omrežni filtri", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"napredne nastavitve", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kozmetični filtri", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Onemogoči prednalaganje strani (da se prepreči kakršno koli povezavo za blokirane zahteve omrežja)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klik, Ctrl-klik", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Onemogoči revizijo hiperlinkov (Hyperlink-auditing)", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blokiraj element", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Prepreči izpostavitev lokalnega IP naslova preko WebRTC", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Skrij držala blokiranih elementov", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Privzeto ravnanje", - "description":"" + "settingsIconBadgePrompt": { + "message": "Prikaži število blokiranih zahtevkov na ikoni", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Te privzete nastavitve lahko spremenite za posamezne strani", - "description":"" + "settingsTooltipsPrompt": { + "message": "Onemogoči namige", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Onemogoči kosmetično filtriranje", - "description":"" + "settingsContextMenuPrompt": { + "message": "Izkoristite kontekstni meni, kjer je to primerno", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blokiraj medijske elemente večje kot {input:number} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Način prijazen barvno slepim uporabnikom", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blokiraj oddaljene pisave", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Omogoči podporo za shrambo v oblaku", + "description": "" }, - "settingsStorageUsed":{ - "message":"Uporabljenega prostora: {{value}} bajtov", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Sem napreden uporabnik (Potrebno branje<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Zadnja obnovitev:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "napredne nastavitve", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Zadnja varnostna kopija:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Onemogoči prednalaganje strani (da se prepreči kakršno koli povezavo za blokirane zahteve omrežja)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} omrežnih in {{cosmeticFilterCount}} kozmetičnih filtrov od:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Onemogoči revizijo hiperlinkov (Hyperlink-auditing)", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"uporabljenih {{used}} od {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Prepreči izpostavitev lokalnega IP naslova preko WebRTC", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Samodejno posodabljanje seznama filtrov.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Privzeto ravnanje", + "description": "" }, - "3pUpdateNow":{ - "message":"Posodobi zdaj", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Te privzete nastavitve lahko spremenite za posamezne strani", + "description": "" }, - "3pPurgeAll":{ - "message":"Sprosti celoten predpomnilnik", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Onemogoči kosmetično filtriranje", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Razčleni in uveljavi kozmetične filtre.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blokiraj medijske elemente večje kot {input:number} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Vklop te funkcije poveča spominski odtis uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blokiraj oddaljene pisave", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignoriraj generične kozmetične filtre", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Priporočeno je, da omogočite to možnost na manj zmogljivih napravah.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Uporabljenega prostora: {{value}} bajtov", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Seznam blokiranih gostiteljev", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Zadnja obnovitev:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Uveljavi spremembe", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Zadnja varnostna kopija:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Oglasi", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} omrežnih in {{cosmeticFilterCount}} kozmetičnih filtrov od:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Zasebnost", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "uporabljenih {{used}} od {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Zlonamerne domene", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Samodejno posodabljanje seznama filtrov.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Socialno", - "description":"English: Social" + "3pUpdateNow": { + "message": "Posodobi zdaj", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Večnamenski", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Sprosti celoten predpomnilnik", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regije, jeziki", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Razčleni in uveljavi kozmetične filtre.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Po meri", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Vklop te funkcije poveča spominski odtis uBlock₀.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"En URL na vrstico. Vrstice s predpono ‘!’ in neveljavni URL-ji bodo prezrti.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignoriraj generične kozmetične filtre", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"zastarelo", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Priporočeno je, da omogočite to možnost na manj zmogljivih napravah.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Zadnja posodobitev: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Seznam blokiranih gostiteljev", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Updating...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Uveljavi spremembe", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"A network error prevented the resource from being updated.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Oglasi", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"En filter na vrstico. Filter je lahko navadno ime gostitelja, ali pa Adblock Plus kompatibilen filter. Vrstice z znakom ‘!’ bodo ignorirane.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Zasebnost", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Uvozi in dodaj", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Zlonamerne domene", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Izvozi", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"moji-ublock-staticni-filtri_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Večnamenski", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Uporabi spremembe", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regije, jeziki", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Stalna pravila", - "description":"header" + "3pGroupCustom": { + "message": "Po meri", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Začasna pravila", - "description":"header" + "3pExternalListsHint": { + "message": "En URL na vrstico. Vrstice s predpono ‘!’ in neveljavni URL-ji bodo prezrti.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Povrni", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "zastarelo", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Stori", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Zadnja posodobitev: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Uredi", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Posodabljanje ...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Shrani", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Omrežna napaka je preprečila posodobitev virov.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Zavrži", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "En filter na vrstico. Filter je lahko navadno ime gostitelja, ali pa Adblock Plus kompatibilen filter. Vrstice z znakom ‘!’ bodo ignorirane.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Uvozi iz datoteke...", - "description":"" + "1pImport": { + "message": "Uvozi in dodaj", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Izvozi v datoteko", - "description":"" + "1pExport": { + "message": "Izvozi", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"moji-ublock-dinamicna-pravila_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "moji-ublock-staticni-filtri_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Seznam vaših dinamičnih pravil filtriranja.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Uporabi spremembe", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Sintaksa pravil: vir destinacija tip akcija<\/code> (polna dokumentacija (v angleščini)<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Stalna pravila", + "description": "header" }, - "whitelistPrompt":{ - "message":"Vaš seznam gostiteljskih naslovov, za katere želite, da je uBlock₀ izklopljen. En vnos na vrstico. Neveljavna gostiteljska imena bodo brez opozoril ignorirana.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Začasna pravila", + "description": "header" }, - "whitelistImport":{ - "message":"Uvozi in dodaj", - "description":"English: Import and append" + "rulesRevert": { + "message": "Povrni", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Izvozi", - "description":"English: Export" + "rulesCommit": { + "message": "Stori", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"moj-ublock-seznam-dovoljenih_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Uredi", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Uveljavi spremembe", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Shrani", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Vrsta", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Zavrži", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domena", - "description":"English: Domain" + "rulesImport": { + "message": "Uvozi iz datoteke...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Izvozi v datoteko", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "moji-ublock-dinamicna-pravila_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Vse", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Seznam vaših dinamičnih pravil filtriranja.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Za zaveso", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Sintaksa pravil: vir destinacija tip akcija<\/code> (polna dokumentacija (v angleščini)<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtriraj vnose dnevnika", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Vaš seznam gostiteljskih naslovov, za katere želite, da je uBlock₀ izklopljen. En vnos na vrstico. Neveljavna gostiteljska imena bodo brez opozoril ignorirana.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Največje število dnevniških vnosov", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Uvozi in dodaj", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Vsebina:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Izvozi", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Vrsta:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "moj-ublock-seznam-dovoljenih_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dinamično URL filtriranje", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Uveljavi spremembe", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statično filtriranje", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Vrsta", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} zahteve omrežja {{type}} {{br}}katerih URL naslov se ujema z {{url}} {{br}}in izvirajo iz {{origin}},{{br}}{{importance}} obstaja ustrezen filter izjeme.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domena", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blokiraj", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Dovoli", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"vrsta {{type}}", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Vse", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"vsaka vrsta", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Za zaveso", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"iz “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtriraj vnose dnevnika", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"iz kjerkoli", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Največje število dnevniških vnosov", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"razen če", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Vsebina:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"tudi če", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Vrsta:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statičen filter {{filter}} najden v:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dinamično URL filtriranje", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Dnevnik sprememb", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statično filtriranje", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} zahteve omrežja {{type}} {{br}}katerih URL naslov se ujema z {{url}} {{br}}in izvirajo iz {{origin}},{{br}}{{importance}} obstaja ustrezen filter izjeme.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Podpora", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blokiraj", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Izvorna koda (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Dovoli", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Razvijalci", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "vrsta {{type}}", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Naredi varnostno kopijo v datoteko", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "vsaka vrsta", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"moja-ublock-varnostna-kopija_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "iz “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Obnovi iz datoteke...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "iz kjerkoli", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Ponastavi na privzete nastavitve...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "razen če", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Vse vaše nastavitve bodo prepisane s podatki, ki so bili varnostno shranjeni {{time}}. uBlock₀ se bo ponovno zagnal.\n\nPrepišem vse obstoječe nastavitve z varnostno shranjenimi podatki?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "tudi če", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Podatki varnostne kopije niso uspeli biti uspešno prebrani oz. so neveljavni", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statičen filter {{filter}} najden v:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Vse vaše spremembe bodo izbrisane, uBlock₀ pa se bo ponovno zagnal.\n\nPonastavim uBlock₀ na tovarniške nastavitve?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Dnevnik sprememb", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Ne morem se povezati do {{url}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Dodam sledeči URL na listo lastnih filtrov?\n\nNaslov: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Podpora", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"1 minuto nazaj", - "description":"English: a minute ago" + "aboutCode": { + "message": "Izvorna koda (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minut nazaj", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Razvijalci", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"1 uro nazaj", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Naredi varnostno kopijo v datoteko", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} ur nazaj", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "moja-ublock-varnostna-kopija_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"1 dan nazaj", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Obnovi iz datoteke...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dni nazaj", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Ponastavi na privzete nastavitve...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Prikaži nadzorno ploščo", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Vse vaše nastavitve bodo prepisane s podatki, ki so bili varnostno shranjeni {{time}}. uBlock₀ se bo ponovno zagnal.\n\nPrepišem vse obstoječe nastavitve z varnostno shranjenimi podatki?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Prikaži dnevnik", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Podatki varnostne kopije niso uspeli biti uspešno prebrani oz. so neveljavni", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"izklop", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Vse vaše spremembe bodo izbrisane, uBlock₀ pa se bo ponovno zagnal.\n\nPonastavim uBlock₀ na tovarniške nastavitve?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ je preprečil nalaganje naslednje strani:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Ne morem se povezati do {{url}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Zaradi sledečega filtra", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Dodam sledeči URL na listo lastnih filtrov?\n\nNaslov: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"brez parametrov", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "1 minuto nazaj", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Najden v:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minut nazaj", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Nazaj", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "1 uro nazaj", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Zapri to okno", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} ur nazaj", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Onemogoči striktno blokiranje za {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "1 dan nazaj", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Začasno", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} dni nazaj", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Trajno", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Prikaži nadzorno ploščo", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Izvozi v shrambe oblaka", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Prikaži dnevnik", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Uvozi iz shrambe oblaka", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "izklop", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Uvozi iz oblaka in spoji s trenutnimi nastavitvami", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ je preprečil nalaganje naslednje strani:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Zaradi sledečega filtra", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Ime te naprave:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "brez parametrov", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Opozorilo! Sprememba teh naprednih nastavitev na lastno odgovornost.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Najden v:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Predloži", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Nazaj", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Uveljavi spremembe", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Zapri to okno", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Povrni", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Onemogoči striktno blokiranje za {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"biti", - "description":"" + "docblockedDisableTemporary": { + "message": "Začasno", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Začasno dovoli velike medijske elemente", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Trajno", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Izvozi v shrambe oblaka", + "description": "tooltip" + }, + "cloudPull": { + "message": "Uvozi iz shrambe oblaka", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Uvozi iz oblaka in spoji s trenutnimi nastavitvami", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Ime te naprave:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Opozorilo! Sprememba teh naprednih nastavitev na lastno odgovornost.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Predloži", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Uveljavi spremembe", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Povrni", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "biti", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Začasno dovoli velike medijske elemente", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/sq/messages.json b/src/_locales/sq/messages.json index 483b39554afad..811c799634b20 100644 --- a/src/_locales/sq/messages.json +++ b/src/_locales/sq/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Më në fund, një bllokues efikas që nuk e rëndon procesorin dhe memorjen.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Më në fund, një bllokues efikas që nuk e rëndon procesorin dhe memorjen.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Paneli i kontrollit", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Paneli i kontrollit", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Parametrat", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Parametrat", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Filtrat nga palët e treta", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Filtrat nga palët e treta", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Filtrat e mi", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Filtrat e mi", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Rregullat e mia", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Rregullat e mia", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Lista e bardhë", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Lista e bardhë", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Regjistri i kërkesave", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Regjistri i kërkesave", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Info", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Info", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Parametra të avancuar", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Parametra të avancuar", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Kliko: uBlock₀ bëhet joaktiv\/aktiv te ky uebsajti.\n\nKliko+Ctrl: uBlock₀ bëhet joaktiv vetëm te kjo faqja.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Kliko: uBlock₀ bëhet joaktiv\/aktiv te ky uebsajti.\n\nKliko+Ctrl: uBlock₀ bëhet joaktiv vetëm te kjo faqja.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"kërkesa të refuzuara", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Çaktivizoj uBlock₀ te ky uebsajti.\n\nKlikimi+Ctrl do të çaktivizojë uBlock₀ vetëm te kjo faqja.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"te kjo faqja", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Aktivizoj uBlock₀ te ky uebsajti.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} ose {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "kërkesa të refuzuara", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"që prej instalimit", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "te kjo faqja", + "description": "English: on this page" }, - "popupOr":{ - "message":"ose", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} ose {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Hap panelin e kontrollit", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "që prej instalimit", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Asgjësuesi i elementeve", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "ose", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Përzgjedhësi i elementeve", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Hap panelin e kontrollit", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Regjistri i kërkesave", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Asgjësuesi i elementeve", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Bllokoj të gjitha dritaret automatike që hap kjo faqja", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Përzgjedhësi i elementeve", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Bllokoj elementet e mëdha mediatike te kjo faqja", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Regjistri i kërkesave", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Përdor filtrat kozmetikë te kjo faqja", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Bllokoj të gjitha dritaret automatike që hap faqja", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Bllokoj sistemin e shkronjave në linjë", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Bllokoj të gjitha dritaret automatike të faqes", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Rregullat globale: rregullat në këtë shtyllë aplikohen për të gjitha faqet.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Zhbllokoj të gjitha dritaret automatike të faqes", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Rregullat lokale: rregullat në këtë shtyllë aplikohen vetëm për këtë faqen.\nAto kanë më përparësi sesa rregullat globale.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Bllokoj elementet e mëdha mediatike te faqja", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Ruaj ndryshimet përherë.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Bllokoj elementet e mëdha mediatike te faqja", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Kthej ndryshimet.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Zbllokoj elementet e mëdha mediatike te faqja", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"të gjitha", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Përdor filtrat kozmetikë te faqja", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"figurat", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Çaktivizoj filtrat kozmetikë të faqes", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"palët e treta", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Aktivizoj filtrat kozmetikë të faqes", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/figurat nga palët e treta", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Bllokoj sistemin e shkronjave në linjë", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"skriptet e integruara", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Bllokoj sistemin e shkronjave në linjë", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"skriptet nga pala kryesore", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Zhbllokoj sistemin e shkronjave në linjë", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"skriptet nga palët e treta", - "description":"" + "popupTipGlobalRules": { + "message": "Rregullat globale: rregullat në këtë shtyllë aplikohen për të gjitha faqet.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"kuadrot nga palët e treta", - "description":"" + "popupTipLocalRules": { + "message": "Rregullat lokale: rregullat në këtë shtyllë aplikohen vetëm për këtë faqen dhe kanë përparësi mbi rregullat globale.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"faqe të kontaktuara", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Ruaj ndryshimet përherë.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} nga {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Kthej ndryshimet.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Krijoj", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "të gjitha", + "description": "" }, - "pickerPick":{ - "message":"Përzgjedh", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "figurat", + "description": "" }, - "pickerQuit":{ - "message":"Mbyll", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "palët e treta", + "description": "" }, - "pickerPreview":{ - "message":"Parashikoj", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css\/figurat nga palët e treta", + "description": "" }, - "pickerNetFilters":{ - "message":"Filtrat e rrjetit", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "skriptet e integruara", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Filtrat kozmetikë", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "skriptet nga pala kryesore", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Kliko, Kliko me Ctrl", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "skriptet nga palët e treta", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Bllokoj elementin", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "kuadrot nga palët e treta", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Fsheh treguesin e elementeve të bllokuara", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "faqe të kontaktuara", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Tregoj te ikona numrin e kërkesave të refuzuara", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} nga {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Çaktivizoj përshkrimet e shkurtra", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Krijoj", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Përdor menynë kontekstuale kur duhet", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Përzgjedh", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Përshtat ngjyrat për daltonikët", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Mbyll", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Aktivizoj renë informatike", - "description":"" + "pickerPreview": { + "message": "Parashikoj", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Kam njohuri të avancuara (Lexim i detyruar<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Filtrat e rrjetit", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"parametra të avancuar", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Filtrat kozmetikë", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Çaktivizoj kërkesat e parakohshme (për të evituar çdo lidhje me kërkesat e refuzuara)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Kliko, Kliko me Ctrl", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Çaktivizoj shqyrtimin e tejlidhjeve", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Bllokoj elementin", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Nuk lejoj WebRTC-në që të zbulojë adresat IP lokale", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Fsheh treguesin e elementeve të bllokuara", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Vlerat standarde", - "description":"" + "settingsIconBadgePrompt": { + "message": "Tregoj te ikona numrin e kërkesave të refuzuara", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Këto vlera bëhen të panevojshme, sipas rastit", - "description":"" + "settingsTooltipsPrompt": { + "message": "Çaktivizoj përshkrimet e shkurtra", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Çaktivizoj filtrat kozmetikë", - "description":"" + "settingsContextMenuPrompt": { + "message": "Përdor menynë kontekstuale kur duhet", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Bllokoj elementet mediatike më të mëdha se {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Përshtat ngjyrat për daltonikët", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Bllokoj sistemin e shkronjave në linjë", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Aktivizoj renë informatike", + "description": "" }, - "settingsStorageUsed":{ - "message":"Hapësira e përdorur: {{value}} bajt", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Kam njohuri të avancuara (Lexim i detyruar<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Rindërtimi i fundit:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "parametra të avancuar", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Kopja e fundit:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Çaktivizoj kërkesat e parakohshme (për të evituar çdo lidhje me kërkesat e refuzuara)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} filtra të rrjetit + {{cosmeticFilterCount}} filtra kozmetikë nga:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Çaktivizoj shqyrtimin e tejlidhjeve", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"përdor {{used}} nga {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Nuk lejoj WebRTC-në që të zbulojë adresat IP lokale", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Përditësoj filtrat automatikisht", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Vlerat standarde", + "description": "" }, - "3pUpdateNow":{ - "message":"Përditësoj tani", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Këto vlera bëhen të panevojshme, sipas rastit", + "description": "" }, - "3pPurgeAll":{ - "message":"Heq të gjitha stoqet", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Çaktivizoj filtrat kozmetikë", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Analizoj dhe zbatoj filtrat kozmetikë", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Bllokoj elementet mediatike më të mëdha se {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Aktivizimi i kësaj veçorie rrit impaktin e uBlock₀<\/i> te memorja e kompjuterit.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Bllokoj sistemin e shkronjave në linjë", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Nuk marr parasysh filtrat kozmetikë jospecifikë", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Bllokoj raportet e CSP-së", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Rekomandohet që ky opsion të aktivizohet për aparatet jo shumë të shpejta.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Hapësira e përdorur: {{value}} bajt", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Lista e hosteve të bllokuara", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Rindërtimi i fundit:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Ruaj ndryshimet", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Kopja e fundit:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklamat", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} filtra të rrjetit + {{cosmeticFilterCount}} filtra kozmetikë nga:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Privatësia", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "përdor {{used}} nga {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Domenet e dëmshme", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Përditësoj filtrat automatikisht", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Rrjetet sociale", - "description":"English: Social" + "3pUpdateNow": { + "message": "Përditësoj tani", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Për qëllime të ndryshme", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Heq të gjitha stoqet", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Sipas rajonit, gjuhës", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Analizoj dhe zbatoj filtrat kozmetikë", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Personalizoj", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Aktivizimi i kësaj veçorie rrit impaktin e uBlock₀<\/i> te memorja e kompjuterit.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Një URL për rresht. Nuk do të merren parasysh rreshtat që kanë si parashtesë ‘!’, sikundër adresat e pasakta.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Nuk marr parasysh filtrat kozmetikë jospecifikë", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"E vjetër.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Rekomandohet që ky opsion të aktivizohet për aparatet jo shumë të shpejta.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Përditësimi i fundit: {{ago}}.\nKlikoni për ta kryer vetë përditësimin.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Lista e hosteve të bllokuara", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Po përditësohet...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Ruaj ndryshimet", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Një problem me rrjetin pengoi përditësimin e informacionit.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklamat", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Një filtër për rresht. Filtri mund të jetë thjesht emri i një hosti ose t'i ngjasojë atyre që përdor Adblock Plus. Nuk do të merren parasysh rreshtat që kanë si parashtesë ‘!’.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Privatësia", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importoj dhe shtoj", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Domenet e dëmshme", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Eksportoj", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Elementet e bezdisshme", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Për qëllime të ndryshme", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Ruaj ndryshimet", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Sipas rajonit, gjuhës", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Rregulla të përhershme", - "description":"header" + "3pGroupCustom": { + "message": "Personalizoj", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Rregulla të përkohshme", - "description":"header" + "3pExternalListsHint": { + "message": "Një URL për rresht. Nuk do të merren parasysh rreshtat që fillojnë me ‘!’, sikundër adresat e pasakta.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Rikthej", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "E vjetër.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Aplikoj", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Përditësimi i fundit: {{ago}}.\nKlikoni për ta kryer vetë përditësimin.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Modifikoj", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Po përditësohet...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Ruaj", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Një problem me rrjetin pengoi përditësimin e informacionit.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Anuloj", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Një filtër për rresht. Filtri mund të jetë thjesht emri i një hosti ose t'i përngjajë atyre që përdor Adblock Plus. Nuk do të merren parasysh rreshtat që fillojnë me ‘!’.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importoj nga skedari...", - "description":"" + "1pImport": { + "message": "Importoj dhe shtoj", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Ruaj në skedar", - "description":"" + "1pExport": { + "message": "Eksportoj", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Lista e rregullave tuaja për filtrimin dinamik.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Ruaj ndryshimet", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Rregullat e sintaksës: burimi destinacioni lloji veprimi<\/code> (dokumentimi i plotë<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Rregulla të përhershme", + "description": "header" }, - "whitelistPrompt":{ - "message":"Lista e bardhë e detyron uBlock Origin që të mos veprojë në faqe të caktuara. Një element për rresht. Nuk do të merren parasysh udhëzimet e pasakta.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Rregulla të përkohshme", + "description": "header" }, - "whitelistImport":{ - "message":"Importoj dhe shtoj", - "description":"English: Import and append" + "rulesRevert": { + "message": "Rikthej", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Eksportoj", - "description":"English: Export" + "rulesCommit": { + "message": "Aplikoj", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Modifikoj", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Ruaj ndryshimet", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Ruaj", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Lloji", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Anuloj", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domeni", - "description":"English: Domain" + "rulesImport": { + "message": "Importoj nga skedari...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Ruaj në skedar", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filtri", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Të gjitha", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Lista e rregullave tuaja për filtrimin dinamik.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Në prapaskenë", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Rregullat e sintaksës: burimi destinacioni lloji veprimi<\/code> (dokumentimi i plotë<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtroni elementet në regjistër", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Lista e bardhë e detyron uBlock Origin të mos veprojë në faqe të caktuara. Një element për rresht. Nuk do të merren parasysh udhëzimet e pasakta.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Numri maksimal i elementeve në regjistër", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importoj dhe shtoj", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Konteksti:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Eksportoj", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Lloji:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Filtrimi dinamik i adresave", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Ruaj ndryshimet", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Filtrimi statik", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Lloji", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} kërkesat e {{type}} {{br}}adresa e të cilave korrespondon me {{url}} {{br}}dhe që e kanë origjinën {{origin}},{{br}}{{importance}} ekziston një filtër përjashtues i ngjashëm.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domeni", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Bllokoj", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Lejoj", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filtri", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"llojit “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Të gjitha", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"çdo lloji", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Në prapaskenë", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"nga “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtroni elementet në regjistër", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"ngado", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Numri maksimal i elementeve në regjistër", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"përveçse kur", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Konteksti:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"edhe kur", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Lloji:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Filtri statik {{filter}} gjendet në:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Filtrimi dinamik i adresave", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Ditari i ndryshimeve", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Filtrimi statik", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Dokumentimi", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} kërkesat e {{type}} {{br}}adresa e të cilave korrespondon me {{url}} {{br}}dhe që e kanë origjinën {{origin}},{{br}}{{importance}} ekziston një filtër përjashtues i ngjashëm.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Mbështetja teknike", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Bllokoj", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Materiali burimor (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Lejoj", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Kontributorët", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "llojit “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Kopjoj në skedar", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "çdo lloji", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "nga “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Rindërtoj sipas skedarit...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "ngado", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Kthej parametrat e mëparshëm...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "përveçse kur", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Të gjithë parametrat do të mbishkruhen me të dhënat e kopjuara më {{time}}, dhe uBlock₀ do të hapet përsëri.\n\nDo i mbishkruani parametrat aktualë?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "edhe kur", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Të dhënat nuk lexohen ose mund të jenë dëmtuar", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Filtri statik {{filter}} gjendet në:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Të gjithë parametrat do të fshihen dhe uBlock₀ do të hapet përsëri.\n\nDo i ktheni parametrat origjinalë?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Ditari i ndryshimeve", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Problem me rrjetin: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Dokumentimi", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Do e shtoni këtë adresën në listën e filtrave tuaj?\n\nTitulli: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Mbështetja teknike", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"një minutë më parë", - "description":"English: a minute ago" + "aboutCode": { + "message": "Materiali burimor (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuta më parë", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Kontributorët", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"një orë më parë", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Kopjoj në skedar", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} orë më parë", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"një ditë më parë", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Rindërtoj sipas skedarit...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} ditë më parë", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Kthej parametrat e mëparshëm...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Paneli i kontrollit", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Të gjithë parametrat do të mbishkruhen me të dhënat e kopjuara më {{time}}, dhe uBlock₀ do të hapet përsëri.\n\nDo i mbishkruani parametrat aktualë?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Regjistri i kërkesave", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Të dhënat nuk lexohen ose mund të jenë dëmtuar", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"fikur", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Të gjithë parametrat do të fshihen dhe uBlock₀ do të hapet përsëri.\n\nDo i ktheni parametrat origjinalë?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin po pengon hapjen e faqes:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Problem me rrjetin: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Për shkak të filtrit", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Do e shtoni këtë adresën në listën e filtrave tuaj?\n\nTitulli: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"pa parametra", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "një minutë më parë", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Gjendet në:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minuta më parë", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Kthehem", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "një orë më parë", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Mbyll dritaren", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} orë më parë", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Zhbllokoj mënyrën strikte për {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "një ditë më parë", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Përkohësisht", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} ditë më parë", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Gjithmonë", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Paneli i kontrollit", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Eksportoj në renë informatike", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Regjistri i kërkesave", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importoj nga reja informatike", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "fikur", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importoj nga reja informatike dhe bashkoj me parametrat aktualë", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin po pengon hapjen e faqes:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Për shkak të filtrit", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Emri i aparatit:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "pa parametra", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Kujdes! Përgjegjësia për ndryshimin e këtyre parametrave bie mbi ju.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Gjendet në:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Parashtroj", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Kthehem", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Ruaj ndryshimet", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Mbyll dritaren", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Rikthej", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Zhbllokoj mënyrën strikte për {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"bajt", - "description":"" + "docblockedDisableTemporary": { + "message": "Përkohësisht", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Lejoj përkohësisht elementet me përmasa të mëdha", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Gjithmonë", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Eksportoj në renë informatike", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importoj nga reja informatike", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importoj nga reja informatike dhe bashkoj me parametrat aktualë", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Emri i aparatit:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Kujdes! Përgjegjësia për ndryshimin e këtyre parametrave bie mbi ju.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Parashtroj", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Ruaj ndryshimet", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Rikthej", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "bajt", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Lejoj përkohësisht elementet me përmasa të mëdha", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/sr/messages.json b/src/_locales/sr/messages.json index 17bc77e07dfab..08add989bab32 100644 --- a/src/_locales/sr/messages.json +++ b/src/_locales/sr/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Коначно, ефикасан блокатор. Ниски процесорски и меморијски захтеви.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Коначно, ефикасан блокатор. Ниски процесорски и меморијски захтеви.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Контролна табла", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Контролна табла", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Подешавања", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Подешавања", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Додатни филтери", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Додатни филтери", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Моји филтери", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Моји филтери", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Моја правила", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Моја правила", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Дозвољени домени", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Дозвољени домени", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Евиденција", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Евиденција", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"О програму", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "О програму", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Напредна подешавања", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Напредна подешавања", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Клик: онемогући\/омогући µBlock₀ за овај сајт.\n\nCtrl+клик: онемогући\/омогући µBlock₀ само за ову страницу.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Клик: онемогући\/омогући µBlock₀ за овај сајт.\n\nCtrl+клик: онемогући\/омогући µBlock₀ само за ову страницу.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"блокирани захтеви", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Кликните да бисте онемогућили µBlock₀ за овај сајт.\n\nCtrl+клик да бисте онемогућили µBlock₀ само на овој страници.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"на овој страници", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Кликните да бисте омогућили µBlock₀ за овај сајт.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} или {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "блокирани захтеви", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"од инсталације", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "на овој страници", + "description": "English: on this page" }, - "popupOr":{ - "message":"или", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} или {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Отвори контролну таблу", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "од инсталације", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Ући у режим уклањања елемената", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "или", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Ући у режим избора елемената", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Отвори контролну таблу", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Отвори евиденцију", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Ући у режим уклањања елемената", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Укључи\/искључи блокирање свих искачућих прозора за овај сајт", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Ући у режим избора елемената", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Укључи\/искључи блокирање великих мултимедијалних елемената за овај сајт", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Отвори евиденцију", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Укључи\/искључи естетско филтрирање за овај сајт", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Укључи\/искључи блокирање свих искачућих прозора за овај сајт", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Укључи\/искључи блокирање спољних фонтова за овај сајт", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Кликните за блокирање свих искачућих прозора на овом сајту", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Општа правила: ова колона је за правила која се примењују на свим сајтовима.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Кликните да бисте зауставили блокирање свих искачућих прозора на овом сајту", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Локална правила: ова колона је за правила која се примењују само на тренутном сајту.\nЛокална правила имају предност у односу на општа.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Укључи\/искључи блокирање великих мултимедијалних елемената за овај сајт", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Кликните да бисте измене учинили трајним.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Кликните за блокирање великих мултимедијалних елемената на овом сајту", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Кликните да бисте вратили измене.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Кликните да бисте зауставили блокирање великих мултимедијалних елемената на овом сајту", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"све", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Укључи\/искључи естетско филтрирање за овај сајт", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"слике", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Кликните да бисте онемогућили естетско филтрирање на овом сајту", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"треће стране", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Кликните да бисте омогућили естетско филтрирање на овом сајту", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"Css\/слике трећих страна", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Укључи\/искључи блокирање удаљених фонтова за овај сајт", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"уметнуте скрипте", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Кликните за блокирање удаљених фонтова на овом сајту", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Корисничке скрипте", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Кликните да бисте зауставили блокирање удаљених фонтова на овом сајту", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"Скрипте трећих страна", - "description":"" + "popupTipGlobalRules": { + "message": "Општа правила: ова колона је за правила која се примењују на свим сајтовима.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Оквири трећих страна", - "description":"" + "popupTipLocalRules": { + "message": "Локална правила: ова колона је за правила која се примењују само на тренутном сајту.\nЛокална правила имају предност у односу на општа.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"повезани домени", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Кликните да бисте промене учинили трајним.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} од {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Кликните да бисте вратили промене.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Креирај", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "све", + "description": "" }, - "pickerPick":{ - "message":"Изабери", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "слике", + "description": "" }, - "pickerQuit":{ - "message":"Изађи", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "треће стране", + "description": "" }, - "pickerPreview":{ - "message":"Преглед", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "Css\/слике трећих страна", + "description": "" }, - "pickerNetFilters":{ - "message":"Мрежни филтери", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "уметнуте скрипте", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Естетски филтери", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Корисничке скрипте", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Клик, Ctrl-клик", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "Скрипте трећих страна", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Блокирај елемент", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Оквири трећих страна", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Сакриј држаче блокираних елемената", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "повезани домени", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Прикажи број блокираних захтева на иконици", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} од {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Онемогући описе алатке", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Креирај", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Користи контекстни мени где је прикладно", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Изабери", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Мод за далтонисте", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Изађи", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Укључи подршку за складиште у облаку", - "description":"" + "pickerPreview": { + "message": "Преглед", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Ја сам напредни корисник (обавезна литература<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Мрежни филтери", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"напредна подешавања", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Естетски филтери", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Онемогући оптимизацију учитавања (да би се спречила свака веза блокираних мрежних захтева)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Клик, Ctrl-клик", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Онемогући проверавање хиперлинкова", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Блокирај елемент", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Спречи WebRTC да пропушта локалну IP адресу", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Сакриј држаче блокираних елемената", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Подразумевано понашање", - "description":"" + "settingsIconBadgePrompt": { + "message": "Прикажи број блокираних захтева на иконици", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Ова подразумевана понашања могу бити поништена за појединачне веб сајтове", - "description":"" + "settingsTooltipsPrompt": { + "message": "Онемогући описе алатке", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Онемогући естетско филтрирање", - "description":"" + "settingsContextMenuPrompt": { + "message": "Користи контекстни мени где је прикладно", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Блокирај мултимедијалне елементе веће од {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Мод за далтонисте", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Блокирај удаљене фонтове", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Укључи подршку за складиште у облаку", + "description": "" }, - "settingsStorageUsed":{ - "message":"Искоришћеност складишта: {{value}} бајтова", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Ја сам напредни корисник (обавезна литература<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Последње враћање:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "напредна подешавања", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Последња резервна копија:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Онемогући оптимизацију учитавања (да би се спречила свака веза блокираних мрежних захтева)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"мрежних филтера: {{netFilterCount}} + естетских филтера: {{cosmeticFilterCount}} из:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Онемогући проверавање хиперлинкова", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} искоришћено од {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Спречи WebRTC да пропушта локалну IP адресу", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Аутоматско ажурирање листе филтера", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Подразумевано понашање", + "description": "" }, - "3pUpdateNow":{ - "message":"Ажурирај сада", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Ова подразумевана понашања могу бити поништена за појединачне веб сајтове", + "description": "" }, - "3pPurgeAll":{ - "message":"Очисти сав кеш", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Онемогући естетско филтрирање", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Рашчлани и примени естетске филтере.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Блокирај мултимедијалне елементе веће од {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Омогућавањем ове функције повећава се количина меморије коју uBlock₀ користи.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Блокирај удаљене фонтове", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Игнориши опште естетске филтере.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Блокирај CSP извештаје", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Препоручује се да се ова опција омогући на мање моћним уређајима.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Искоришћеност складишта: {{value}} бајтова", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Списак блокираних хостова", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Последње враћање:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Примени измене", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Последња резервна копија:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Рекламе", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "мрежних филтера: {{netFilterCount}} + естетских филтера: {{cosmeticFilterCount}} из:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Приватност", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} искоришћено од {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Злонамерни домени", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Аутоматско ажурирање листе филтера", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Друштвени", - "description":"English: Social" + "3pUpdateNow": { + "message": "Ажурирај сада", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Вишенаменски", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Очисти сав кеш", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Регионални, језички", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Рашчлани и примени естетске филтере.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Прилагођени", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Омогућавањем ове функције повећава се количина меморије коју uBlock₀ користи.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Једна адреса по реду. Редови са префиксом ‘!’ ће бити игнорисани. Неисправне адресе ће бити тихо игнорисане.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Игнориши опште естетске филтере.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Застарело.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Препоручује се да се ова опција омогући на мање моћним уређајима.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Последње ажурирање: {{ago}}.\nКликните да бисте ажурирали.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Списак блокираних хостова", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Ажурирање...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Примени промене", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Грешка на мрежи је спречила ажурирање ресурса.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Рекламе", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Један филтер по реду. Филтер може бити назив хоста или филтер компатибилан са Adblock Plus форматом. Редови са префиксом ‘!’ ће бити игнорисани.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Приватност", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Увези и додај", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Злонамерни домени", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Извези", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Сметње", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"моји-ublock-филтери_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Вишенаменски", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Примени измене", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Регионални, језички", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Стална правила", - "description":"header" + "3pGroupCustom": { + "message": "Прилагођени", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Привремена правила", - "description":"header" + "3pExternalListsHint": { + "message": "Једна адреса по реду. Редови са префиксом ‘!’ ће бити игнорисани. Неисправне адресе ће бити тихо игнорисане.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Врати", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Застарело.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Потврди", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Последње ажурирање: {{ago}}.\nКликните да бисте ажурирали.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Уреди", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Ажурирање...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Сачувај", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Грешка на мрежи је спречила ажурирање ресурса.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Одбаци", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Један филтер по реду. Филтер може бити назив хоста или филтер компатибилан са Adblock Plus форматом. Редови са префиксом ‘!’ ће бити игнорисани.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Увези из датотеке...", - "description":"" + "1pImport": { + "message": "Увези и додај", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Извези у датотеку...", - "description":"" + "1pExport": { + "message": "Извези", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"моја-ublock-динамичка-правила_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "моји-ublock-филтери_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Списак правила за динамичко филтрирање.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Примени промене", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Правила синтаксе: извор одредиште тип акција<\/code>(сва документација<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Стална правила", + "description": "header" }, - "whitelistPrompt":{ - "message":"Смернице дозвољених домена диктирају на којим веб страницама би uBlock Origin требало бити онемогућен. Један унос по реду. Неисправне смернице ће бити тихо занемарене.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Привремена правила", + "description": "header" }, - "whitelistImport":{ - "message":"Увези и додај", - "description":"English: Import and append" + "rulesRevert": { + "message": "Врати", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Извези", - "description":"English: Export" + "rulesCommit": { + "message": "Потврди", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"моја-ublock-листа_дозвољених_домена{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Уреди", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Примени измене", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Сачувај", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Тип", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Одбаци", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Домен", - "description":"English: Domain" + "rulesImport": { + "message": "Увези из датотеке...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Извези у датотеку...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Филтер", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "моја-ublock-динамичка-правила_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Све", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Списак правила за динамичко филтрирање.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Иза сцене", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Правила синтаксе: извор одредиште тип акција<\/code>(сва документација<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"филтрирај уносе дневника", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Смернице дозвољених домена диктирају на којим веб страницама би uBlock Origin требало бити онемогућен. Један унос по реду. Неисправне смернице ће бити тихо занемарене.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Највише уноса дневника", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Увези и додај", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Контекст:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Извези", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Тип:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "моја-ublock-листа_дозвољених_домена{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Динамичко филтрирање УРЛ-а", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Примени промене", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Статичко филтрирање", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Тип", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} мрежни захтев {{type}} {{br}} чија УРЛ адреса одговара {{url}} {{br}} и која долази од {{origin}},{{br}} {{importance}} постоји одговарајући филтер изузетак.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Домен", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Блокирај", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Дозволи", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Филтер", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"тип “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Све", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"сваки тип", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Иза сцене", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"од “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "филтрирај уносе дневника", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"било одакле", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Највише уноса дневника", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"осим кад", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Контекст:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"чак иако", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Тип:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Статички филтер {{filter}} пронађен у:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Динамичко филтрирање УРЛ-а", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Дневник измена", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Статичко филтрирање", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Вики", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} мрежни захтев {{type}} {{br}} чија УРЛ адреса одговара {{url}} {{br}} и која долази од {{origin}},{{br}} {{importance}} постоји одговарајући филтер изузетак.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Подршка", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Блокирај", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Изворни код (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Дозволи", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Сарадници", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "тип “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Сачувај резервну копију у датотеку", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "сваки тип", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "од “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Врати из датотеке...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "било одакле", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Врати на подразумевана подешавања...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "осим кад", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Сва ваша подешавања ће бити прегажена резервном копијом података сачуваним {{time}} и uBlock₀ ће се поново покренути.\n\nПрегазити сва постојећа подешавања резервном копијом података?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "чак иако", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Подаци се не могу прочитати или су неисправни", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Статички филтер {{filter}} пронађен у:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Сва ваша подешавања ће бити обрисана и µBlock ће се поново покренути.\n\nВрати µBlock на првобитна подешавања?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Евиденција промена", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Грешка на мрежи: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Вики", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Додати следећу УРЛ адресу у вашу прилагођену листу филтера?\n\nНазив: \"{{title}}\"\nУРЛ: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Подршка", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"пре један минут", - "description":"English: a minute ago" + "aboutCode": { + "message": "Изворни код (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"пре {{value}} минута", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Сарадници", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"пре један сат", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Сачувај резервну копију у датотеку", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"пре {{value}} сата\/и", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"пре један дан", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Врати из датотеке...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"пре {{value}} дана", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Врати на подразумевана подешавања...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Прикажи контролну таблу", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Сва ваша подешавања ће бити прегажена резервном копијом података сачуваним {{time}} и uBlock₀ ће се поново покренути.\n\nПрегазити сва постојећа подешавања резервном копијом података?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Прикажи евиденцију мрежних захтева", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Подаци се не могу прочитати или су неисправни", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"искључен", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Сва ваша подешавања ће бити обрисана и µBlock ће се поново покренути.\n\nВрати µBlock на првобитна подешавања?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin је спречио учитавање следеће странице:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Грешка на мрежи: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"због следећег филтера", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Додати следећу УРЛ адресу у вашу прилагођену листу филтера?\n\nНазив: \"{{title}}\"\nУРЛ: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"без параметара", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "пре један минут", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Пронађен у:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "пре {{value}} минута", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Иди назад", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "пре један сат", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Затвори овај прозор", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "пре {{value}} сата\/и", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Искључи строго блокирање за {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "пре један дан", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Привремено", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "пре {{value}} дана", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Трајно", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Прикажи контролну таблу", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Извези у складиште у облаку", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Прикажи евиденцију мрежних захтева", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Увези из складишта у облаку", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "искључен", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Увези из складишта у облаку и споји са тренутним подешавањима", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin је спречио учитавање следеће странице:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "због следећег филтера", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Назив овог уређаја:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "без параметара", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Упозорење! Мењате ова напредна подешавања на сопствени ризик.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Пронађен у:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Пошаљи", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Иди назад", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Примени измене", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Затвори овај прозор", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Врати", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Искључи строго блокирање за {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"бајтови", - "description":"" + "docblockedDisableTemporary": { + "message": "Привремено", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Привремено дозволи велике мултимедијалне елементе", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Трајно", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Извези у складиште у облаку", + "description": "tooltip" + }, + "cloudPull": { + "message": "Увези из складишта у облаку", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Увези из складишта у облаку и споји са тренутним подешавањима", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Назив овог уређаја:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Упозорење! Мењате ова напредна подешавања на сопствени ризик.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Пошаљи", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Примени промене", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Врати", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "бајтови", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Привремено дозволи велике мултимедијалне елементе", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/sv/messages.json b/src/_locales/sv/messages.json index b5e8558f24cf5..6861d3929e06a 100644 --- a/src/_locales/sv/messages.json +++ b/src/_locales/sv/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Äntligen, en effektiv blockerare. Lätt på processor och minne.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Äntligen en effektiv blockerare. Snäll mot både processor och minne.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Kontrollpanel", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Kontrollpanel", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Inställningar", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Inställningar", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Tredjepartsfilter", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Tredjepartsfilter", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Mina filter", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Mina filter", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Mina regler", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Mina regler", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Vitlista", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Vitlista", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Logg för nätverksbegäran", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Logg för nätverksbegäran", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Om", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Om", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Avancerade inställningar", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Avancerade inställningar", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Klick: avaktivera\/aktivera uBlock₀ för denna hemsida permanent.\n\nCtrl+klick: avaktivera uBlock₀ endast för denna sida.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Klick: avaktivera\/aktivera uBlock₀ för denna hemsida permanent.\n\nCtrl+klick: avaktivera uBlock₀ endast för denna sida.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"blockerade förfrågningar", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Klicka för att inaktivera uBlock₀ för den här webbplatsen.\n\nCtrl + klicka för att inaktivera uBlock₀ för enbart den här sidan.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"på denna sida", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Klicka för att aktivera uBlock₀ för den här webbplatsen.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} eller {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "blockerade förfrågningar", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"sedan installation", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "på denna sida", + "description": "English: on this page" }, - "popupOr":{ - "message":"eller", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} eller {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Öppna kontrollpanelen", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "sedan installation", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Gå till element zapper-läge", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "eller", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Gå till elementväljarläge", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Öppna kontrollpanelen", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Öppna loggen", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Gå till element zapper-läge", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Växla blockering av popup-fönster för denna sida", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Gå till elementväljarläge", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Växla blockering av stora medieelement för denna sida", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Öppna loggen", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Växla kosmetiska filter för denna sida", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Växla blockering av popup-fönster för denna sida", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Växla blockering för hämtning av typsnitt på sidan", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Klicka för att blockera alla popup-fönster på denna sida", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Globala regler: denna kolumn avser regler som gäller alla sidor.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Klicka för att inte längre blockera alla popup-fönster på den här webbplatsen", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Lokala regler: denna kolumn avser regler som endast gäller denna sida.\nLokala regler överskrider globala regler.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Växla blockering av stora medieelement för denna sida", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Klicka för att göra ändringarna permanenta.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Klicka för att blockera stora medieelement på den här webbplatsen", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Klicka för att ångra dina ändringar.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Klicka för att inte längre blockera stora medieelement på den här webbplatsen", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"alla", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Växla kosmetiska filter för denna sida", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"bilder", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Klicka för att inaktivera kosmetiska filter för den här webbplatsen", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"Tredjepart", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Klicka för att aktivera kosmetisk filtrering på denna sida", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"Tredjeparts-css\/bilder", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Växla blockering för hämtning av typsnitt på sidan", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"inline skript", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Klicka för att blockera externa typsnitt på den här webbplatsen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"förstapartskript", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Klicka för att inte längre blockera externa typsnitt på den här webbplatsen", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"tredjepartsskript", - "description":"" + "popupTipGlobalRules": { + "message": "Globala regler: denna kolumn avser regler som gäller alla sidor.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"tredjepartsramar", - "description":"" + "popupTipLocalRules": { + "message": "Lokala regler: denna kolumn avser regler som endast gäller denna sida.\nLokala regler överskrider globala regler.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"anslutna domäner", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Klicka för att göra ändringarna permanenta.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} av {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Klicka för att ångra dina ändringar.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Skapa", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "alla", + "description": "" }, - "pickerPick":{ - "message":"Välj", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "bilder", + "description": "" }, - "pickerQuit":{ - "message":"Avsluta", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "Tredjepart", + "description": "" }, - "pickerPreview":{ - "message":"Förhandsgranska", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "Tredjeparts-css\/bilder", + "description": "" }, - "pickerNetFilters":{ - "message":"Nätfilter", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "inline skript", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kosmetiska filter", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "förstapartskript", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Klick, Ctrl-klick", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "tredjepartsskript", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Blockera element", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "tredjepartsramar", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Dölj platshållare för blockerade element", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "anslutna domäner", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Visa antalet blockerade förfrågningar på ikonen", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} av {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Avaktivera verktygstips", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Skapa", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Utnyttja kontextmenyn där så är lämpligt", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Välj", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Färgblindsanpassat", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Avsluta", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Aktivera stöd för molnlagring", - "description":"" + "pickerPreview": { + "message": "Förhandsgranska", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Jag är en avancerad användare (obligatorisk läsning<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Nätfilter", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"avancerade inställningar", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kosmetiska filter", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Avaktivera förhandshämtning (för att förhindra anslutningar av blockerade förfrågningar)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Klick, Ctrl-klick", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Avaktivera hyperlänksrevidering", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Blockera element", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Förhindra WebRTC från att läcka lokala IP-adresser", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Dölj platshållare för blockerade element", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Standardbeteende", - "description":"" + "settingsIconBadgePrompt": { + "message": "Visa antalet blockerade förfrågningar på ikonen", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Dessa förinställda beteenden kan överskridas för varje sida", - "description":"" + "settingsTooltipsPrompt": { + "message": "Avaktivera verktygstips", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Avaktivera kosmetisk filtrering", - "description":"" + "settingsContextMenuPrompt": { + "message": "Utnyttja kontextmenyn där så är lämpligt", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Blockera medieelement större än {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Färgblindsanpassat", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Blockera externa typsnitt", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Aktivera stöd för molnlagring", + "description": "" }, - "settingsStorageUsed":{ - "message":"Använt utrymme: {{value}} bytes", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Jag är en avancerad användare (obligatorisk läsning<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Senast återställd:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "avancerade inställningar", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Senaste säkerhetskopia:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Avaktivera förhandshämtning (för att förhindra anslutningar av blockerade förfrågningar)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} nätverksfilter + {{cosmeticFilterCount}} kosmetiska filter från:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Avaktivera hyperlänksrevidering", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{used}} använda av {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Förhindra WebRTC från att läcka lokala IP-adresser", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Uppdatera filterlistor automatiskt.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Standardbeteende", + "description": "" }, - "3pUpdateNow":{ - "message":"Uppdatera nu", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Dessa förinställda beteenden kan överskridas för varje sida", + "description": "" }, - "3pPurgeAll":{ - "message":"Rensa all cache", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Avaktivera kosmetisk filtrering", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Tolka och applicera kosmetiska filter.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Blockera medieelement större än {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Genom att aktivera denna funktion ökar uBlock₀s minnesanvändning.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Blockera externa typsnitt", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ignorera allmänna kosmetiska filter", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Blockera CSP-rapporter", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Det rekommenderas att du aktiverar inställningen på mindre kraftfulla enheter.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Använt utrymme: {{value}} bytes", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Listor över blockerade värdar", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Senast återställd:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Verkställ ändringar", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Senaste säkerhetskopia:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Annonser", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} nätverksfilter + {{cosmeticFilterCount}} kosmetiska filter från:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Sekretess", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{used}} använda av {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Malware", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Uppdatera filterlistor automatiskt.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Socialt", - "description":"English: Social" + "3pUpdateNow": { + "message": "Uppdatera nu", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Universalfilter", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Rensa all cache", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Regioner, språk", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Tolka och applicera kosmetiska filter.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Egna filter", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Genom att aktivera denna funktion ökar uBlock₀s minnesanvändning.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"En adress per rad. Rader med prefixet ‘!’ kommer att ignoreras. Ogiltiga adresser kommer också ignoreras.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ignorera allmänna kosmetiska filter", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Föråldrad.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

Även om de hanteras effektivt av uBlock₀ så kan generiska kosmetiska filter bidra till en högre minnes- och processoranvändning på vissa webbplatser, särskilt stora och långlivade.

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

Det rekommenderas att du aktiverar denna inställning på mindre kraftfulla enheter.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Senast uppdaterad: {{ago}}\nTryck för att påtvinga en uppdatering.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Listor över blockerade värdar", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Uppdaterar...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Verkställ ändringar", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Ett nätverksproblem har förhindrat resursen från att uppdateras.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Annonser", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Ett filter per rad. Ett filter kan vara ett vanligt värdnamn eller ett Adblock Plus-kompatibelt filter. Rader med prefixet ‘!’ kommer att ignoreras.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Sekretess", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Importera och lägg till", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Malware", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Exportera", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Störande objekt", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"mina-ublock-statiska-filter_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Universalfilter", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Verkställ ändringar", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Regioner, språk", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Permanenta regler", - "description":"header" + "3pGroupCustom": { + "message": "Egna filter", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Temporära regler", - "description":"header" + "3pExternalListsHint": { + "message": "En adress per rad. Rader med prefixet ‘!’ kommer att ignoreras. Ogiltiga adresser kommer också ignoreras.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Ångra", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Föråldrad.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Skicka", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Senast uppdaterad: {{ago}}\nTryck för att påtvinga en uppdatering.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Redigera", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Uppdaterar...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Spara", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Ett nätverksproblem har förhindrat resursen från att uppdateras.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Förkasta", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Ett filter per rad. Ett filter kan vara ett vanligt värdnamn eller ett Adblock Plus-kompatibelt filter. Rader med prefixet ‘!’ kommer att ignoreras.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Importera från fil", - "description":"" + "1pImport": { + "message": "Importera och lägg till", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Exportera till fil", - "description":"" + "1pExport": { + "message": "Exportera", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"mina-ublock-dynamiska-regler_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "mina-ublock-statiska-filter_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Lista över dina dynamiska filterregler.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Verkställ ändringar", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Regelsyntax: källa destination typ åtgärd<\/code> (full dokumentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Permanenta regler", + "description": "header" }, - "whitelistPrompt":{ - "message":"Vitlistans direktiv dikterar på vilka webbsidor uBlock Origin ska avaktiveras. En post per rad. Ogiltiga direktiv kommer tyst att ignoreras och kommenteras ut.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Temporära regler", + "description": "header" }, - "whitelistImport":{ - "message":"Importera och lägg till", - "description":"English: Import and append" + "rulesRevert": { + "message": "Ångra", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Exportera", - "description":"English: Export" + "rulesCommit": { + "message": "Skicka", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"min-ublock-vitlista_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Redigera", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Verkställ ändringar", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Spara", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Typ", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Förkasta", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Domän", - "description":"English: Domain" + "rulesImport": { + "message": "Importera från fil", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Exportera till fil", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Filter", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "mina-ublock-dynamiska-regler_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Alla", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Lista över dina dynamiska filterregler.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Under huven", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Regelsyntax: källa destination typ åtgärd<\/code> (full dokumentation<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"filtrera loggposter", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Vitlistans direktiv dikterar på vilka webbplatser uBlock Origin ska inaktiveras. En post per rad. Ogiltiga direktiv kommer tyst att ignoreras och kommenteras ut.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maximalt antal loggposter", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Importera och lägg till", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Sammanhang:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Exportera", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Typ:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "min-ublock-vitlista_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dynamisk adressfiltrering", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Verkställ ändringar", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statisk filtrering", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Typ", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} nätverksförfrågningar av {{type}} {{br}}vilkas URL matchar {{url}} {{br}}och som kommer {{origin}},{{br}}{{importance}} det finns ett matchande undantagsfilter.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Domän", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Blockera", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Tillåt", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Filter", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"typ \"{{type}}\"", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Alla", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"alla typer", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Under huven", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"från \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "filtrera loggposter", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"var som helst", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maximalt antal loggposter", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"utom när", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Sammanhang:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"även om", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Typ:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Det statiska filtret {{filter}} hittades i:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dynamisk adressfiltrering", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Ändringslogg", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statisk filtrering", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} nätverksförfrågningar av {{type}} {{br}}vilkas URL matchar {{url}} {{br}}och som kommer {{origin}},{{br}}{{importance}} det finns ett matchande undantagsfilter.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Hjälp", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Blockera", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Källkod (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Tillåt", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Bidragsgivare", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "typ \"{{type}}\"", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Säkerhetskopiera till fil", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "alla typer", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"min-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "från \"{{origin}}\"", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Återställ från fil", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "var som helst", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Återställ fabriksinställningar", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "utom när", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Alla dina inställningar kommer att skrivas över med data som har säkerhetskopierats {{time}} och uBlock₀ kommer att starta om.\n\nVill du skriva över befintliga inställningar med säkerhetskopierad data?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "även om", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Datan gick inte att läsa eller är ogiltig", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Det statiska filtret {{filter}} hittades i:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Alla dina inställningar kommer att raderas, och uBlock₀ kommer att starta om.\n\nÅterställ uBlock₀ till fabriksinställningar?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Ändringslogg", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Nätverksfel: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Lägg till följande URL till din skräddarsydda filterlista?\n\nTitel: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Hjälp", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"en minut sedan", - "description":"English: a minute ago" + "aboutCode": { + "message": "Källkod (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} minuter sedan", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Bidragsgivare", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"en timme sedan", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Säkerhetskopiera till fil", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} timmar sedan", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "min-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"en dag sen", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Återställ från fil", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} dagar sen", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Återställ fabriksinställningar", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Visa kontrollpanel", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Alla dina inställningar kommer att skrivas över med data som har säkerhetskopierats {{time}} och uBlock₀ kommer att starta om.\n\nVill du skriva över befintliga inställningar med säkerhetskopierad data?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Visa nätverksbegäranslogg", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Datan gick inte att läsa eller är ogiltig", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"av", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Alla dina inställningar kommer att raderas, och uBlock₀ kommer att starta om.\n\nÅterställ uBlock₀ till fabriksinställningar?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin har förhindrat följande sida från att ladda:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Nätverksfel: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"P.g.a. följande filter", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Lägg till följande URL till din skräddarsydda filterlista?\n\nTitel: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"utan parametrar", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "en minut sedan", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Hittades i:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} minuter sedan", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Gå tillbaka", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "en timme sedan", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Stäng detta fönster", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} timmar sedan", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Avaktivera strikt blockering av {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "en dag sen", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Temporärt", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} dagar sen", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Permanent", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Visa kontrollpanel", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Exportera till molnlagring", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Visa nätverksbegäranslogg", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Importera från molnlagring", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "av", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Importera från molnlagring och slå ihop med aktuella inställningar", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin har förhindrat följande sida från att ladda:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "P.g.a. följande filter", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Enhetens namn:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "utan parametrar", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Varning! Ändra dessa avancerade inställningar på egen risk.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Hittades i:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Skicka", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Gå tillbaka", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Verkställ ändringar", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Stäng detta fönster", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Ångra", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Avaktivera strikt blockering av {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"byte", - "description":"" + "docblockedDisableTemporary": { + "message": "Temporärt", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Tillåt tillfälligt stora medieelement", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Permanent", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Exportera till molnlagring", + "description": "tooltip" + }, + "cloudPull": { + "message": "Importera från molnlagring", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Importera från molnlagring och slå ihop med aktuella inställningar", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Enhetens namn:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Varning! Ändra dessa avancerade inställningar på egen risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Skicka", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Verkställ ändringar", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Ångra", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Tillåt tillfälligt stora medieelement", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/ta/messages.json b/src/_locales/ta/messages.json index be253fb627954..f03bda05bd428 100644 --- a/src/_locales/ta/messages.json +++ b/src/_locales/ta/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"இறுதியாக, ஒரு திறமையான விளம்பரத் தடுப்பான். கணினியின் மையச் செயற்பகுதியின் மேலும் நினைவகத்தின் மேலும் இலகுவானது.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "இறுதியாக, ஒரு திறமையான விளம்பரத் தடுப்பான். கணினியின் மையச் செயற்பகுதியின் மேலும் நினைவகத்தின் மேலும் இலகுவானது.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ - நிர்வாக மையம்", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ - நிர்வாக மையம்", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"அமைப்புகள்", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "அமைப்புகள்", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"மூன்றாம் தரப்பு வடிகட்டிகள்", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "மூன்றாம் தரப்பு வடிகட்டிகள்", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"என் வடிகட்டிகள்", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "என் வடிகட்டிகள்", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"என் விதிமுறைகள்", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "என் விதிமுறைகள்", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"அனுமதிப்பட்டியல்", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "அனுமதிப்பட்டியல்", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — பிணையக் கோரிக்கைப் பதிகை", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — பிணையக் கோரிக்கைப் பதிகை", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"எம்மைப் பற்றி", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "எம்மைப் பற்றி", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Advanced settings", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Advanced settings", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"இந்த தளத்தில் ‍‍‍uBlock₀ ஐ முடக்கவோ\/இயக்கவோ: இங்கே சுட்டு.\nCtrl+click: என்ற குறுக்குவிசையின் மூலம் uBlock₀ ஐ இந்தப் பக்கத்தில் மட்டும் முடக்கு.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "இந்த தளத்தில் ‍‍‍uBlock₀ ஐ முடக்கவோ\/இயக்கவோ: இங்கே சுட்டு.\nCtrl+click: என்ற குறுக்குவிசையின் மூலம் uBlock₀ ஐ இந்தப் பக்கத்தில் மட்டும் முடக்கு.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"தடுக்கப்பட்ட கோரிக்கைகள்", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Click to disable uBlock₀ for this site.\n\nCtrl+click to disable uBlock₀ only on this page.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"இந்த இணையப் பக்கத்தில்", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Click to enable uBlock₀ for this site.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} அல்லது {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "தடுக்கப்பட்ட கோரிக்கைகள்", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"நிறுவியது முதல்", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "இந்த இணையப் பக்கத்தில்", + "description": "English: on this page" }, - "popupOr":{ - "message":"அல்லது", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} அல்லது {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"நிர்வாக மையத்தை திறக்க இங்கே சொடுக்கவும்", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "நிறுவியது முதல்", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "அல்லது", + "description": "English: or" }, - "popupTipPicker":{ - "message":"உறுப்புத் தெரிவு முறைமைக்குச் செல்லவும்", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "நிர்வாக மையத்தை திறக்க இங்கே சொடுக்கவும்", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"பிணையக் கோரிக்கைப் பதிவிற்கு செல்", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Enter element zapper mode", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"இத்தளத்தில் அனைத்து மேல்விரிகளையும் தடுப்பதை மாற்றவும்", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "உறுப்புத் தெரிவு முறைமைக்குச் செல்லவும்", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Toggle the blocking of large media elements for this site", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "பிணையக் கோரிக்கைப் பதிவிற்கு செல்", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"இத்தளத்திற்கான ஒப்பனை வடிகட்டியை மாற்றவும்", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "இத்தளத்தில் அனைத்து மேல்விரிகளையும் தடுப்பதை மாற்றவும்", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"இத்தளத்திற்கான தொலைநிலை எழுத்துருக்கள் தடையை மாற்றவும்", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Click to block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Global rules: this column is for rules which apply to all sites.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Click to no longer block all popups on this site", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Toggle the blocking of large media elements for this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"இங்கே சுட்டி உங்கள் மாற்றங்களை நிரந்தரமாக்கவும்.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Click to block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"இங்கே சுட்டி உங்கள் மாற்றங்களைப் பழைய நிலைக்குத் திருப்பவும்.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Click to no longer block large media elements on this site", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"அனைத்து", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "இத்தளத்திற்கான ஒப்பனை வடிகட்டியை மாற்றவும்", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"படங்கள்", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Click to disable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"மூன்றாம் தரப்பு", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Click to enable cosmetic filtering on this site", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"மூன்றாம் தரப்பு CSS\/படங்கள்", - "description":"" + "popupTipNoRemoteFonts": { + "message": "இத்தளத்திற்கான தொலைநிலை எழுத்துருக்கள் தடையை மாற்றவும்", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"உள்வரி உரைகள்", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Click to block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"1‍-ஆம் தரப்பு உரைகள்", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Click to no longer block remote fonts on this site", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"மூன்றாம் தரப்பு உரைகள்", - "description":"" + "popupTipGlobalRules": { + "message": "Global rules: this column is for rules which apply to all sites.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"மூன்றாம் தரப்பு சட்டங்கள்", - "description":"" + "popupTipLocalRules": { + "message": "Local rules: this column is for rules which apply to the current site only.\nLocal rules override global rules.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"இணைக்கப்பட்டுள்ள ஆள்களங்கள்", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "இங்கே சுட்டி உங்கள் மாற்றங்களை நிரந்தரமாக்கவும்.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"மொத்தம் {{total}} இல் {{count}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "இங்கே சுட்டி உங்கள் மாற்றங்களைப் பழைய நிலைக்குத் திருப்பவும்.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"உருவாக்கு", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "அனைத்து", + "description": "" }, - "pickerPick":{ - "message":"எடு", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "படங்கள்", + "description": "" }, - "pickerQuit":{ - "message":"வெளியேறு", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "மூன்றாம் தரப்பு", + "description": "" }, - "pickerPreview":{ - "message":"முன்னோட்டம் பார்", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "மூன்றாம் தரப்பு CSS\/படங்கள்", + "description": "" }, - "pickerNetFilters":{ - "message":"இணைய வடிகட்டிகள்", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "உள்வரி உரைகள்", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"ஒப்பனை வடிகட்டி", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "1‍-ஆம் தரப்பு உரைகள்", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"சொடுக்கு, Ctrl-சொடுக்கு", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "மூன்றாம் தரப்பு உரைகள்", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"உறுப்பை தடு", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "மூன்றாம் தரப்பு சட்டங்கள்", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"தடுக்கப்பட்ட உறுப்புகளின் பெட்டிகளை மறை", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "இணைக்கப்பட்டுள்ள ஆள்களங்கள்", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"தடுக்கப்பட்ட கோரிக்கைகளின் எண்ணிக்கையைப் பாவையில் காட்டவும்", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "மொத்தம் {{total}} இல் {{count}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"உதவிக்குறிப்புக்களை முடக்கு", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "உருவாக்கு", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"தக்க இடங்களில் சூழல் பட்டியலைக் காட்டு", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "எடு", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"நிறம்-அறியாதோருக்கு ஏதுவாக", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "வெளியேறு", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"கிளவுட் சேமிப்பு ஆதரவு இயக்கு", - "description":"" + "pickerPreview": { + "message": "முன்னோட்டம் பார்", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"நான் ஒரு மேம்பட்ட பயனர் (அவசியம் படிக்க வேண்டியவை<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "இணைய வடிகட்டிகள்", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"advanced settings", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "ஒப்பனை வடிகட்டி", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Disable pre-fetching (to prevent any connection for blocked network requests)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "சொடுக்கு, Ctrl-சொடுக்கு", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"உரலியிணைப்புத் தணிக்கையை முடக்கவும்", - "description":"English: " + "pickerContextMenuEntry": { + "message": "உறுப்பை தடு", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"உங்கள் தனிப்பட்ட IP முகவரியை WebRTC வெளிக்காட்டாதபடி தடுக்க", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "தடுக்கப்பட்ட உறுப்புகளின் பெட்டிகளை மறை", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"இயல்பான நடத்தை", - "description":"" + "settingsIconBadgePrompt": { + "message": "தடுக்கப்பட்ட கோரிக்கைகளின் எண்ணிக்கையைப் பாவையில் காட்டவும்", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"These default behaviors can be overridden on a per-site basis", - "description":"" + "settingsTooltipsPrompt": { + "message": "உதவிக்குறிப்புக்களை முடக்கு", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"ஒப்பனை வடிகட்டியை தடை செய்", - "description":"" + "settingsContextMenuPrompt": { + "message": "தக்க இடங்களில் சூழல் பட்டியலைக் காட்டு", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Block media elements larger than {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "நிறம்-அறியாதோருக்கு ஏதுவாக", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"தொலை எழுத்துருக்களை தடு", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "கிளவுட் சேமிப்பு ஆதரவு இயக்கு", + "description": "" }, - "settingsStorageUsed":{ - "message":"பயன்படுத்தப்பட்ட சேமிப்பகத்தின் அளவு: {{value}} பைட்டுகள்", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "நான் ஒரு மேம்பட்ட பயனர் (அவசியம் படிக்க வேண்டியவை<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"இறுதியாக மீட்பதற்கு:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "advanced settings", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"கடைசி மறுபிரதி:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Disable pre-fetching (to prevent any connection for blocked network requests)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} பிணைய வடிகட்டிகள் + {{cosmeticFilterCount}} ஒப்பனை வடிகட்டிகளிலிருந்து:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "உரலியிணைப்புத் தணிக்கையை முடக்கவும்", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"மொத்தம் {{total}} இல் {{used}} பயன்படுத்தப்பட்டது", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "உங்கள் தனிப்பட்ட IP முகவரியை WebRTC வெளிக்காட்டாதபடி தடுக்க", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"வடிகட்டி பட்டியல்களை தானாக புதுப்பி.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "இயல்பான நடத்தை", + "description": "" }, - "3pUpdateNow":{ - "message":"இப்போது புதுப்பிக்கவும்", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "These default behaviors can be overridden on a per-site basis", + "description": "" }, - "3pPurgeAll":{ - "message":"தற்காலிகச் சேமிப்புகள் அனைத்தையும் அகற்று", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "ஒப்பனை வடிகட்டியை தடை செய்", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"இலக்கணகூறை விவரி மற்றும் ஒப்பனை வடிகட்டிகளை செயல்படுத்து.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Block media elements larger than {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

இந்தத் தேர்வு uBlock₀-இன் நினைவக உபயோகத்தை அதிகரிக்கும்.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "தொலை எழுத்துருக்களை தடு", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"பொதுவான ஒப்பனை வடிகட்டிகளை புறக்கணி", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Block CSP reports", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

It is recommended to enable this option on less powerful devices.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "பயன்படுத்தப்பட்ட சேமிப்பகத்தின் அளவு: {{value}} பைட்டுகள்", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"தடைசெய்யப்பட்ட வழங்கிகளின் பட்டியல்", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "இறுதியாக மீட்பதற்கு:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"மாற்றங்களைச் செயல்படுத்து", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "கடைசி மறுபிரதி:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"விளம்பரங்கள்", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} பிணைய வடிகட்டிகள் + {{cosmeticFilterCount}} ஒப்பனை வடிகட்டிகளிலிருந்து:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"தனியுரிமை", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "மொத்தம் {{total}} இல் {{used}} பயன்படுத்தப்பட்டது", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"தீப்பொருள் ஆள்களங்கள்", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "வடிகட்டி பட்டியல்களை தானாக புதுப்பி.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"சமூக", - "description":"English: Social" + "3pUpdateNow": { + "message": "இப்போது புதுப்பிக்கவும்", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"பல்நோக்கு வடிகட்டி", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "தற்காலிகச் சேமிப்புகள் அனைத்தையும் அகற்று", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"மாநில பகுதிகள், மொழிகள் வாரியான", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "இலக்கணகூறை விவரி மற்றும் ஒப்பனை வடிகட்டிகளை செயல்படுத்து.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"தனிபயன்", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

இந்தத் தேர்வு uBlock₀-இன் நினைவக உபயோகத்தை அதிகரிக்கும்.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"ஒரு வரிக்கு ஒரு இணைய முகவரி. ‘!’ எனும் எழுத்தில் தொடங்கும் வரிகள் புறக்கணிக்கப்படும். தவறான முகவரிகளும் அமைதியாகப் புறக்கணிக்கப்படும்.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "பொதுவான ஒப்பனை வடிகட்டிகளை புறக்கணி", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"காலாவதியாகிவிட்டது", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

It is recommended to enable this option on less powerful devices.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"கடைசி புதுப்பிப்பு: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "தடைசெய்யப்பட்ட வழங்கிகளின் பட்டியல்", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Updating...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "மாற்றங்களைச் செயல்படுத்து", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"A network error prevented the resource from being updated.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "விளம்பரங்கள்", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"ஒரு வரிக்கு ஒரு வடிகட்டி. வடிகட்டி என்பது வெறும் வழங்கிப்பெயராக இருக்கலாம், அல்லது Adblock Plus-க்குப் பொருந்தும் வடிகட்டியாக இருக்கலாம். ‘!’ எனும் எழுத்தில் தொடங்கும் வரிகள் புறக்கணிக்கப்படும்.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "தனியுரிமை", + "description": "English: Privacy" }, - "1pImport":{ - "message":"இறக்குமதி செய் மற்றும் இணை", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "தீப்பொருள் ஆள்களங்கள்", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"ஏற்று", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Annoyances", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "பல்நோக்கு வடிகட்டி", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"மாற்றங்களைச் செயல்படுத்து", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "மாநில பகுதிகள், மொழிகள் வாரியான", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"நிரந்தரமான விதிகள்", - "description":"header" + "3pGroupCustom": { + "message": "தனிபயன்", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"தற்காலிக விதிகள்", - "description":"header" + "3pExternalListsHint": { + "message": "ஒரு வரிக்கு ஒரு இணைய முகவரி. ‘!’ எனும் எழுத்தில் தொடங்கும் வரிகள் புறக்கணிக்கப்படும். தவறான முகவரிகளும் அமைதியாகப் புறக்கணிக்கப்படும்.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"முன்நிலையாக்கு", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "காலாவதியாகிவிட்டது", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"உறுதியளி", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "கடைசி புதுப்பிப்பு: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"தொகு", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Updating...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"சேமிக்கும்", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "A network error prevented the resource from being updated.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"நிராகரிக்கபடும்", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "ஒரு வரிக்கு ஒரு வடிகட்டி. வடிகட்டி என்பது வெறும் வழங்கிப்பெயராக இருக்கலாம், அல்லது Adblock Plus-க்குப் பொருந்தும் வடிகட்டியாக இருக்கலாம். ‘!’ எனும் எழுத்தில் தொடங்கும் வரிகள் புறக்கணிக்கப்படும்.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"கோப்பிலிருந்து இறக்குமதி செய் ...", - "description":"" + "1pImport": { + "message": "இறக்குமதி செய் மற்றும் இணை", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"கோப்பினுள் ஏற்று", - "description":"" + "1pExport": { + "message": "ஏற்று", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"உங்களுடைய மாறுநிலை வடிகட்டி விதிப் பட்டியல்கள்.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "மாற்றங்களைச் செயல்படுத்து", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Rule syntax: source destination type action<\/code> (full documentation<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "நிரந்தரமான விதிகள்", + "description": "header" }, - "whitelistPrompt":{ - "message":"uBlock₀ முடக்கப்பட வேண்டிய இடங்களாக நீங்கள் குறிக்கும் வழங்கிப்பெயர்கள். ஒரு வரிக்கு ஒரு பெயர் மட்டுமே. தவறான வழங்கிப்பெயர்கள் அமைதியாகப் புறக்கணிக்கப்படும்.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "தற்காலிக விதிகள்", + "description": "header" }, - "whitelistImport":{ - "message":"Import and append", - "description":"English: Import and append" + "rulesRevert": { + "message": "முன்நிலையாக்கு", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"ஏற்று", - "description":"English: Export" + "rulesCommit": { + "message": "உறுதியளி", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "தொகு", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"மாற்றங்களைச் செயல்படுத்து", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "சேமிக்கும்", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"வகை", - "description":"English: Type" + "rulesEditDiscard": { + "message": "நிராகரிக்கபடும்", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"ஆள்களம்", - "description":"English: Domain" + "rulesImport": { + "message": "கோப்பிலிருந்து இறக்குமதி செய் ...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"உரலி", - "description":"English: URL" + "rulesExport": { + "message": "கோப்பினுள் ஏற்று", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"வடிகட்டு", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"அனைத்து", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "உங்களுடைய மாறுநிலை வடிகட்டி விதிப் பட்டியல்கள்.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"திறக்கப்பட்ட இ.தளங்களின் பின்னால் நடப்பவை", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Rule syntax: source destination type action<\/code> (full documentation<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"பதிகை உருப்படிகளை வடிகட்டு", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "uBlock₀ முடக்கப்பட வேண்டிய இடங்களாக நீங்கள் குறிக்கும் வழங்கிப்பெயர்கள். ஒரு வரிக்கு ஒரு பெயர் மட்டுமே. தவறான வழங்கிப்பெயர்கள் அமைதியாகப் புறக்கணிக்கப்படும்.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"பதிகை உருப்படிகளின் அதிகபட்ச எண்ணிக்கை", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Import and append", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"சூழல்:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "ஏற்று", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"வகை:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"மாறுநிலை உரலி வடிகட்டல்", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "மாற்றங்களைச் செயல்படுத்து", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"நிலையான வடிகட்டுதல்", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "வகை", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{origin}} தொடங்கும், {{br}}{{url}}-குப் பொருந்தும் முகவரி கொண்ட{{br}}{{type}} பிணையக் கோரிக்கைகளை {{action}},{{br}}பொருந்தும் விதிவிலக்கு வடிகட்டி {{importance}}.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "ஆள்களம்", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"தடு", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "உரலி", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"அனுமதி", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "வடிகட்டு", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"\"{{type}}\" வகை", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "அனைத்து", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"எந்த வகையும்", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "திறக்கப்பட்ட இ.தளங்களின் பின்னால் நடப்பவை", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"“{{origin}}”-இல் இருந்து", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "பதிகை உருப்படிகளை வடிகட்டு", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"எங்கிருந்தும்", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "பதிகை உருப்படிகளின் அதிகபட்ச எண்ணிக்கை", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"இல்லாவிட்டால் மட்டும்", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "சூழல்:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"இருந்தாலும் கூட‌", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "வகை:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Static filter {{filter}} found in:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "மாறுநிலை உரலி வடிகட்டல்", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"நிரல் மாற்றம் மற்றும் வெளியீடுகளின் பதிவு", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "நிலையான வடிகட்டுதல்", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"விக்கி", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{origin}} தொடங்கும், {{br}}{{url}}-குப் பொருந்தும் முகவரி கொண்ட{{br}}{{type}} பிணையக் கோரிக்கைகளை {{action}},{{br}}பொருந்தும் விதிவிலக்கு வடிகட்டி {{importance}}.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"ஆதரவு", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "தடு", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"மூல நிரல் (பொது மக்கள் உரிமம் பதிப்பு 3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "அனுமதி", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"பங்களிப்பாளர்கள்", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "\"{{type}}\" வகை", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"கோப்பிற்கு காப்பு பிரதி எடு", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "எந்த வகையும்", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}”-இல் இருந்து", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"கோப்பிலிருந்து மீட்டெடு...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "எங்கிருந்தும்", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Reset to default settings...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "இல்லாவிட்டால் மட்டும்", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "இருந்தாலும் கூட‌", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"The data could not be read or is invalid", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Static filter {{filter}} found in:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "நிரல் மாற்றம் மற்றும் வெளியீடுகளின் பதிவு", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"{{url}} இணைக்க முடியவில்லை", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "விக்கி", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: பின்வரும் உரலியை உங்களுடைய தனிபயன் வடிகட்டியில் சேர்க்கலாமா?\n\nதலைப்பு: \"{{title}}\"\nஉரலி: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "ஆதரவு", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"ஒரு நிமிடத்திற்கு முன்பு", - "description":"English: a minute ago" + "aboutCode": { + "message": "மூல நிரல் (பொது மக்கள் உரிமம் பதிப்பு 3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} நிமிடங்களுக்கு முன்பு", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "பங்களிப்பாளர்கள்", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"ஒரு மணிநேரத்திற்கு முன்பு", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "கோப்பிற்கு காப்பு பிரதி எடு", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} மணி நேரம் முன்பு", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"ஒரு நாளைக்கு முன்பு", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "கோப்பிலிருந்து மீட்டெடு...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} நாட்கள் முன்பு", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Reset to default settings...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"நிர்வாக மையத்தைக் காட்டுக", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "All your settings will be overwritten using data backed up on {{time}}, and uBlock₀ will restart.\n\nOverwrite all existing settings using backed up data?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"பதிவேட்டைக் காண்பிக்கவும்", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "The data could not be read or is invalid", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"அணைந்து விட்டது", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "All your settings will be removed, and uBlock₀ will restart.\n\nReset uBlock₀ to factory settings?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock Origin has prevented the following page from loading:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "{{url}} இணைக்க முடியவில்லை", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"ஏனெனில் பின்வரும் வடிகட்டி", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: பின்வரும் உரலியை உங்களுடைய தனிபயன் வடிகட்டியில் சேர்க்கலாமா?\n\nதலைப்பு: \"{{title}}\"\nஉரலி: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"உரலியில் அளவுருக்கள் இல்லாமல்", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "ஒரு நிமிடத்திற்கு முன்பு", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"இதனுள் கண்டறியப்பட்டது:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} நிமிடங்களுக்கு முன்பு", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"பின் செல்", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "ஒரு மணிநேரத்திற்கு முன்பு", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"இந்த சாளரத்தை மூடவும்", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} மணி நேரம் முன்பு", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"{{hostname}}-இல் கண்டிப்பான தடையைச்‌ செயலிழக்கச் செய்", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "ஒரு நாளைக்கு முன்பு", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"தற்காலிகமாக", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} நாட்கள் முன்பு", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"நிரந்தரமாக", - "description":"English: Permanently" + "showDashboardButton": { + "message": "நிர்வாக மையத்தைக் காட்டுக", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"மேகக்கணினி சேமிப்பகத்திற்கு ஏற்று", - "description":"tooltip" + "showNetworkLogButton": { + "message": "பதிவேட்டைக் காண்பிக்கவும்", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"மேகக்கணினி சேமிப்பகத்திலிருந்து இறக்கு", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "அணைந்து விட்டது", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"மேகக்கணினி சேமிப்பகத்திலிருந்து இறக்கியபின் நடப்பு அமைப்புகளுடன் இணை", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock Origin has prevented the following page from loading:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "ஏனெனில் பின்வரும் வடிகட்டி", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"இந்தச் சாதனத்தின் பெயர்:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "உரலியில் அளவுருக்கள் இல்லாமல்", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Warning! Change these advanced settings at your own risk.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "இதனுள் கண்டறியப்பட்டது:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"சமர்ப்பி", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "பின் செல்", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Apply changes", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "இந்த சாளரத்தை மூடவும்", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"முன்நிலையாக்கு", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "{{hostname}}-இல் கண்டிப்பான தடையைச்‌ செயலிழக்கச் செய்", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"பைட்டுகள்", - "description":"" + "docblockedDisableTemporary": { + "message": "தற்காலிகமாக", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"தற்காலிகமாகப் பெரிய ஒலி‍-ஒளி-படத்தொகுப்புகளின் கூறுகளை அனுமதி", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "நிரந்தரமாக", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "மேகக்கணினி சேமிப்பகத்திற்கு ஏற்று", + "description": "tooltip" + }, + "cloudPull": { + "message": "மேகக்கணினி சேமிப்பகத்திலிருந்து இறக்கு", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "மேகக்கணினி சேமிப்பகத்திலிருந்து இறக்கியபின் நடப்பு அமைப்புகளுடன் இணை", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "இந்தச் சாதனத்தின் பெயர்:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Warning! Change these advanced settings at your own risk.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "சமர்ப்பி", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Apply changes", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "முன்நிலையாக்கு", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "பைட்டுகள்", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "தற்காலிகமாகப் பெரிய ஒலி‍-ஒளி-படத்தொகுப்புகளின் கூறுகளை அனுமதி", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/te/messages.json b/src/_locales/te/messages.json index 78345b8a7a218..2538f75b7be3f 100644 --- a/src/_locales/te/messages.json +++ b/src/_locales/te/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"మొత్తానికి RAM ఇంకా CPU పై తేలికయిన, ఒక సమర్థవంతమైన నిరోధిని.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "మొత్తానికి RAM ఇంకా CPU పై తేలికయిన, ఒక సమర్థవంతమైన నిరోధిని.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — నియంత్రణా వేదిక", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — నియంత్రణా వేదిక", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"ఐచ్చికాలు", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "ఐచ్చికాలు", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"ఇతర మూలాల నుండి పొందిన వడపోతలు", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "ఇతర మూలాల నుండి పొందిన వడపోతలు", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"నా వడపోతలు", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "నా వడపోతలు", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"నా నియమాలు", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "నా నియమాలు", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"నేను నమ్మే సైట్ల జాబితా", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "నేను నమ్మే సైట్ల జాబితా", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — నెట్వర్కు అభ్యర్ధనల చిట్టా", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — నెట్వర్కు అభ్యర్ధనల చిట్టా", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"మా గురించి", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "మా గురించి", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"అధునాతన అమరికలు", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "అధునాతన అమరికలు", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"ఈ సైట్లో uBlock₀ను చేతనపరచడానికి లేదా అచేతనపరచడానికి క్లిక్ చేయండి.\n\nకేవలం ఈ పేజిలో uBlock₀ను అచేతనపరచడానికి Ctrl కీ వొత్తి పట్టుకొని క్లిక్ చేయండి.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "ఈ సైట్లో uBlock₀ను చేతనపరచడానికి లేదా అచేతనపరచడానికి క్లిక్ చేయండి.\n\nకేవలం ఈ పేజిలో uBlock₀ను అచేతనపరచడానికి Ctrl కీ వొత్తి పట్టుకొని క్లిక్ చేయండి.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"నిలువరించబడిన అభ్యర్ధనలు", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "ఈ సైట్లో uBlock₀ను అచేతనపరచడానికి క్లిక్ చేయండి.\n\nకేవలం ఈ పేజిలో uBlock₀ను అచేతనపరచడానికి Ctrl కీ వొత్తి పట్టుకొని క్లిక్ చేయండి.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"ఈ వెబ్ పేజిలో", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "ఈ సైట్లో uBlock₀ను చేతనపరచడానికి క్లిక్ చేయండి.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} లేదా {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "నిలువరించబడిన అభ్యర్ధనలు", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"సంస్థాపన నుండి", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "ఈ వెబ్ పేజిలో", + "description": "English: on this page" }, - "popupOr":{ - "message":"లేదా", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} లేదా {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"నియంత్రణా పట్టికను తెరచుటకు క్లిక్ చేయండి", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "సంస్థాపన నుండి", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"భాగాలను ఎంచుకొని తొలగించు ప్రక్ర్యియనారంభించు", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "లేదా", + "description": "English: or" }, - "popupTipPicker":{ - "message":"భాగాలను ఎంచుకొని తొలగించు ప్రక్ర్యియనారంభించు", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "నియంత్రణా పట్టికను తెరచుటకు క్లిక్ చేయండి", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"అభ్యర్ధనల చిట్టా తెరువుము", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "భాగాలను ఎంచుకొని తొలగించు ప్రక్ర్యియనారంభించు", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"ఈ వెబ్సైట్ లో అన్ని పాప్అప్స్ ని నిషేధించు", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "భాగాలను ఎంచుకొని తొలగించు ప్రక్ర్యియనారంభించు", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"ఈ సైట్లో వున్న భారి దృశ్య\/శ్రవణ అంశాల నిరోధనా స్థితిని మార్చు", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "అభ్యర్ధనల చిట్టా తెరువుము", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"ఈ వెబ్ సైట్ లో కాస్మెటిక్ వడపోతల వాడుక స్థితిని మార్చు", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "ఈ వెబ్సైట్ లో అన్ని పాప్అప్స్ ని నిషేధించు", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"ఈ సైట్ లో ఖతుల వాడుకని సక్రియ లేదా నిర్వీర్యపరచు", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "ఇకపై ఈ సైట్లో అన్ని పాపప్లు బ్లాక్ చేయుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"సామాన్య నియమాలు: ఈ నిలువరుసలో వున్న నియమాలు అన్ని సైట్లకు వర్తిస్తాయి.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "ఇకపై ఈ సైట్లో అన్ని పాపప్లు బ్లాక్ చేయకుండా ఉండుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"స్థానిక నియమాలు: ఈ నిలువరుసలో వున్న నియమాలు కేవలం ప్రస్తుత సైట్ కే వర్తిస్తాయి.\nసామాన్య నియమాలపై స్థానిక నియమాలు అతిక్రమిస్తాయి.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "ఈ సైట్లో వున్న భారి దృశ్య\/శ్రవణ అంశాల నిరోధనా స్థితిని మార్చు", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"మీ మార్పులను శాశ్వతపరచడానికి క్లిక్ చేయండి.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "ఈ సైట్లో పెద్ద పరిమాణం మీడియా అంశాలు బ్లాక్ చేయుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"మీ మార్పులను తిరిగరాయుటకు క్లిక్ చేయండి.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "ఇకపై ఈ సైట్లో పెద్ద పరిమాణం మీడియా అంశాలు బ్లాక్ చేయకుండా ఉండుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"అన్ని", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "ఈ వెబ్ సైట్ లో కాస్మెటిక్ వడపోతల వాడుక స్థితిని మార్చు", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"చిత్రాలు", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "ఈ వెబ్ సైట్ లో కాస్మెటిక్ ఫిల్టరింగ్ ని అచేతనంచేయుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"సైట్-ఏతరుల అంశాలు", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "ఈ వెబ్ సైట్ లో కాస్మెటిక్ ఫిల్టరింగ్ ని చేతనంచేయుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"సైట్-ఏతరుల సిఎస్ఎస్\/చిత్రాలు", - "description":"" + "popupTipNoRemoteFonts": { + "message": "ఈ సైట్ లో ఖతుల వాడుకని సక్రియ లేదా నిర్వీర్యపరచు", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"లోబడిన స్క్రిప్ట్లు", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "ఈ సైట్లో రిమోట్ ఫాంట్లను బ్లాక్ చేయుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"సైట్ యొక్క స్క్రిప్ట్స్", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "ఇకపై ఈ సైట్లో రిమోట్ ఫాంట్లను బ్లాక్ చేయకుండా ఉండుటకు క్లిక్ చేయండి", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"సైట్-ఏతరుల స్క్రిప్ట్లు", - "description":"" + "popupTipGlobalRules": { + "message": "సామాన్య నియమాలు: ఈ నిలువరుసలో వున్న నియమాలు అన్ని సైట్లకు వర్తిస్తాయి.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"సైట్-ఏతరుల ఫ్రేమ్స్", - "description":"" + "popupTipLocalRules": { + "message": "స్థానిక నియమాలు: ఈ నిలువరుసలో వున్న నియమాలు కేవలం ప్రస్తుత సైట్ కే వర్తిస్తాయి.\nసామాన్య నియమాలపై స్థానిక నియమాలు అతిక్రమిస్తాయి.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"అనుసంధానించబడిన డొమైన్లు", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "మీ మార్పులను శాశ్వతపరచడానికి క్లిక్ చేయండి.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{total}} లో {{count}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "మీ మార్పులను తిరిగరాయుటకు క్లిక్ చేయండి.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"సృష్టించు", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "అన్ని", + "description": "" }, - "pickerPick":{ - "message":"ఎంచుకోనుము", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "చిత్రాలు", + "description": "" }, - "pickerQuit":{ - "message":"నిశ్క్రమించు", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "సైట్-ఏతరుల అంశాలు", + "description": "" }, - "pickerPreview":{ - "message":"పరిశీలించు", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "సైట్-ఏతరుల సిఎస్ఎస్\/చిత్రాలు", + "description": "" }, - "pickerNetFilters":{ - "message":"నెట్వర్క్ అభ్యర్దన వడపోతలు", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "లోబడిన స్క్రిప్ట్లు", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"కాస్మెటిక్ వడపోతలు", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "సైట్ యొక్క స్క్రిప్ట్స్", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"క్లిక్, Ctrl+క్లిక్", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "సైట్-ఏతరుల స్క్రిప్ట్లు", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"దీన్ని నిరోధించు", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "సైట్-ఏతరుల ఫ్రేమ్స్", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"నిరోధించబడిన అంశాలయోక్క స్థానసంగ్రాహకాలను దాచుము", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "అనుసంధానించబడిన డొమైన్లు", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"చిహ్నంపై నిరొధించబడిన అభ్యర్దనల సంఖ్య చూపుము", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{total}} లో {{count}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"టూల్టిప్స్ ను అచేతనపరచు", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "సృష్టించు", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"అనువైనచోట్లలో కుడి-క్లిక్ మెనూని ఉపయోగించుము", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "ఎంచుకోనుము", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"వర్ణ అంధులకనుకూలమైన", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "నిశ్క్రమించు", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"క్లౌడ్ లో పొందుపర్చడాన్న్ది అనుమతించు", - "description":"" + "pickerPreview": { + "message": "పరిశీలించు", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"మీరు నిపుణత కలిగిన వినియోగాదారులితే (ఇది తప్పనిసరిగా చదవాలి<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "నెట్వర్క్ అభ్యర్దన వడపోతలు", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"అధునాతన అమరికలు", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "కాస్మెటిక్ వడపోతలు", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"అంశాలను ముందుగానే తీసుకురావడాన్ని నిషేధించు (ఎవైనా అవాంఛనీయ అనుసంధానాలను నివారించడానికి)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "క్లిక్, Ctrl+క్లిక్", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"చిరునామాల తానిఖిని దాటవేయు", - "description":"English: " + "pickerContextMenuEntry": { + "message": "దీన్ని నిరోధించు", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"WebRTCని మీ స్థానిక IP చిరునామాలను బహిర్గతపరచనివ్వొద్దు", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "నిరోధించబడిన అంశాలయోక్క స్థానసంగ్రాహకాలను దాచుము", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"సామాన్య ప్రవర్తన", - "description":"" + "settingsIconBadgePrompt": { + "message": "చిహ్నంపై నిరొధించబడిన అభ్యర్దనల సంఖ్య చూపుము", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"ఈ సామాన్య ప్రవర్తనను ఒక్కో సైట్లో ప్రత్యేకంగా మార్చుకోవోచ్చు", - "description":"" + "settingsTooltipsPrompt": { + "message": "టూల్టిప్స్ ను అచేతనపరచు", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"కాస్మెటిక్ వడపోతను నిర్వీర్యపరచు", - "description":"" + "settingsContextMenuPrompt": { + "message": "అనువైనచోట్లలో కుడి-క్లిక్ మెనూని ఉపయోగించుము", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"పరిమాణంలో {{input:number}} కేబీల కన్నా పెద్దవైన అంశాలను నిరోధించు", - "description":"" + "settingsColorBlindPrompt": { + "message": "వర్ణ అంధులకనుకూలమైన", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"బయటి ఖతులను నిరోధించు", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "క్లౌడ్ లో పొందుపర్చడాన్న్ది అనుమతించు", + "description": "" }, - "settingsStorageUsed":{ - "message":"వాడుతున్న నిలువల పరిమాణం: {{value}} బైట్స్", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "మీరు నిపుణత కలిగిన వినియోగాదారులితే (ఇది తప్పనిసరిగా చదవాలి<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"గత పునరుద్ధారణ:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "అధునాతన అమరికలు", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"గత నకలు:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "అంశాలను ముందుగానే తీసుకురావడాన్ని నిషేధించు (ఎవైనా అవాంఛనీయ అనుసంధానాలను నివారించడానికి)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"ఈ క్రింది మూలాల నుండి వచ్చిన {{netFilterCount}} నెట్వర్క్ వడపోతలు + {{cosmeticFilterCount}} కాస్మెటిక్ వడపోతలు:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "చిరునామాల తానిఖిని దాటవేయు", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}} లో వాడుతున్నది {{used}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTCని మీ స్థానిక IP చిరునామాలను బహిర్గతపరచనివ్వొద్దు", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"వడపోత జాబితాలను స్వయంచాలకంగా నవీకరించుము.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "సామాన్య ప్రవర్తన", + "description": "" }, - "3pUpdateNow":{ - "message":"జాబితా నవీకరించుము", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "ఈ సామాన్య ప్రవర్తనను ఒక్కో సైట్లో ప్రత్యేకంగా మార్చుకోవోచ్చు", + "description": "" }, - "3pPurgeAll":{ - "message":"తాత్కాలిక నిలువలను త్యజించు", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "కాస్మెటిక్ వడపోతను నిర్వీర్యపరచు", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"పదనిరుపనచేసి కాస్మెటిక్ వడపోతలను ఉపయోగించు.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "పరిమాణంలో {{input:number}} కేబీల కన్నా పెద్దవైన అంశాలను నిరోధించు", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

ఈ ఎంపిక ను ఎంచుకున్నయేడల uBlock₀ యొక్క మెమరీ వాడుక పెరిగే ఆస్కారమున్నది<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "బయటి ఖతులను నిరోధించు", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"కాస్మెటిక్ వడపోతలను విస్మరించు", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "CSP నివేదికలను బ్లాక్ చేయండి", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

అల్పసామర్ధ్య పరికరాలలో దీన్ని ఎంచుకోవడం శ్రేయస్కరం.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "వాడుతున్న నిలువల పరిమాణం: {{value}} బైట్స్", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"నిరోధించబడిన చిరునామాల జాబితా", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "గత పునరుద్ధారణ:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"మార్పులను అమలుపరచు", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "గత నకలు:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"ప్రకటనలు", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "ఈ క్రింది మూలాల నుండి వచ్చిన {{netFilterCount}} నెట్వర్క్ వడపోతలు + {{cosmeticFilterCount}} కాస్మెటిక్ వడపోతలు:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"గోప్యత", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} లో వాడుతున్నది {{used}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"మాల్వేర్ డొమైన్లు", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "వడపోత జాబితాలను స్వయంచాలకంగా నవీకరించుము.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"సాంఘికం", - "description":"English: Social" + "3pUpdateNow": { + "message": "జాబితా నవీకరించుము", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"బహూలార్ధక", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "తాత్కాలిక నిలువలను త్యజించు", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"ప్రాంతాలు, భాషలు", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "పదనిరుపనచేసి కాస్మెటిక్ వడపోతలను ఉపయోగించు.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"సొంత నిర్దేషణ", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

ఈ ఎంపిక ను ఎంచుకున్నయేడల uBlock₀ యొక్క మెమరీ వాడుక పెరిగే ఆస్కారమున్నది<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"ఒక్కో పంక్తిలో ఒక URL. పంక్తిలో మొదలు ‘!’ ఉన్నచో అది పరిగనించబడదు. చెల్లని URLలు మౌనంగా విస్మరించబడుతాయి.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "కాస్మెటిక్ వడపోతలను విస్మరించు", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"పాతబడింది", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

అల్పసామర్ధ్య పరికరాలలో దీన్ని ఎంచుకోవడం శ్రేయస్కరం.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"గత నవీకరణ: {{ago}}.\nనవీకరించుటకు క్లిక్ చెయ్యండి.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "నిరోధించబడిన చిరునామాల జాబితా", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"నవీకరిస్తున్నది...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "మార్పులను అమలుపరచు", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"ఈ చిట్టా అనుసంధాన వైఫల్యం వలన నవికరించబడలేదు.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "ప్రకటనలు", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"ఒక్కో పంక్తిలో ఒక వడపోత నమోదు. పేర్కొనబడే వడపోత, కేవలం హోస్టుపేరు లేదా Adblock Plusకి అనువైన వడపోత కావొచ్చు. పంక్తిలో మొదలు ‘!’ ఉన్నచో అది పరిగణలోకి తీసుకొబడదు.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "గోప్యత", + "description": "English: Privacy" }, - "1pImport":{ - "message":"దిగుమతిచేసి పోడిగించుము", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "మాల్వేర్ డొమైన్లు", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"ఎగుమతి చేయు", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "అసౌకర్యాల పట్టిక", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "బహూలార్ధక", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"మార్పులను భద్రపరచు", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "ప్రాంతాలు, భాషలు", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"శాశ్వత నియమాలు", - "description":"header" + "3pGroupCustom": { + "message": "సొంత నిర్దేషణ", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"తాత్కాలిక నియమాలు", - "description":"header" + "3pExternalListsHint": { + "message": "ఒక్కో పంక్తిలో ఒక URL. పంక్తిలో మొదలు ‘!’ ఉన్నచో అది పరిగనించబడదు. చెల్లని URLలు మౌనంగా విస్మరించబడుతాయి.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"మార్పులను తిరస్కరించు", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "పాతబడింది", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"మార్పులను భద్రపరచు", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "గత నవీకరణ: {{ago}}.\nనవీకరించుటకు క్లిక్ చెయ్యండి.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"చక్కదిడ్డుము", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "నవీకరిస్తున్నది...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"భద్రపరచు", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "ఈ చిట్టా అనుసంధాన వైఫల్యం వలన నవికరించబడలేదు.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"పారవేయు", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "ఒక్కో పంక్తిలో ఒక వడపోత నమోదు. పేర్కొనబడే వడపోత, కేవలం హోస్టుపేరు లేదా Adblock Plusకి అనువైన వడపోత కావొచ్చు. పంక్తిలో మొదలు ‘!’ ఉన్నచో అది పరిగణలోకి తీసుకొబడదు.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"ఫైల్ నుండి దిగుమతి చేయుము...", - "description":"" + "1pImport": { + "message": "దిగుమతిచేసి పోడిగించుము", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"ఫైల్కు ఎగుమతి చేయుము", - "description":"" + "1pExport": { + "message": "ఎగుమతి చేయు", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"మీ క్రియాశీలక జల్లెడ నియమాల జాబితా.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "మార్పులను భద్రపరచు", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"నియమనిర్మాన పద్ధతి: మూలం గమ్యం రకం చర్య<\/code> (పూర్తి వివరాలు<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "శాశ్వత నియమాలు", + "description": "header" }, - "whitelistPrompt":{ - "message":"uBlock Origin అచేతనబడించిన హోస్టూల జాబితా, ఇది మీరు కూర్చినది,. ఒక్కో పంక్తికి ఒక్కో నమోదు. చెల్లని నమోదులు మౌనంగా విస్మరించబడుతాయి.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "తాత్కాలిక నియమాలు", + "description": "header" }, - "whitelistImport":{ - "message":"దిగుమతిచేసి పోడిగించుము", - "description":"English: Import and append" + "rulesRevert": { + "message": "మార్పులను తిరస్కరించు", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"ఎగుమతి", - "description":"English: Export" + "rulesCommit": { + "message": "మార్పులను భద్రపరచు", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "చక్కదిడ్డుము", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"మార్పులను భద్రపరచు", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "భద్రపరచు", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"రకం", - "description":"English: Type" + "rulesEditDiscard": { + "message": "పారవేయు", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"డొమైన్", - "description":"English: Domain" + "rulesImport": { + "message": "ఫైల్ నుండి దిగుమతి చేయుము...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "ఫైల్కు ఎగుమతి చేయుము", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"జల్లెడ", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"అన్ని", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "మీ క్రియాశీలక జల్లెడ నియమాల జాబితా.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"తేర వెనుక", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "నియమనిర్మాన పద్ధతి: మూలం గమ్యం రకం చర్య<\/code> (పూర్తి వివరాలు<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"చిట్టాలోని నమోదులను జల్లెడపరచు", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "uBlock Origin అచేతనబడించిన హోస్టూల జాబితా, ఇది మీరు కూర్చినది,. ఒక్కో పంక్తికి ఒక్కో నమోదు. చెల్లని నమోదులు మౌనంగా విస్మరించబడుతాయి.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"చిట్టాలోని గరిష్ట నమోదుల సంఖ్య", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "దిగుమతిచేసి పోడిగించుము", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"సందర్భం:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "ఎగుమతి", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"రకం:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"క్రియాశీలక URL వడపోత", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "మార్పులను భద్రపరచు", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"నిశ్చలాత్మక వడపోత", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "రకం", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{origin}} నుండి మొదలయ్యి, {{br}}{{url}} తో సరిపోలిన url గల {{br}}{{type}} నెట్వర్క్ అభ్యర్ధనలను {{action}}, {{br}}అదీ వడపోతల జాబితాలో {{importance}}.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "డొమైన్", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"తిరస్కరించు", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"అనుమతించు", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "జల్లెడ", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"“{{type}}” రకమైన", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "అన్ని", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"ఏటువంటిదైనా", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "తేర వెనుక", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"“{{origin}}” నుండి", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "చిట్టాలోని నమోదులను జల్లెడపరచు", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"ఎక్కడినుండైనా", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "చిట్టాలోని గరిష్ట నమోదుల సంఖ్య", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"మినహాయింపు వుంటే", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "సందర్భం:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"మినహాయింపు వున్నా", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "రకం:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"నిశ్చలాత్మక వడపోత అయిన {{filter}} క్రింది వాటిలో కలదు:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "క్రియాశీలక URL వడపోత", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"మార్పుల సంచిక", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "నిశ్చలాత్మక వడపోత", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"వికి", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{origin}} నుండి మొదలయ్యి, {{br}}{{url}} తో సరిపోలిన url గల {{br}}{{type}} నెట్వర్క్ అభ్యర్ధనలను {{action}}, {{br}}అదీ వడపోతల జాబితాలో {{importance}}.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"సహాయము", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "తిరస్కరించు", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"మూలం (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "అనుమతించు", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"ప్రాజెక్ట్కు సహాయ పడిన వారు", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "“{{type}}” రకమైన", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"ఫైల్ లో భద్రపరచు", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "ఏటువంటిదైనా", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}” నుండి", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"ఫైల్ నుండి పునరుద్దరించు...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "ఎక్కడినుండైనా", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"సంస్థాపన ఐచ్చికాలను పునరుద్దరించు...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "మినహాయింపు వుంటే", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"మీరు పేర్కొన్న ఐచ్చిక్కాలన్ని {{time}}నకు తీసుకున్న నకలు డేటాతో తిరగారాయబడుతాయి, ఆ పిమ్మట uBlock₀ పునఃప్రారంభమవుతుంది.\n\nమీ ఐచ్చికాలను తిరగరాయుట మీకు సమ్మతమేనా?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "మినహాయింపు వున్నా", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"డేటాను చదవడంలో లోపం సంభవించినది(డేటా పాడైవుంది లేదా అందుబాటులో లేదు)", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "నిశ్చలాత్మక వడపోత అయిన {{filter}} క్రింది వాటిలో కలదు:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"ఐచ్చికాలలో మీరు చేసిన మార్పులన్నీ తొలగించనా పిమ్మట uBlock₀ పునఃప్రారంభిన్చాబాడును.\n\nమరి సంస్థాపన ఐచ్చికాలను పునరుద్ధరించాలా?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "మార్పుల సంచిక", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"అనుసంధాన వైఫల్యం: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "వికి", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: ఈ URLని మీ నిర్దేశిత వడపోత పట్టికకు జతపరచాలా?\n\nశీర్షిక: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "సహాయము", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"ఒక నిమిషం క్రితం", - "description":"English: a minute ago" + "aboutCode": { + "message": "మూలం (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} నిమిషాల క్రితం", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "ప్రాజెక్ట్కు సహాయ పడిన వారు", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"ఒక గంట క్రితం", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "ఫైల్ లో భద్రపరచు", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} గంటల క్రితం", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"ఒక రోజు క్రితం", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "ఫైల్ నుండి పునరుద్దరించు...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} రోజుల క్రితం", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "సంస్థాపన ఐచ్చికాలను పునరుద్దరించు...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"నియంత్రణా పట్టికను చూపు", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "మీరు పేర్కొన్న ఐచ్చిక్కాలన్ని {{time}}నకు తీసుకున్న నకలు డేటాతో తిరగారాయబడుతాయి, ఆ పిమ్మట uBlock₀ పునఃప్రారంభమవుతుంది.\n\nమీ ఐచ్చికాలను తిరగరాయుట మీకు సమ్మతమేనా?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"నెట్వర్క్ అభ్యర్ధనల చిట్టాను చూపు", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "డేటాను చదవడంలో లోపం సంభవించినది(డేటా పాడైవుంది లేదా అందుబాటులో లేదు)", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"అచేతనం", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "ఐచ్చికాలలో మీరు చేసిన మార్పులన్నీ తొలగించనా పిమ్మట uBlock₀ పునఃప్రారంభిన్చాబాడును.\n\nమరి సంస్థాపన ఐచ్చికాలను పునరుద్ధరించాలా?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"ఈ తరువాయి పేజిని uBlock Origin బ్రౌజరులోకి ఎక్కిన్చనివ్వలేదు:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "అనుసంధాన వైఫల్యం: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"ఇది ఈ క్రింది వడపోతననుసారించి తీసుకోబడిన చర్య", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: ఈ URLని మీ నిర్దేశిత వడపోత పట్టికకు జతపరచాలా?\n\nశీర్షిక: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"పారామితులు లేని", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "ఒక నిమిషం క్రితం", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"ఈ వడపోత వున్న జాబితా పేరు:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} నిమిషాల క్రితం", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"వెనక్కి వెళ్ళు", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "ఒక గంట క్రితం", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"విండో మూయుము", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} గంటల క్రితం", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"{{hostname}} తో అనుసంధానాన్ని అనుమతించాలా?", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "ఒక రోజు క్రితం", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"తాత్కాలికంగా", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} రోజుల క్రితం", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"శాశ్వతంగా", - "description":"English: Permanently" + "showDashboardButton": { + "message": "నియంత్రణా పట్టికను చూపు", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"క్లౌడ్ లో పొందుపరచు", - "description":"tooltip" + "showNetworkLogButton": { + "message": "నెట్వర్క్ అభ్యర్ధనల చిట్టాను చూపు", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"క్లౌడ్ నుండి దిగుమతిపరచు", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "అచేతనం", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"అంతర్జాలంలో భద్రపరచిన ఎంపికలను దిగుమతి చేసి ప్రస్తుత ఎంపికలకు జోడించు", - "description":"tooltip" + "docblockedPrompt1": { + "message": "ఈ తరువాయి పేజిని uBlock Origin బ్రౌజరులోకి ఎక్కిన్చనివ్వలేదు:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "ఇది ఈ క్రింది వడపోతననుసారించి తీసుకోబడిన చర్య", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"ఈ పరికరం పేరు:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "పారామితులు లేని", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"హెచ్చరిక! ఈ అధునాతన అమరికలను జాగ్రత్తతో మార్చండి.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "ఈ వడపోత వున్న జాబితా పేరు:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"పంపించు", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "వెనక్కి వెళ్ళు", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"మార్పులను అమలుపరచు", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "విండో మూయుము", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"మార్పులను తిరస్కరించు", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "{{hostname}} తో అనుసంధానాన్ని అనుమతించాలా?", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"బైట్లు", - "description":"" + "docblockedDisableTemporary": { + "message": "తాత్కాలికంగా", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"భారి దృశ్య\/శ్రవణ అంశాలను తాత్కాలికంగా అనుమతించు", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "శాశ్వతంగా", + "description": "English: Permanently" }, - "dummy":{ - "message":"ఇది అంతిమంగా వుండాల్సిన నమోదు", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "క్లౌడ్ లో పొందుపరచు", + "description": "tooltip" + }, + "cloudPull": { + "message": "క్లౌడ్ నుండి దిగుమతిపరచు", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "అంతర్జాలంలో భద్రపరచిన ఎంపికలను దిగుమతి చేసి ప్రస్తుత ఎంపికలకు జోడించు", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "ఈ పరికరం పేరు:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "హెచ్చరిక! ఈ అధునాతన అమరికలను జాగ్రత్తతో మార్చండి.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "పంపించు", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "మార్పులను అమలుపరచు", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "మార్పులను తిరస్కరించు", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "బైట్లు", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "భారి దృశ్య\/శ్రవణ అంశాలను తాత్కాలికంగా అనుమతించు", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "ఇది అంతిమంగా వుండాల్సిన నమోదు", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/tr/messages.json b/src/_locales/tr/messages.json index cd2ab836d9b89..8e3bffd636c40 100644 --- a/src/_locales/tr/messages.json +++ b/src/_locales/tr/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Sonunda, etkili bir engelleyici. İşlemci ve belleği yormaz.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Sonunda, etkili bir engelleyici. İşlemciyi ve belleği yormaz.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Kontrol paneli", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Kontrol paneli", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Ayarlar", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Ayarlar", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"3. taraf süzgeçler", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "3. taraf süzgeçler", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Süzgeçlerim", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Süzgeçlerim", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Kurallarım", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Kurallarım", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Beyaz liste", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Beyaz liste", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Günlükçü", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Günlükçü", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Hakkında", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Hakkında", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Gelişmiş ayarlar", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Gelişmiş ayarlar", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Tıklama: uBlock₀'i bu site için devre dışı bırak\/etkinleştir.\n\nCtrl+tıklama: uBlock₀'i sadece bu sayfa için devre dışı bırak.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Tıklama: uBlock₀'i bu site için devre dışı bırak\/etkinleştir.\n\nCtrl+tıklama: uBlock₀'i sadece bu sayfa için devre dışı bırak.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"engellenen istekler", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "uBlock₀'i bu sitede devre dışı bırakmak için tıklayın.\n\nuBlock₀'i yalnızca bu sayfada devre dışı bırakmak için Ctrl+tıklayın.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"bu sayfada", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "uBlock₀'i bu sitede etkinleştirmek için tıklayın.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} veya %{{percent}}", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "engellenen istekler", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"yüklendiğinden beri", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "bu sayfada", + "description": "English: on this page" }, - "popupOr":{ - "message":"ya da", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} veya %{{percent}}", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Kontrol panelini açar", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "yüklendiğinden beri", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Öge silme moduna gir", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "ya da", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Öge seçme moduna gir", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Kontrol panelini açar", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Günlükçüyü açar", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Öge silme moduna gir", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Bu site için açılır pencere engellemeyi aç\/kapa", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Öge seçme moduna gir", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Bu site için büyük medya ögelerini engellemeyi aç\/kapa", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Günlükçüyü açar", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Bu site için kozmetik süzmeyi aç\/kapa", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Bu site için açılır pencere engellemeyi aç\/kapa", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Bu site için uzak yazıtiplerini engellemeyi aç\/kapa", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Bu sitede açılır pencerelerin tümünü engellemek için tıklayın", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Genel kurallar: bu sütun tüm sitelere uygulanan kurallar içindir.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Bu sitede açılır pencerelerin tümünü artık engellememek için tıklayın", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Yerel kurallar: bu sütun yalnızca geçerli siteye uygulanan kurallar içindir.\nYerel kurallar genel kuralları geçersiz kılar.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Bu site için büyük medya ögelerini engellemeyi aç\/kapa", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Değişikliklerinizi kalıcı kılmak için tıklayın.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Bu sitede büyük medya ögelerini engellemek için tıklayın", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Değişikliklerinizi geri almak için tıklayın.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Bu sitede büyük medya ögelerini artık engellememek için tıklayın", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"tümü", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Bu site için kozmetik süzmeyi aç\/kapa", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"resimler", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Bu sitede kozmetik süzmeyi devre dışı bırakmak için tıklayın", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"3. taraf", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Bu sitede kozmetik süzmeyi etkinleştirmek için tıklayın", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"3. taraf css\/resim", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Bu site için uzak yazıtiplerini engellemeyi aç\/kapa", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"satır içi betikleri", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Bu sitede uzak yazıtiplerini engellemek için tıklayın", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"1. taraf betikler", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Bu sitede uzak yazıtiplerini artık engellememek için tıklayın", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"3. taraf betikler", - "description":"" + "popupTipGlobalRules": { + "message": "Genel kurallar: bu sütun tüm sitelere uygulanan kurallar içindir.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"3. taraf çerçeveler", - "description":"" + "popupTipLocalRules": { + "message": "Yerel kurallar: bu sütun yalnızca geçerli siteye uygulanan kurallar içindir.\nYerel kurallar genel kuralları geçersiz kılar.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"bağlanılan adresler", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Değişikliklerinizi kalıcı kılmak için tıklayın.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{total}} taneden {{count}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Değişikliklerinizi geri almak için tıklayın.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Oluştur", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "tümü", + "description": "" }, - "pickerPick":{ - "message":"Seç", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "resimler", + "description": "" }, - "pickerQuit":{ - "message":"Çık", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "3. taraf", + "description": "" }, - "pickerPreview":{ - "message":"Ön İzleme", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "3. taraf css\/resim", + "description": "" }, - "pickerNetFilters":{ - "message":"Ağ süzgeçleri", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "satır içi betikleri", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Kozmetik süzgeçler", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "1. taraf betikler", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Tıkla, Ctrl-tıkla", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "3. taraf betikler", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Öge engelle", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "3. taraf çerçeveler", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Engellenen reklamların yerlerini gizle", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "bağlanılan adresler", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Engellenmiş reklam sayısını simge üzerinde göster", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{total}} taneden {{count}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"İpuçlarını kapat", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Oluştur", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Uygun olduğunda içerik menüsünü kullan", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Seç", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Renk körü dostu", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Çık", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Bulut depo desteğini etkinleştir", - "description":"" + "pickerPreview": { + "message": "Ön İzleme", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Deneyimli kullanıcıyım (Okunması gerekir<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Ağ süzgeçleri", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"gelişmiş ayarlar", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Kozmetik süzgeçler", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Kaynak ön getirimini devre dışı bırak (engellenmiş ağ isteklerine herhangi bir bağlantı kurulmasını engellemek için)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Tıkla, Ctrl-tıkla", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Köprü denetimini devre dışı bırak", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Öge engelle", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"WebRTC'nin yerel IP adreslerini sızdırmasını engelle", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Engellenen reklamların yerlerini gizle", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Varsayılan davranış", - "description":"" + "settingsIconBadgePrompt": { + "message": "Engellenmiş reklam sayısını simge üzerinde göster", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Bu varsayılan davranışlar site bazında geçersiz kılınabilir", - "description":"" + "settingsTooltipsPrompt": { + "message": "İpuçlarını kapat", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Kozmetik süzgeçleri devre dışı bırak", - "description":"" + "settingsContextMenuPrompt": { + "message": "Uygun olduğunda içerik menüsünü kullan", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Belirlenenden büyük medya ögelerini engelle {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Renk körü dostu", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Uzak yazıtiplerini engelle", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Bulut depo desteğini etkinleştir", + "description": "" }, - "settingsStorageUsed":{ - "message":"Kullanılan Alan: {{value}} byte", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Deneyimli kullanıcıyım (Okunması gerekir<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Son geri yükleme:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "gelişmiş ayarlar", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Son yedekleme:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Kaynak ön getirimini devre dışı bırak (engellenmiş ağ isteklerine herhangi bir bağlantı kurulmasını engellemek için)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} ağ süzgeci + {{cosmeticFilterCount}} kozmetik süzgeç:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Köprü denetimini devre dışı bırak", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"{{total}} taneden {{used}} adedi kullanıldı", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "WebRTC'nin yerel IP adreslerini sızdırmasını engelle", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Süzgeç listelerini otomatik güncelle.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Varsayılan davranış", + "description": "" }, - "3pUpdateNow":{ - "message":"Şimdi güncelle", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Bu varsayılan davranışlar site bazında geçersiz kılınabilir", + "description": "" }, - "3pPurgeAll":{ - "message":"Tüm önbellekleri temizle", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Kozmetik süzgeçleri devre dışı bırak", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Kozmetik süzgeçleri incele ve uygula.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Belirlenenden büyük medya ögelerini engelle {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Bu özelliği etkinleştirmek uBlock₀'in bellek kullanımını artırır.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Uzak yazıtiplerini engelle", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Genel kozmetik süzgeçleri yok say", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "CSP raporlarını engelle", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Daha az güçlü cihazlarda bu seçeneğin etkinleştirilmesi tavsiye edilir.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Kullanılan Alan: {{value}} byte", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Engellenmiş alan adlarının listesi", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Son geri yükleme:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Değişiklikleri uygula", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Son yedekleme:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Reklamlar", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} ağ süzgeci + {{cosmeticFilterCount}} kozmetik süzgeç:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Gizlilik", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "{{total}} taneden {{used}} adedi kullanıldı", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Zararlı alan adları", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Süzgeç listelerini otomatik güncelle.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Sosyal", - "description":"English: Social" + "3pUpdateNow": { + "message": "Şimdi güncelle", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Çok-amaçlı", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Tüm önbellekleri temizle", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Bölgeler, diller", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Kozmetik süzgeçleri incele ve uygula.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Özel", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Bu özelliği etkinleştirmek uBlock₀'in bellek kullanımını artırır.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Her satırda bir URL. ‘!’ ile başlayan satırlar göz ardı edilir. Geçersiz URL'ler sessizce yok sayılır.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Genel kozmetik süzgeçleri yok say", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Güncel değil.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Daha az güçlü cihazlarda bu seçeneğin etkinleştirilmesi tavsiye edilir.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Son güncelleme: {{ago}}.\nGüncelleştirmeye zorlamak için tıklayın.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Engellenmiş alan adlarının listesi", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Güncelleniyor...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Değişiklikleri uygula", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Bir ağ hatası kaynağın güncellenmesini engelledi.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Reklamlar", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Her satırda bir süzgeç. Süzgeç bir alan adı veya Adblock Plus uyumlu bir süzgeç olabilir. ‘!’ ile başlayan satırlar yok sayılır.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Gizlilik", + "description": "English: Privacy" }, - "1pImport":{ - "message":"İçe aktar ve sonuna ekle", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Zararlı alan adları", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Dışa aktar", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Can sıkıcı ögeler", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-statik-süzgeçlerim_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Çok-amaçlı", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Değişiklikleri uygula", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Bölgeler, diller", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Kalıcı kurallar", - "description":"header" + "3pGroupCustom": { + "message": "Özel", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Geçici kurallar", - "description":"header" + "3pExternalListsHint": { + "message": "Her satırda bir URL. ‘!’ ile başlayan satırlar göz ardı edilir. Geçersiz URL'ler sessizce yok sayılır.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Geri al", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Güncel değil.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"İşle", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Son güncelleme: {{ago}}.\nGüncelleştirmeye zorlamak için tıklayın.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Düzenle", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Güncelleniyor...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Kaydet", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Bir ağ hatası kaynağın güncellenmesini engelledi.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"İptal et", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Her satırda bir süzgeç. Süzgeç bir alan adı veya Adblock Plus uyumlu bir süzgeç olabilir. ‘!’ ile başlayan satırlar yok sayılır.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Dosyadan içe aktar...", - "description":"" + "1pImport": { + "message": "İçe aktar ve sonuna ekle", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Dosyaya aktar", - "description":"" + "1pExport": { + "message": "Dışa aktar", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"ublock-dinamik-kurallarım_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-statik-süzgeçlerim_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Dinamik süzme kurallarınızın listesi.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Değişiklikleri uygula", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Kural sözdizimi: kaynak hedefi türü işlemi<\/code> (bütün belgeler<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Kalıcı kurallar", + "description": "header" }, - "whitelistPrompt":{ - "message":"Hangi alan adları için uBlock₀'in devre dışı olacağını belirten listeniz. Satır başına bir girdi. Geçersiz alan adları sessizce yok sayılır.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Geçici kurallar", + "description": "header" }, - "whitelistImport":{ - "message":"İçe aktar ve sonuna ekle", - "description":"English: Import and append" + "rulesRevert": { + "message": "Geri al", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Dışa aktar", - "description":"English: Export" + "rulesCommit": { + "message": "İşle", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"ublock-beyazlistem_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Düzenle", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Değişiklikleri uygula", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Kaydet", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Tür", - "description":"English: Type" + "rulesEditDiscard": { + "message": "İptal et", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Alan adı", - "description":"English: Domain" + "rulesImport": { + "message": "Dosyadan içe aktar...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Dosyaya aktar", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Süzgeç", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "ublock-dinamik-kurallarım_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Tümü", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Dinamik süzme kurallarınızın listesi.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Perde arkası", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Kural sözdizimi: kaynak hedefi türü işlemi<\/code> (bütün belgeler<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"günlük girişlerini süz", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Hangi alan adları için uBlock₀'in devre dışı olacağını belirten listeniz. Satır başına bir girdi. Geçersiz alan adları sessizce yok sayılır.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Maksimum günlük giriş sayısı", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "İçe aktar ve sonuna ekle", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Bağlam:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Dışa aktar", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Tür:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "ublock-beyazlistem_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Dinamik URL süzme", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Değişiklikleri uygula", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Statik süzme", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Tür", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"Bu adres ile eşleşen {{url}} {{br}}ve kaynağı {{origin}} olan, {{type}} ağ isteklerini {{br}}eşleşen istisna süzgeci {{importance}} {{action}}.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Alan adı", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Engelle", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"İzin ver", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Süzgeç", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"“{{type}}” türündeki", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Tümü", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"herhangi bir türdeki", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Perde arkası", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"“{{origin}}” adresi", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "günlük girişlerini süz", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"herhangi bir yer", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Maksimum günlük giriş sayısı", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"olmasa da", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Bağlam:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"olsa da", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Tür:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Statik süzgecin {{filter}} bulunduğu listeler:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Dinamik URL süzme", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Değişiklikler", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Statik süzme", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Viki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "Bu adres ile eşleşen {{url}} {{br}}ve kaynağı {{origin}} olan, {{type}} ağ isteklerini {{br}}eşleşen istisna süzgeci {{importance}} {{action}}.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Destek", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Engelle", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Kaynak kodu (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "İzin ver", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Katkıda bulunanlar", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "“{{type}}” türündeki", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Dosyaya yedekle", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "herhangi bir türdeki", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-yedeğim_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "“{{origin}}” adresi", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Dosyadan geri yükle...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "herhangi bir yer", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Varsayılan ayarlara sıfırla...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "olmasa da", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Tüm ayarlarınız {{time}} tarihinde yedeklenmiş veriler kullanarak değiştirilecek ve uBlock₀ yeniden başlayacak. \n\nYedeklenmiş verileriniz kullanılarak var olan tüm ayarlarınız değiştirilsin mi?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "olsa da", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Veri okunamadı veya geçersiz", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Statik süzgecin {{filter}} bulunduğu listeler:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Tüm ayarlarınızı silinecek, ve uBlock₀ yeniden başlayacak.\n\nuBlock₀ fabrika ayarlarına geri dönsün mü?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Değişiklikler", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Ağ hatası: {{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Viki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Aşağıdaki URL, özel süzgeç listenize eklensin mi?\n\nBaşlık: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Destek", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"bir dakika önce", - "description":"English: a minute ago" + "aboutCode": { + "message": "Kaynak kodu (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} dakika önce", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Katkıda bulunanlar", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"bir saat önce", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Dosyaya yedekle", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} saat önce", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-yedeğim_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"bir gün önce", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Dosyadan geri yükle...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} gün önce", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Varsayılan ayarlara sıfırla...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Kontrol Panelini Göster", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Tüm ayarlarınız {{time}} tarihinde yedeklenmiş veriler kullanarak değiştirilecek ve uBlock₀ yeniden başlayacak. \n\nYedeklenmiş verileriniz kullanılarak var olan tüm ayarlarınız değiştirilsin mi?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Günlükçüyü Göster", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Veri okunamadı veya geçersiz", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"kapalı", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Tüm ayarlarınızı silinecek, ve uBlock₀ yeniden başlayacak.\n\nuBlock₀ fabrika ayarlarına geri dönsün mü?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ aşağıdaki sayfanın yüklenmesini engelledi:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Ağ hatası: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Bu süzgeç nedeniyle", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Aşağıdaki URL, özel süzgeç listenize eklensin mi?\n\nBaşlık: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"parametresiz", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "bir dakika önce", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Bulunduğu liste:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} dakika önce", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Geri git", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "bir saat önce", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Bu pencereyi kapat", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} saat önce", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"{{hostname}} için katı engellemeyi devre dışı bırak", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "bir gün önce", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Geçici olarak", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} gün önce", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Kalıcı olarak", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Kontrol Panelini Göster", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Bulut depoya aktar", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Günlükçüyü Göster", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Bulut depodan al", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "kapalı", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Bulut depodan al ve şu anki ayarlarla birleştir", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ aşağıdaki sayfanın yüklenmesini engelledi:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Bu süzgeç nedeniyle", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Bu cihazın adı:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "parametresiz", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Uyarı! Bu ayarları değiştirme sorumluluğu size aittir.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Bulunduğu liste:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Gönder", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Geri git", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Değişiklikleri uygula", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Bu pencereyi kapat", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Geri al", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "{{hostname}} için katı engellemeyi devre dışı bırak", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"byte", - "description":"" + "docblockedDisableTemporary": { + "message": "Geçici olarak", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Geçici olarak büyük medya ögelerine izin ver", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Kalıcı olarak", + "description": "English: Permanently" }, - "dummy":{ - "message":"Bu girdi en sonda olmalıdır", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Bulut depoya aktar", + "description": "tooltip" + }, + "cloudPull": { + "message": "Bulut depodan al", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Bulut depodan al ve şu anki ayarlarla birleştir", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Bu cihazın adı:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Uyarı! Bu ayarları değiştirme sorumluluğu size aittir.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Gönder", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Değişiklikleri uygula", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Geri al", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Geçici olarak büyük medya ögelerine izin ver", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Bu girdi en sonda olmalıdır", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/uk/messages.json b/src/_locales/uk/messages.json index 0b52db7410d65..f412b4f4856de 100644 --- a/src/_locales/uk/messages.json +++ b/src/_locales/uk/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Ефективний блокувальник реклами таки з’явився. Не навантажує процесор та пам'ять.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Ефективний блокувальник реклами таки з’явився. Не навантажує процесор та пам'ять.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"µBlock — Панель керування", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "µBlock — Панель керування", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Налаштування", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Налаштування", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Сторонні фільтри", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Сторонні фільтри", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Власні фільтри", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Власні фільтри", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Мої правила", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Мої правила", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Білий список", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Білий список", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Журнал мережевих запитів", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Журнал мережевих запитів", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Про програму", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Про програму", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Розширені налаштування", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Розширені налаштування", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Натиснення: вимикає\/умикає uBlock₀ для поточного сайту.\n\nCtrl+натиснення: вимикає uBlock₀ тільки для цієї сторінки.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Натиснення: вимикає\/умикає uBlock₀ для поточного сайту.\n\nCtrl+натиснення: вимикає uBlock₀ тільки для цієї сторінки.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"запитів заблоковано", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Натисніть для вимкнення uBlock₀ для поточного сайту.\n\nНатисніть з Ctrl для вимкнення uBlock₀ лише для цієї сторінки.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"на цій сторінці", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Натисніть для увімкнення uBlock₀ для поточного сайту.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} або {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "запитів заблоковано", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"від моменту встановлення", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "на цій сторінці", + "description": "English: on this page" }, - "popupOr":{ - "message":"або", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} або {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Клікніть, щоб відкрити панель керування", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "від моменту встановлення", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Перейти до режиму пульта ДУ", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "або", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Перейти у режим вибору елементів", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Клікніть, щоб відкрити панель керування", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Перейти до журналу запитів", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Перейти до режиму пульта ДУ", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Увімкнути блокування всіх виринаючих вікон цього сайту", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Перейти у режим вибору елементів", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Увімк\/Вимк блокування великих медіа елементів на цьому сайті", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Перейти до журналу запитів", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Переключити косметичний фільтр для цього сайту", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Увімкнути блокування всіх виринаючих вікон цього сайту", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Перемкнути блокування віддалених шрифтів для цього сайту", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Натисніть для бокування всіх зринаючих вікон на цьому сайті", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Глобальні правила: цей стовпчик для правил, що застосовуються для всіх сайтів.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Натисніть для скасування бокування всіх зринаючих вікон на цьому сайті", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Локальні правила: цей стовпчик для правил, що застосовуються лише для цього сайту.\nЛокальні правила замінюють глобальні.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Увімк\/Вимк блокування великих медіа елементів на цьому сайті", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Натисніть, щоб зробити ваші зміни постійними.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Натисніть для блокування великих медіа-елементів на цьому сайті", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Натисніть, щоб відкинути ваші зміни.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Натисніть для скасування блокування великих медіа-елементів на цьому сайті", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"всі", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Переключити косметичний фільтр для цього сайту", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"зображення", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Натисніть для вимкнення косметичних фільтрів на цьому сайті", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"сторонні", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Натисніть для увімкнення косметичних фільтрів на цьому сайті", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"сторонні css\/зображення", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Перемкнути блокування віддалених шрифтів для цього сайту", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"вбудовані сценарії", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Натисніть для бокування всіх віддалених шрифтів на цьому сайті", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"Основні скрипти", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Натисніть для скасування бокування всіх віддалених шрифтів на цьому сайті", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"Сторонні скрипти", - "description":"" + "popupTipGlobalRules": { + "message": "Глобальні правила: цей стовпчик для правил, що застосовуються для всіх сайтів.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"Сторонні фрейми", - "description":"" + "popupTipLocalRules": { + "message": "Локальні правила: цей стовпчик для правил, що застосовуються лише для цього сайту.\nЛокальні правила замінюють глобальні.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"доменів під’єднано", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Натисніть, щоб зробити ваші зміни постійними.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} з {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Натисніть, щоб відкинути ваші зміни.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Створити", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "всі", + "description": "" }, - "pickerPick":{ - "message":"Вибрати", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "зображення", + "description": "" }, - "pickerQuit":{ - "message":"Вийти", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "сторонні", + "description": "" }, - "pickerPreview":{ - "message":"Попередній перегляд", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "сторонні css\/зображення", + "description": "" }, - "pickerNetFilters":{ - "message":"Мережні фільтри", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "вбудовані сценарії", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Косметичні фільтри", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "Основні скрипти", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Клік, Ctrl-клік", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "Сторонні скрипти", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Заблокувати елемент", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "Сторонні фрейми", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ховати заповнювачі заблокованих елементів", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "доменів під’єднано", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Показувати кількість заблокованих запитів на піктограмі", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} з {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Вимкнути підказки", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Створити", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Використовувати контекстне меню там, де це можливо", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Вибрати", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Підтримка дальтонізму", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Вийти", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Увімкнути підтримку хмарного сховища", - "description":"" + "pickerPreview": { + "message": "Попередній перегляд", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Я досвідчений користувач (Обов’язково до прочитання<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Мережні фільтри", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"розширені налаштування", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Косметичні фільтри", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Вимкнути передзавантаження (щоб унеможливити будь-які з’єднання для заблокованих мережевих запитів)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Клік, Ctrl-клік", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Вимкнути перевірку гіперпосилань", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Заблокувати елемент", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Унеможливити витік локальної IP-адреси через WebRTC", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Ховати заповнювачі заблокованих елементів", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Типові налаштування", - "description":"" + "settingsIconBadgePrompt": { + "message": "Показувати кількість заблокованих запитів на піктограмі", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Усталені налаштування можуть бути перевизначеними для кожного сайту окремо", - "description":"" + "settingsTooltipsPrompt": { + "message": "Вимкнути підказки", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Вимкнути косметичні фільтри", - "description":"" + "settingsContextMenuPrompt": { + "message": "Використовувати контекстне меню там, де це можливо", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Блокувати медіа елементи розміром від {{input:number}} кБ", - "description":"" + "settingsColorBlindPrompt": { + "message": "Підтримка дальтонізму", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Блокувати сторонні шрифти", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Увімкнути підтримку хмарного сховища", + "description": "" }, - "settingsStorageUsed":{ - "message":"Використано: {{value}} байт", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Я досвідчений користувач (Обов’язково до прочитання<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Востаннє відновлено:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "розширені налаштування", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Остання резервна копія:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Вимкнути передзавантаження (щоб унеможливити будь-які з’єднання для заблокованих мережевих запитів)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} мережевих фільтрів + {{cosmeticFilterCount}} косметичних фільтрів з:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Вимкнути перевірку гіперпосилань", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"використовується {{used}} з {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Унеможливити витік локальної IP-адреси через WebRTC", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Автоматично оновити списки фільтрів.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Типові налаштування", + "description": "" }, - "3pUpdateNow":{ - "message":"Оновити зараз", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Усталені налаштування можуть бути перевизначеними для кожного сайту окремо", + "description": "" }, - "3pPurgeAll":{ - "message":"Очистити всі кеші", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Вимкнути косметичні фільтри", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Розбір та застосування фільтрів приховування елементів Adblock+.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Блокувати медіа елементи розміром від {{input:number}} кБ", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Увімкнення цієї функції збільшує споживання пам’яті uBlock₀<\/i>'ом.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Блокувати сторонні шрифти", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Ігнорувати загальні косметичні фільтри.", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Блокувати CSP-звіти", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Рекомендується увімкнути цей параметр на слабких пристроях.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Використано: {{value}} байт", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Перелік заблокованих хостів", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Востаннє відновлено:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Застосувати зміни", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Остання резервна копія:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Реклама", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} мережевих фільтрів + {{cosmeticFilterCount}} косметичних фільтрів з:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Конфіденційність", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "використовується {{used}} з {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Домени шкідливих програм", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Автоматично оновити списки фільтрів.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Соціальні", - "description":"English: Social" + "3pUpdateNow": { + "message": "Оновити зараз", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Універсальні", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Очистити всі кеші", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Регіони, мови", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Розбір та застосування фільтрів приховування елементів Adblock+.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Користувацькі", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Увімкнення цієї функції збільшує споживання пам’яті uBlock₀<\/i>'ом.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Одне посилання на рядок. Рядки, що починаються з ‘!’ будуть проігноровані. Невірні посилання будуть тихо проігноровані.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Ігнорувати загальні косметичні фільтри.", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"Застарілий.", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Рекомендується увімкнути цей параметр на слабких пристроях.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Останнє оновлення: {{ago}}", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Перелік заблокованих хостів", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Оновлюється...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Застосувати зміни", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Через помилку мережі не вдалося оновити дані.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Реклама", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Один фільтр на рядок. Фільтром може бути адреса сайту або фільтр у Adblock Plus-сумісному записі. Рядки, що починаються з ‘!’ ігноруються.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Конфіденційність", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Імпортувати та додати", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Домени шкідливих програм", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Експортувати", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Надокучлива реклама", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"ublock-custom-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Універсальні", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Застосувати зміни", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Регіони, мови", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Постійні правила", - "description":"header" + "3pGroupCustom": { + "message": "Користувацькі", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Тимчасові правила", - "description":"header" + "3pExternalListsHint": { + "message": "Одне посилання на рядок. Рядки, що починаються з ‘!’ будуть проігноровані. Невірні посилання будуть тихо проігноровані.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Скасувати зміни", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "Застарілий.", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Затвердити", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Останнє оновлення: {{ago}}", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Редагувати", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Оновлюється...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Зберегти", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Через помилку мережі не вдалося оновити дані.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Відкинути", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Один фільтр на рядок. Фільтром може бути адреса сайту або фільтр у Adblock Plus-сумісному записі. Рядки, що починаються з ‘!’ ігноруються.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":" Імпортувати з файлу...", - "description":"" + "1pImport": { + "message": "Імпортувати та додати", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Експорт до файлу...", - "description":"" + "1pExport": { + "message": "Експортувати", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "ublock-custom-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Список правил динамічного фільтрування.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Застосувати зміни", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Синтаксис правил: джерело призначення тип дія<\/code> (повна документація<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Постійні правила", + "description": "header" }, - "whitelistPrompt":{ - "message":"Ваш список адрес сайтів, для яких µBlock буде неактивним. Додайте по одному запису на рядок. Невірні адреси будуть проігноровані без зауважень.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Тимчасові правила", + "description": "header" }, - "whitelistImport":{ - "message":"Імпортувати та додати", - "description":"English: Import and append" + "rulesRevert": { + "message": "Скасувати зміни", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Експортувати", - "description":"English: Export" + "rulesCommit": { + "message": "Затвердити", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Редагувати", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Застосувати зміни", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Зберегти", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Тип", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Відкинути", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Домен", - "description":"English: Domain" + "rulesImport": { + "message": " Імпортувати з файлу...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"Адреса", - "description":"English: URL" + "rulesExport": { + "message": "Експорт до файлу...", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Фільтр", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Все", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Список правил динамічного фільтрування.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"За лаштунками", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Синтаксис правил: джерело призначення тип дія<\/code> (повна документація<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"фільтр журналу записів", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Ваш список адрес сайтів, для яких µBlock буде неактивним. Додайте по одному запису на рядок. Невірні адреси будуть проігноровані без зауважень.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Максимальна кількість записів в журналі", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Імпортувати та додати", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Контекст:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Експортувати", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Тип:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Динамічна фільтрація посилань", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Застосувати зміни", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Статична фільтрація", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Тип", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} мережеві запити {{type}}, {{br}}посилання яких збігаються з {{url}} {{br}}та які {{origin}},{{br}}{{importance}} є відповідний фільтр-виняток.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Домен", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Блокувати", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "Адреса", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Дозволити", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Фільтр", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"типу „{{type}}“", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Все", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"будь-якого типу", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "За лаштунками", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"походять із „{{origin}}“", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "фільтр журналу записів", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"мають будь-яке походження", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Максимальна кількість записів в журналі", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"крім випадків, коли", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Контекст:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"навіть якщо", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Тип:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Статичний фільтр {{filter}} знайдено в:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Динамічна фільтрація посилань", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Журнал змін", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Статична фільтрація", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Вікі", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} мережеві запити {{type}}, {{br}}посилання яких збігаються з {{url}} {{br}}та які {{origin}},{{br}}{{importance}} є відповідний фільтр-виняток.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Підтримка", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Блокувати", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Джерельний код (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Дозволити", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Учасники", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "типу „{{type}}“", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Зберегти резервну копію у файл...", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "будь-якого типу", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "походять із „{{origin}}“", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Відновити з файлу...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "мають будь-яке походження", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Відновити параметри за замовчанням...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "крім випадків, коли", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Всі ваші налаштування будуть перезаписані з резервної копії від {{time}} та µBlock буде перезапущено.\n\nПерезаписати всі налаштування використовуючи резервну копію?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "навіть якщо", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Дані помилкові або не можуть бути прочитані", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Статичний фільтр {{filter}} знайдено в:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Ваші налаштування буде видалено та µBlock буде перезапущено.\n\nПовернути µBlock до початкових налаштувань?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Журнал змін", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Не вдалося підключитися до {{url}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Вікі", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Додати це посилання до списку ваших фільтрів?\n\nНазва: \"{{title}}\"\nПосилання: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Підтримка", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"хвилину тому", - "description":"English: a minute ago" + "aboutCode": { + "message": "Джерельний код (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} хвилин(и) тому", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Учасники", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"годину тому", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Зберегти резервну копію у файл...", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} годин(и) тому", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"день тому", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Відновити з файлу...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} дні(в) тому", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Відновити параметри за замовчанням...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Показати панель керування", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Всі ваші налаштування будуть перезаписані з резервної копії від {{time}} та µBlock буде перезапущено.\n\nПерезаписати всі налаштування використовуючи резервну копію?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Показати журнал мережевих запитів", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Дані помилкові або не можуть бути прочитані", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"Відключений", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Ваші налаштування буде видалено та µBlock буде перезапущено.\n\nПовернути µBlock до початкових налаштувань?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock запобіг завантаженню наступної сторінки:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Не вдалося підключитися до {{url}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Через наступний фільтр", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Додати це посилання до списку ваших фільтрів?\n\nНазва: \"{{title}}\"\nПосилання: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"без параметрів", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "хвилину тому", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Знайдено в:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} хвилин(и) тому", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Повернутись назад", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "годину тому", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Зачинити це вікно", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} годин(и) тому", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Вимкнути повне блокування для {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "день тому", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Тимчасово", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} дні(в) тому", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Завжди", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Показати панель керування", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Експортувати до хмарного сховища", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Показати журнал мережевих запитів", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Імпортувати із хмарного сховища", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "Відключений", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Імпортувати з хмари та об'єднати з чинними налаштуваннями", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock запобіг завантаженню наступної сторінки:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Через наступний фільтр", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Назва цього пристрою:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "без параметрів", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Зверніть увагу! Зміна додаткових налаштувань на ваш ризик.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Знайдено в:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Надіслати", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Повернутись назад", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Застосувати зміни", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Зачинити це вікно", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Скасувати зміни", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Вимкнути повне блокування для {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"байтів", - "description":"" + "docblockedDisableTemporary": { + "message": "Тимчасово", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Тимчасово дозволити великі медіа елементи", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Завжди", + "description": "English: Permanently" }, - "dummy":{ - "message":"Цей запис має бути останнім", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Експортувати до хмарного сховища", + "description": "tooltip" + }, + "cloudPull": { + "message": "Імпортувати із хмарного сховища", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Імпортувати з хмари та об'єднати з чинними налаштуваннями", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Назва цього пристрою:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Зверніть увагу! Зміна додаткових налаштувань на ваш ризик.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Надіслати", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Застосувати зміни", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Скасувати зміни", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "байтів", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Тимчасово дозволити великі медіа елементи", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Цей запис має бути останнім", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/vi/messages.json b/src/_locales/vi/messages.json index e3e27ec164fc4..b9707f6604746 100644 --- a/src/_locales/vi/messages.json +++ b/src/_locales/vi/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"Cuối cùng, đã có một công cụ chặn quảng cáo hiệu quả, tiêu tốn ít CPU và bộ nhớ.", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "Cuối cùng, đã có một công cụ chặn quảng cáo hiệu quả, tiêu tốn ít CPU và bộ nhớ.", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — Bảng điều khiển", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — Bảng điều khiển", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"Cấu hình", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "Cấu hình", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"Bộ lọc bên thứ ba", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "Bộ lọc bên thứ ba", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"Bộ lọc của tôi", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "Bộ lọc của tôi", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"Quy tắc của tôi", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "Quy tắc của tôi", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"Danh sách trắng", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "Danh sách trắng", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — Nhật ký các yêu cầu", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — Nhật ký các yêu cầu", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"Giới thiệu", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "Giới thiệu", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"Cài đặt nâng cao", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "Cài đặt nâng cao", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"Nhấp chuột: vô hiệu\/kích hoạt uBlock₀ cho trang này.\nCtrl + nhấp chuột: chỉ vô hiệu uBlock₀ trên trang này.", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "Nhấp chuột: vô hiệu\/kích hoạt uBlock₀ cho trang này.\nCtrl + nhấp chuột: chỉ vô hiệu uBlock₀ trên trang này.", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"yêu cầu đã chặn", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "Nhấp chuột: vô hiệu hoá uBlock₀ cho trang này.\nCtrl + nhấp chuột: chỉ vô hiệu hoá uBlock₀ trên trang này.", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"trên trang này", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "Nhấp để bật uBO trên trang này.", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} hoặc {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "yêu cầu đã chặn", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"từ lúc cài đặt", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "trên trang này", + "description": "English: on this page" }, - "popupOr":{ - "message":"hoặc", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} hoặc {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"Mở bảng điều khiển", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "từ lúc cài đặt", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Chọn chế độ zapper", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "hoặc", + "description": "English: or" }, - "popupTipPicker":{ - "message":"Chuyển sang chế độ chọn phần tử", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "Mở bảng điều khiển", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"Mở nhật ký", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "Chuyển sang chế độ chọn phần tử", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"Bật\/tắt chặn popup của trang này", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "Chuyển sang chế độ chọn phần tử", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"Bật tắt chặn yếu tố đa phương tiện lớn trên trang này", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "Mở nhật ký", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"Bật\/tắt bộ lọc phần tử trên trang này", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "Bật\/tắt chặn popup của trang này", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"Bật tắt chặn font từ xa trên trang này", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "Nhấp để chặn tất cả cửa sổ bật lên trên trang này", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"Quy tắc chung: cột này dành cho quy tắc áp dụng cho mọi trang.", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "Nhấp để hủy chặn tất cả cửa sổ bật lên trên trang này", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"Quy tắc nội bộ: cột này dành cho quy tắc chỉ áp dụng cho trang hiện tại.\nQuy tắc nội bộ sẽ thay thế quy tắc chung.", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "Bật tắt chặn yếu tố đa phương tiện lớn trên trang này", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"Bấm để thay đổi vĩnh viễn.", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "Nhấp để chặn các yếu tố truyền thông lớn trên trang này", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"Bấm để hoàn tác thay đổi.", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "Nhấp để hủy các yếu tố truyền thông lớn trên trang này", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"tất cả", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "Bật\/tắt bộ lọc phần tử trên trang này", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"hình ảnh", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "Nhấp để vô hiệu hoá lọc mỹ phẩm trên trang này", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"bên thứ ba", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "Nhấp để bật lọc mỹ phẩm trên trang này", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"css\/hình ảnh bên thứ ba", - "description":"" + "popupTipNoRemoteFonts": { + "message": "Bật tắt chặn font từ xa trên trang này", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"script cùng dòng", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "Nhấp để chặn font từ xa trên trang này", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"script bên thứ nhất", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "Nhấp để hủy chặn font từ xa trên trang này", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"script bên thứ ba", - "description":"" + "popupTipGlobalRules": { + "message": "Quy tắc chung: cột này dành cho quy tắc áp dụng cho mọi trang.", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"khung bên thứ ba", - "description":"" + "popupTipLocalRules": { + "message": "Quy tắc nội bộ: cột này dành cho quy tắc chỉ áp dụng cho trang hiện tại.\nQuy tắc nội bộ sẽ thay thế quy tắc chung.", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"tên miền đã kết nối", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "Bấm để thay đổi vĩnh viễn.", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} trên tổng {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "Bấm để hoàn tác thay đổi.", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"Tạo", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "tất cả", + "description": "" }, - "pickerPick":{ - "message":"Chọn", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "hình ảnh", + "description": "" }, - "pickerQuit":{ - "message":"Thoát", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "bên thứ ba", + "description": "" }, - "pickerPreview":{ - "message":"Xem trước", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "css\/hình ảnh bên thứ ba", + "description": "" }, - "pickerNetFilters":{ - "message":"Các bộ lọc mạng", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "script cùng dòng", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"Bộ lọc phần tử ẩn", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "script bên thứ nhất", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"Nhấp chuột, Ctrl-nhấp chuột", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "script bên thứ ba", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"Chặn phần tử", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "khung bên thứ ba", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"Ẩn các phần giữ chỗ của những phần tử bị chặn", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "tên miền đã kết nối", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"Hiển thị số lượng yêu cầu bị chặn trên biểu tượng", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} trên tổng {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"Vô hiệu mách nước", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "Tạo", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"Dùng menu ngữ cảnh nơi thích hợp", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "Chọn", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"Thân thiện với người mù màu", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "Thoát", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"Kích hoạt hỗ trợ lưu trữ trực tuyến", - "description":"" + "pickerPreview": { + "message": "Xem trước", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"Tôi là một người dùng có kinh nghiệm (Yêu cầu đọc qua<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "Các bộ lọc mạng", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"cài đặt nâng cao", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "Bộ lọc phần tử ẩn", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"Vô hiệu tải trước (để chặn bất kỳ kết nối với những yêu cầu mạng đã chặn)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "Nhấp chuột, Ctrl-nhấp chuột", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"Vô hiệu giám sát siêu liên kết", - "description":"English: " + "pickerContextMenuEntry": { + "message": "Chặn phần tử", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"Ngặn WebRTC làm lộ địa chỉ IP nội bộ", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "Ẩn các phần giữ chỗ của những phần tử bị chặn", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"Hành vi mặc định", - "description":"" + "settingsIconBadgePrompt": { + "message": "Hiển thị số lượng yêu cầu bị chặn trên biểu tượng", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"Những hành vi này có thể thay thế tiêu chuẩn từng trang", - "description":"" + "settingsTooltipsPrompt": { + "message": "Vô hiệu mách nước", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"Vô hiệu lọc phần tử ẩn", - "description":"" + "settingsContextMenuPrompt": { + "message": "Dùng menu ngữ cảnh nơi thích hợp", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"Chặn yếu tố đa phương tiện lớn hơn {{input:number}} kB", - "description":"" + "settingsColorBlindPrompt": { + "message": "Thân thiện với người mù màu", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"Chặn font từ xa", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "Kích hoạt hỗ trợ lưu trữ trực tuyến", + "description": "" }, - "settingsStorageUsed":{ - "message":"Bộ nhớ đã dùng: {{value}} byte", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "Tôi là một người dùng có kinh nghiệm (Yêu cầu đọc qua<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"Lần phục hồi trước:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "cài đặt nâng cao", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"Lần sao lưu trước:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "Vô hiệu tải trước (để chặn bất kỳ kết nối với những yêu cầu mạng đã chặn)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"{{netFilterCount}} bộ lọc mạng + {{cosmeticFilterCount}} bộ lọc phần tử ẩn từ:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "Vô hiệu giám sát siêu liên kết", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"Đã dùng {{used}} trên {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "Ngặn WebRTC làm lộ địa chỉ IP nội bộ", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"Các danh sách bộ lọc tự cập nhật.", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "Hành vi mặc định", + "description": "" }, - "3pUpdateNow":{ - "message":"Cập nhật ngay", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "Những hành vi này có thể thay thế tiêu chuẩn từng trang", + "description": "" }, - "3pPurgeAll":{ - "message":"Dọn tất cả bộ nhớ đệm", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "Vô hiệu lọc phần tử ẩn", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"Phân tích và thi hành bộ lọc phần tử ẩn.", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "Chặn yếu tố đa phương tiện lớn hơn {{input:number}} kB", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

Kích hoạt tính năng này sẽ tăng mức sử dụng bộ nhớ của uBlock₀.<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "Chặn font từ xa", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"Bỏ qua bộ lọc phần tử ẩn chung", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "Chặn các báo cáo CSP", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

Chúng tôi khuyến cáo bạn nên kích hoạt tuỳ chọn này trên các thiết bị không quá mạnh.", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "Bộ nhớ đã dùng: {{value}} byte", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"Danh sách những máy chủ bị chặn", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "Lần phục hồi trước:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"Áp dụng các thay đổi", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "Lần sao lưu trước:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"Quảng cáo", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "{{netFilterCount}} bộ lọc mạng + {{cosmeticFilterCount}} bộ lọc phần tử ẩn từ:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"Riêng tư", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "Đã dùng {{used}} trên {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"Các tên miền nguy hiểm", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "Các danh sách bộ lọc tự cập nhật.", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"Xã hội", - "description":"English: Social" + "3pUpdateNow": { + "message": "Cập nhật ngay", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"Đa chức năng", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "Dọn tất cả bộ nhớ đệm", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"Khu vực, ngôn ngữ", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "Phân tích và thi hành bộ lọc phần tử ẩn.", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"Tuỳ chỉnh", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

Kích hoạt tính năng này sẽ tăng mức sử dụng bộ nhớ của uBlock₀.<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"Một URL cho mỗi dòng. Dòng bắt đầu với ‘!’sẽ bị bỏ qua. Các URL không hợp lệ sẽ được bỏ qua âm thầm.", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "Bỏ qua bộ lọc phần tử ẩn chung", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"đã cũ", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

Chúng tôi khuyến cáo bạn nên kích hoạt tuỳ chọn này trên các thiết bị không quá mạnh.", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"Cập nhật mới: {{ago}}.\nClick để cập nhập.", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "Danh sách những máy chủ bị chặn", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"Đang cập nhật...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "Áp dụng các thay đổi", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"Một lỗi mạng khiến cho tài nguyên không thể cập nhật.", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "Quảng cáo", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"Một bộ lọc trên mỗi dòng. Một bộ lọc có thể là một tên máy chủ đơn giản, hoặc một bộ lọc Adblock Plus tương thích. Những dòng bắt đầu với ‘!’ sẽ bị bỏ qua.", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "Riêng tư", + "description": "English: Privacy" }, - "1pImport":{ - "message":"Nhập và thêm vào", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "Các tên miền nguy hiểm", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"Xuất", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "Những bất tiện", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "Đa chức năng", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"Áp dụng các thay đổi", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "Khu vực, ngôn ngữ", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"Quy tắc vĩnh viễn", - "description":"header" + "3pGroupCustom": { + "message": "Tuỳ chỉnh", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"Quy tắc tạm thời", - "description":"header" + "3pExternalListsHint": { + "message": "Một URL cho mỗi dòng. Dòng bắt đầu với ‘!’sẽ bị bỏ qua. Các URL không hợp lệ sẽ được bỏ qua âm thầm.", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"Phục hồi", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "đã cũ", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"Xác nhận", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "Cập nhật mới: {{ago}}.\nClick để cập nhập.", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"Chỉnh sửa", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "Đang cập nhật...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"Lưu", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "Một lỗi mạng khiến cho tài nguyên không thể cập nhật.", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"Huỷ", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "Một bộ lọc trên mỗi dòng. Một bộ lọc có thể là một tên máy chủ đơn giản, hoặc một bộ lọc Adblock Plus tương thích. Những dòng bắt đầu với ‘!’ sẽ bị bỏ qua.", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"Nhập từ tập tin...", - "description":"" + "1pImport": { + "message": "Nhập và thêm vào", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"Xuất ra tập tin", - "description":"" + "1pExport": { + "message": "Xuất", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"Danh sách quy tắc lọc chủ động.", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "Áp dụng các thay đổi", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"Quy tắc cú pháp: nguồn đích loại hành động<\/code> (tài liệu đầy đủ<\/a>).", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "Quy tắc vĩnh viễn", + "description": "header" }, - "whitelistPrompt":{ - "message":"Danh sách tên các máy chủ mà µBlock₀ sẽ bị vô hiệu. Một mục nhập trên mỗi dòng. Tên máy chủ không hợp lệ sẽ được tự động bỏ qua.", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "Quy tắc tạm thời", + "description": "header" }, - "whitelistImport":{ - "message":"Nhập và thêm vào", - "description":"English: Import and append" + "rulesRevert": { + "message": "Phục hồi", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"Xuất", - "description":"English: Export" + "rulesCommit": { + "message": "Xác nhận", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "Chỉnh sửa", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"Áp dụng các thay đổi", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "Lưu", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"Loại", - "description":"English: Type" + "rulesEditDiscard": { + "message": "Huỷ", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"Tên miền", - "description":"English: Domain" + "rulesImport": { + "message": "Nhập từ tập tin...", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "Xuất ra tập tin", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"Bộ lọc", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"Tất cả", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "Danh sách quy tắc lọc chủ động.", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"Behind the scene", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "Quy tắc cú pháp: nguồn đích loại hành động<\/code> (tài liệu đầy đủ<\/a>).", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"lọc mục ghi nhận", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "Danh sách tên các máy chủ mà uBlock₀ sẽ bị chặn. Một mục nhập trên mỗi dòng. Tên máy chủ không hợp lệ sẽ được tự động bỏ qua.", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"Số mục ghi nhận tối đa", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "Nhập và thêm vào", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"Ngữ cảnh:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "Xuất", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"Loại:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"Lọc URL chủ động", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "Áp dụng các thay đổi", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"Bộ lọc tĩnh", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "Loại", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} yêu cầu mạng của {{type}} {{br}}có địa chỉ URL phù hợp {{url}} {{br}}và từ nguồn {{origin}},{{br}}{{importance}} có một bộ lọc loại trừ phù hợp.", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "Tên miền", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"Chặn", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"Cho phép", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "Bộ lọc", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"loại “{{type}}”", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "Tất cả", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"mọi loại", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "Behind the scene", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"từ “{{origin}}”", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "lọc mục ghi nhận", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"từ mọi nơi", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "Số mục ghi nhận tối đa", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"loại trừ khi", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "Ngữ cảnh:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"loại trừ nếu", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "Loại:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"Bộ lọc tĩnh {{filter}} phát hiện trong:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "Lọc URL chủ động", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"Thay đổi", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "Bộ lọc tĩnh", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} yêu cầu mạng của {{type}} {{br}}có địa chỉ URL phù hợp {{url}} {{br}}và từ nguồn {{origin}},{{br}}{{importance}} có một bộ lọc loại trừ phù hợp.", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"Hỗ trợ", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "Chặn", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"Mã nguồn (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "Cho phép", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"Những người đóng góp", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "loại “{{type}}”", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"Sao lưu vào tập tin...", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "mọi loại", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "từ “{{origin}}”", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"Khôi phục từ tập tin...", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "từ mọi nơi", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"Đặt lại cấu hình mặc định...", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "loại trừ khi", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"Các thiết lập của bạn sẽ bị ghi đè bởi dữ liệu đã lưu vào lúc {{time}}, và uBlock₀ sẽ khởi động lại. \n\nGhi đè các thiết lập hiện tại bằng dữ liệu đã lưu?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "loại trừ nếu", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"Không thể đọc dữ liệu hoặc dữ liệu không hợp lệ", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "Bộ lọc tĩnh {{filter}} phát hiện trong:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"Các thiết lập sẽ bị xóa và uBlock₀ sẽ khởi động lại. \n\nThiết lập uBlock₀ về cấu hình ban đầu?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "Thay đổi", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"Không thể kết nối đến {{url}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀: Thêm URL dưới đây vào bộ lọc tuỳ biến của bạn?\n\nTên: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "Hỗ trợ", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"một phút trước", - "description":"English: a minute ago" + "aboutCode": { + "message": "Mã nguồn (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} phút trước", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "Những người đóng góp", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"một giờ trước", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "Sao lưu vào tập tin...", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} giờ trước", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"một ngày trước", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "Khôi phục từ tập tin...", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} ngày trước", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "Đặt lại cấu hình mặc định...", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"Hiện bảng điều khiển", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "Các thiết lập của bạn sẽ bị ghi đè bởi dữ liệu đã lưu vào lúc {{time}}, và uBlock₀ sẽ khởi động lại. \n\nGhi đè các thiết lập hiện tại bằng dữ liệu đã lưu?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"Hiện nhật ký", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "Không thể đọc dữ liệu hoặc dữ liệu không hợp lệ", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"tắt", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "Các thiết lập sẽ bị xóa và uBlock₀ sẽ khởi động lại. \n\nThiết lập uBlock₀ về cấu hình ban đầu?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBloc Origin đã chặn tải trang sau:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "Lỗi kết nối: {{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"Vì bộ lọc sau", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀: Thêm URL dưới đây vào bộ lọc tuỳ biến của bạn?\n\nTên: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"không có thông số", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "một phút trước", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"Tìm thấy trong:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} phút trước", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"Trở lại", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "một giờ trước", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"Đóng cửa sổ này", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} giờ trước", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"Vô hiệu chặn nghiêm ngặt cho {{hostname}}", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "một ngày trước", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"Tạm thời", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} ngày trước", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"Vĩnh viễn", - "description":"English: Permanently" + "showDashboardButton": { + "message": "Hiện bảng điều khiển", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"Xuất ra lưu trữ trực tuyến", - "description":"tooltip" + "showNetworkLogButton": { + "message": "Hiện nhật ký", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"Nhập từ lưu trữ trực tuyến", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "tắt", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"Nhập từ bộ lưu trữ trực tuyến và ghép với các thiết lập hiện tại", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBloc Origin đã chặn tải trang sau:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"...\n...", - "description":"" + "docblockedPrompt2": { + "message": "Vì bộ lọc sau", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"Tên thiết bị này:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "không có thông số", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"Cảnh báo! Bạn phải chịu trách nhiệm cho những nguy cơ khi thay đổi các cài đặt nâng cao này.", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "Tìm thấy trong:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"Gửi", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "Trở lại", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"Áp dụng các thay đổi", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "Đóng cửa sổ này", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"Phục hồi", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "Vô hiệu chặn nghiêm ngặt cho {{hostname}}", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"byte", - "description":"" + "docblockedDisableTemporary": { + "message": "Tạm thời", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"Tạm thời cho phép yếu tố đa phương tiện lớn", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "Vĩnh viễn", + "description": "English: Permanently" }, - "dummy":{ - "message":"Đây là mục cuối", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "Xuất ra lưu trữ trực tuyến", + "description": "tooltip" + }, + "cloudPull": { + "message": "Nhập từ lưu trữ trực tuyến", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "Nhập từ bộ lưu trữ trực tuyến và ghép với các thiết lập hiện tại", + "description": "tooltip" + }, + "cloudNoData": { + "message": "...\n...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "Tên thiết bị này:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "Cảnh báo! Bạn phải chịu trách nhiệm cho những nguy cơ khi thay đổi các cài đặt nâng cao này.", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "Gửi", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "Áp dụng các thay đổi", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "Phục hồi", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "byte", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "Tạm thời cho phép yếu tố đa phương tiện lớn", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "Đây là mục cuối", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/zh_CN/messages.json b/src/_locales/zh_CN/messages.json index c0c311348319b..6204a79418f9c 100644 --- a/src/_locales/zh_CN/messages.json +++ b/src/_locales/zh_CN/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"一款高效的网络请求过滤工具,占用极低的内存和 CPU。", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "一款高效的网络请求过滤工具,占用极低的内存和 CPU。", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ 控制面板", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ 控制面板", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"设置", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "设置", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"第三方规则列表", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "第三方规则列表", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"自定义规则列表", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "自定义规则列表", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"自定义规则", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "自定义规则", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"白名单", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "白名单", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — 网络请求日志", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — 网络请求日志", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"关于", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "关于", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"高级设置", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "高级设置", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"单击:对此网站禁用\/启用 uBlock₀。\n\nCtrl + 单击:在此页面上禁用 uBlock₀。", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "单击:对此网站禁用\/启用 uBlock₀。\n\nCtrl + 单击:在此页面上禁用 uBlock₀。", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"请求已拦截", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "单击:对此网站禁用 uBlock₀ 。\n\nCtrl + 单击:仅在此页面上禁用 uBlock₀ 。", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"此页面上的", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "单击:对此网站启用 uBlock₀ 。", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} 或称 {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "请求已拦截", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"总计", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "此页面上的", + "description": "English: on this page" }, - "popupOr":{ - "message":"或称", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} 或称 {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"单击打开控制面板", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "总计", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"进入元素临时移除模式", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "或", + "description": "English: or" }, - "popupTipPicker":{ - "message":"进入元素选择器模式", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "打开控制面板", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"查看网络请求日志", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "进入元素临时移除模式", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"禁止此网站弹出任何窗口", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "进入元素选择器模式", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"是否屏蔽在此网站上较大的媒体元素", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "查看网络请求日志", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"不对此网站应用修饰规则", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "是否禁止此网站弹出任何窗口", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"阻止此网站的第三方字体", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "单击屏蔽此网站所有弹窗", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"全局规则:此列的规则作用于所有网站。", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "单击取消屏蔽此网站所有弹窗", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"本地规则:此列的规则仅作用于当前网站。\n本地规则优先于全局规则。", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "是否屏蔽在此网站上较大的媒体元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"使更改永久生效。", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "单击屏蔽此网站大型媒体元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"还原更改。", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "单击取消屏蔽此网站大型媒体元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"全部", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "是否对此网站应用修饰规则", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"图像", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "单击禁用此网站上的元素过滤", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"第三方", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "单击启用此网站上的元素过滤", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"第三方 css\/图片", - "description":"" + "popupTipNoRemoteFonts": { + "message": "是否阻止此网站的第三方字体", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"内联脚本", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "单击屏蔽此网站上的远程字体", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"第一方脚本", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "单击取消屏蔽此网站上的远程字体", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"第三方脚本", - "description":"" + "popupTipGlobalRules": { + "message": "全局规则:此列的规则作用于所有网站。", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"第三方框架", - "description":"" + "popupTipLocalRules": { + "message": "本地规则:此列的规则仅作用于当前网站。\n本地规则优先于全局规则。", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"作用到的域", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "使更改永久生效。", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} \/ {{total}} 个域", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "还原更改。", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"创建", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "全部", + "description": "" }, - "pickerPick":{ - "message":"选择", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "图像", + "description": "" }, - "pickerQuit":{ - "message":"放弃", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "第三方", + "description": "" }, - "pickerPreview":{ - "message":"预览", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "第三方 css\/图片", + "description": "" }, - "pickerNetFilters":{ - "message":"URL 过滤规则", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "内联脚本", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"元素过滤规则", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "第一方脚本", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"单击,Ctrl + 单击", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "第三方脚本", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"屏蔽元素", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "第三方框架", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"隐藏已屏蔽元素的占位符", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "作用到的域", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"在图标上显示拦截请求数", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} \/ {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"不显示悬停提示", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "创建", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"加入右键菜单", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "选择", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"适合色盲人士", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "放弃", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"启用云端储存", - "description":"" + "pickerPreview": { + "message": "预览", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"我是高级用户 (必读<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "URL 过滤规则", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"高级设置", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "元素过滤规则", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"禁止预读取(拦截对已屏蔽网络请求的任何连接)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "单击,Ctrl + 单击", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"禁用超链接审计(hyperlink auditing)", - "description":"English: " + "pickerContextMenuEntry": { + "message": "屏蔽元素", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"避免 WebRTC 泄露本地IP地址", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "隐藏已屏蔽元素的占位符", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"默认行为", - "description":"" + "settingsIconBadgePrompt": { + "message": "在图标上显示拦截请求数", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"这些默认行为可以在各网站上覆盖", - "description":"" + "settingsTooltipsPrompt": { + "message": "不显示悬停提示", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"禁用元素过滤规则", - "description":"" + "settingsContextMenuPrompt": { + "message": "加入右键菜单", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"屏蔽大于 {{input:number}} kB 的媒体元素", - "description":"" + "settingsColorBlindPrompt": { + "message": "适合色盲人士", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"屏蔽远程字体", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "启用云端储存", + "description": "" }, - "settingsStorageUsed":{ - "message":"已用空间:{{value}} 字节", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "我是高级用户 (必读<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"上次恢复:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "高级设置", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"上次备份:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "禁止预读取(拦截对已屏蔽网络请求的任何连接)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"当前使用了 {{netFilterCount}} 个 URL 过滤规则和 {{cosmeticFilterCount}} 个元素过滤规则:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "禁用超链接审计(hyperlink auditing)", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"已使用 {{used}} \/ {{total}}", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "避免 WebRTC 泄露本地IP地址", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"自动更新规则列表。", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "默认行为", + "description": "" }, - "3pUpdateNow":{ - "message":"立即更新", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "默认设置会被具体站点设置覆盖", + "description": "" }, - "3pPurgeAll":{ - "message":"清除所有缓存", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "停用元素过滤规则", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"解析并应用元素过滤规则。", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "屏蔽大于 {{input:number}} kB 的媒体元素", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

启用这项功能将增加 uBlock₀<\/i> 的内存使用量。<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "屏蔽远程字体", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"忽略通用元素过滤规则。", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "屏蔽 CSP 报告", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

推荐低性能设备启用此选项。", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "已用空间:{{value}} 字节", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"被屏蔽站点列表", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "上次恢复:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"应用更改", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "上次备份:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"广告", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "当前使用了 {{netFilterCount}} 个 URL 过滤规则和 {{cosmeticFilterCount}} 个元素过滤规则:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"隐私", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "已使用 {{used}} \/ {{total}}", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"恶意网站", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "自动更新规则列表", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"社交", - "description":"English: Social" + "3pUpdateNow": { + "message": "立即更新", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"多用途", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "清除所有缓存", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"区域、语言", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "解析并应用元素过滤规则。", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"自定义", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

启用这项功能将增加 uBlock₀<\/i> 的内存使用量。<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"一行一条 URL。以 ‘!’ 开头的行将被忽略,无效的 URL 也将被忽略。", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "忽略通用元素过滤规则。", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"已过时", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

推荐低性能设备启用此选项。", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"上次更新:{{ago}}\n点此强制更新", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "被屏蔽站点列表", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"正在更新...", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "应用更改", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"资源更新因网络错误受阻。", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "广告", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"一行一条过滤规则。每条规则可以是一个普通的主机名或者是一条 Adblock Plus 兼容的过滤规则。以 ‘!’ 开头的行将被忽略。", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "隐私", + "description": "English: Privacy" }, - "1pImport":{ - "message":"导入并添加", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "恶意网站", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"导出", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "骚扰", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"my-ublock-static-filters_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "多用途", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"应用更改", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "区域、语言", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"永久规则", - "description":"header" + "3pGroupCustom": { + "message": "自定义", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"临时规则", - "description":"header" + "3pExternalListsHint": { + "message": "一行一条 URL。以 ‘!’ 开头的行将被忽略,无效的 URL 也将被忽略。", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"还原", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "需要更新", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"提交", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "上次更新:{{ago}}\n点此强制更新", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"编辑", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "正在更新...", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"保存", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "资源更新因网络错误受阻。", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"取消", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "一行一条过滤规则。每条规则可以是一个普通的主机名或者是一条 Adblock Plus 兼容的过滤规则。以 ‘!’ 开头的行将被忽略。", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"从文件导入…", - "description":"" + "1pImport": { + "message": "导入并添加", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"导出到文件", - "description":"" + "1pExport": { + "message": "导出", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"my-ublock-dynamic-rules_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "my-ublock-static-filters_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"自定义动态过滤规则列表。", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "应用更改", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"规则语法:来源 目标 资源类型 操作<\/code>(完整文档<\/a>)。", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "永久规则", + "description": "header" }, - "whitelistPrompt":{ - "message":"您的列表中针对 µBlock 的主机名将被禁用。每行一条规则。无效的主机名将直接被忽略。", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "临时规则", + "description": "header" }, - "whitelistImport":{ - "message":"导入并添加", - "description":"English: Import and append" + "rulesRevert": { + "message": "恢复", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"导出", - "description":"English: Export" + "rulesCommit": { + "message": "提交", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"my-ublock-whitelist_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "编辑", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"应用更改", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "保存", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"类型", - "description":"English: Type" + "rulesEditDiscard": { + "message": "取消", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"域名", - "description":"English: Domain" + "rulesImport": { + "message": "从文件导入…", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"URL", - "description":"English: URL" + "rulesExport": { + "message": "导出到文件", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"过滤", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "my-ublock-dynamic-rules_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"全部", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "自定义动态过滤规则列表。", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"后台", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "规则语法:来源 目标 资源类型 操作<\/code>(完整文档<\/a>)。", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"过滤日志条目", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "您的列表中针对 µBlock 的主机名将被禁用。每行一条规则。无效的主机名将直接被忽略。", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"日志条目最大数量", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "导入并添加", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"上下文:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "导出", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"类型:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "my-ublock-whitelist_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"动态 URL 过滤", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "应用更改", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"静态规则", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "类型", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"{{action}} URL 匹配{{br}}{{url}}{{br}}且来源于 {{origin}} 的 {{type}} 的网络请求,{{br}}{{importance}}有一个匹配的例外规则。", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "域名", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"拦截", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "URL", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"允许", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "过滤", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"“{{type}}”类型", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "全部", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"任何类型", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "后台", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"来源于 \"{{origin}}\"", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "过滤日志条目", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"所有范围", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "日志条目最大数量", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"除非", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "上下文:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"即使", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "类型:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"静态规则 {{filter}} 被包含于:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "动态 URL 过滤", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"更新日志", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "静态规则", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"Wiki", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "{{action}} URL 匹配{{br}}{{url}}{{br}}且来源于 {{origin}} 的 {{type}} 的网络请求,{{br}}{{importance}}有一个匹配的例外规则。", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"帮助", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "拦截", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"源代码 (GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "允许", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"贡献者", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "“{{type}}”类型", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"备份到文件", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "任何类型", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"my-ublock-backup_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "来源于 \"{{origin}}\"", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"从文件还原…", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "所有范围", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"重置为默认设置…", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "除非", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"您的所有设置将被备份于 {{time}} 的数据覆盖,并且 uBlock₀ 将重新启动。\n确定要用备份的数据覆盖全部现有设置吗?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "即使", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"数据无法读取或无效", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "静态规则 {{filter}} 被包含于:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"您的设置将被清除,uBlock₀ 将重新启动。\n\n确定将 uBlock₀ 重置到初始状态?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "更新日志", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"网络错误:{{msg}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "Wiki", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀:添加下列 URL 到您的自定义规则列表吗?\n\n标题: \"{{title}}\"\nURL: {{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "支持", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"一分钟前", - "description":"English: a minute ago" + "aboutCode": { + "message": "源代码 (GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} 分钟前", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "贡献者", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"一小时前", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "备份到文件", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} 小时前", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "my-ublock-backup_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"一天前", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "从文件还原…", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} 天前", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "重置为默认设置…", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"显示控制面板", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "您的所有设置将被备份于 {{time}} 的数据覆盖,并且 uBlock₀ 将重新启动。\n确定要用备份的数据覆盖全部现有设置吗?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"显示网络日志记录器", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "数据无法读取或无效", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"关", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "您的设置将被清除,uBlock₀ 将重新启动。\n\n确定将 uBlock₀ 重置到初始状态?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ 阻止了下列页面加载:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "网络错误:{{msg}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"因为下列过滤规则", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀:添加下列 URL 到您的自定义规则列表吗?\n\n标题: \"{{title}}\"\nURL: {{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"无参数", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "一分钟前", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"被包含于:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} 分钟前", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"返回", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "一小时前", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"关闭此窗口", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} 小时前", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"不对 {{hostname}} 进行严格屏蔽", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "一天前", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"暂时", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} 天前", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"永久", - "description":"English: Permanently" + "showDashboardButton": { + "message": "显示控制面板", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"导出到云端储存", - "description":"tooltip" + "showNetworkLogButton": { + "message": "显示网络日志记录器", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"从云端储存导入", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "关", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"从云存储导入并与当前设置合并", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ 阻止了下列页面加载:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"…\n…", - "description":"" + "docblockedPrompt2": { + "message": "因为下列过滤规则", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"此设备名称:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "无参数", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"警告!更改这些高级设置可能造成问题,请自担风险。", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "被包含于:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"提交", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "返回", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"应用更改", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "关闭此窗口", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"还原", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "不对 {{hostname}} 进行严格屏蔽", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"字节", - "description":"" + "docblockedDisableTemporary": { + "message": "暂时", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"临时允许较大媒体元素", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "永久", + "description": "English: Permanently" }, - "dummy":{ - "message":"此条目必须是最后一个", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "导出到云端储存", + "description": "tooltip" + }, + "cloudPull": { + "message": "从云端储存导入", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "从云存储导入并与当前设置合并", + "description": "tooltip" + }, + "cloudNoData": { + "message": "…\n…", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "此设备名称:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "警告!更改这些高级设置可能造成问题,请自担风险。", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "提交", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "应用更改", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "还原", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "字节", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "临时允许较大媒体元素", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "此条目必须是最后一个", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/_locales/zh_TW/messages.json b/src/_locales/zh_TW/messages.json index f636030645f6a..76c8401581979 100644 --- a/src/_locales/zh_TW/messages.json +++ b/src/_locales/zh_TW/messages.json @@ -1,710 +1,754 @@ { - "extName":{ - "message":"uBlock₀", - "description":"extension name." + "extName": { + "message": "uBlock₀", + "description": "extension name." }, - "extShortDesc":{ - "message":"終於出現了,一個高效率的阻擋器,使用不多的 CPU 及記憶體資源。", - "description":"this will be in the chrome web store: must be 132 characters or less" + "extShortDesc": { + "message": "終於出現了,一個高效率的阻擋器,使用不多的 CPU 及記憶體資源。", + "description": "this will be in the chrome web store: must be 132 characters or less" }, - "dashboardName":{ - "message":"uBlock₀ — 控制台", - "description":"English: uBlock₀ — Dashboard" + "dashboardName": { + "message": "uBlock₀ — 控制台", + "description": "English: uBlock₀ — Dashboard" }, - "settingsPageName":{ - "message":"設定", - "description":"appears as tab name in dashboard" + "settingsPageName": { + "message": "設定", + "description": "appears as tab name in dashboard" }, - "3pPageName":{ - "message":"第三方過濾規則", - "description":"appears as tab name in dashboard" + "3pPageName": { + "message": "第三方過濾規則", + "description": "appears as tab name in dashboard" }, - "1pPageName":{ - "message":"自訂過濾規則", - "description":"appears as tab name in dashboard" + "1pPageName": { + "message": "自訂過濾規則", + "description": "appears as tab name in dashboard" }, - "rulesPageName":{ - "message":"自訂動態過濾規則", - "description":"appears as tab name in dashboard" + "rulesPageName": { + "message": "自訂動態過濾規則", + "description": "appears as tab name in dashboard" }, - "whitelistPageName":{ - "message":"白名單", - "description":"appears as tab name in dashboard" + "whitelistPageName": { + "message": "白名單", + "description": "appears as tab name in dashboard" }, - "statsPageName":{ - "message":"uBlock₀ — 網路請求日誌", - "description":"Title for the logger window" + "statsPageName": { + "message": "uBlock₀ — 網路請求日誌", + "description": "Title for the logger window" }, - "aboutPageName":{ - "message":"關於", - "description":"appears as tab name in dashboard" + "aboutPageName": { + "message": "關於", + "description": "appears as tab name in dashboard" }, - "advancedSettingsPageName":{ - "message":"進階設定", - "description":"Title for the advanced settings page" + "advancedSettingsPageName": { + "message": "進階設定", + "description": "Title for the advanced settings page" }, - "popupPowerSwitchInfo":{ - "message":"點擊:對此網站 停用\/啟用 uBlock₀ 。\n\nCtrl + 點擊:僅在此頁面停用 uBlock₀ 。", - "description":"English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." + "popupPowerSwitchInfo": { + "message": "點擊:對此網站 停用\/啟用 uBlock₀ 。\n\nCtrl + 點擊:僅在此頁面停用 uBlock₀ 。", + "description": "English: Click: disable\/enable uBlock₀ for this site.\n\nCtrl+click: disable uBlock₀ only on this page." }, - "popupBlockedRequestPrompt":{ - "message":"已阻擋的連線請求", - "description":"English: requests blocked" + "popupPowerSwitchInfo1": { + "message": "點擊:對此網站停用 uBlock₀ 。\n\nCtrl + 點擊:僅在此頁面停用 uBlock₀ 。", + "description": "Message to be read by screen readers" }, - "popupBlockedOnThisPagePrompt":{ - "message":"在此頁面上", - "description":"English: on this page" + "popupPowerSwitchInfo2": { + "message": "點擊:對此網站啟用 uBlock₀ 。", + "description": "Message to be read by screen readers" }, - "popupBlockedStats":{ - "message":"{{count}} 或 {{percent}}%", - "description":"Example: 15 or 13%" + "popupBlockedRequestPrompt": { + "message": "已阻擋的連線請求", + "description": "English: requests blocked" }, - "popupBlockedSinceInstallPrompt":{ - "message":"自安裝後", - "description":"English: since install" + "popupBlockedOnThisPagePrompt": { + "message": "在此頁面上", + "description": "English: on this page" }, - "popupOr":{ - "message":"或", - "description":"English: or" + "popupBlockedStats": { + "message": "{{count}} 或 {{percent}}%", + "description": "Example: 15 or 13%" }, - "popupTipDashboard":{ - "message":"點一下開啟控制台", - "description":"English: Click to open the dashboard" + "popupBlockedSinceInstallPrompt": { + "message": "自安裝後", + "description": "English: since install" }, - "popupTipZapper":{ - "message":"Enter element zapper mode", - "description":"Tooltip for the element-zapper icon in the popup panel" + "popupOr": { + "message": "或", + "description": "English: or" }, - "popupTipPicker":{ - "message":"進入元素選擇器模式", - "description":"English: Enter element picker mode" + "popupTipDashboard": { + "message": "點一下開啟控制台", + "description": "English: Click to open the dashboard" }, - "popupTipLog":{ - "message":"查看連線請求日誌", - "description":"Tooltip used for the logger icon in the panel" + "popupTipZapper": { + "message": "進入元素移除模式", + "description": "Tooltip for the element-zapper icon in the popup panel" }, - "popupTipNoPopups":{ - "message":"切換是否阻擋此網站的所有彈出型視窗", - "description":"Tooltip for the no-popups per-site switch" + "popupTipPicker": { + "message": "進入元素選擇器模式", + "description": "English: Enter element picker mode" }, - "popupTipNoLargeMedia":{ - "message":"切換封鎖此網站的大型媒體元素", - "description":"Tooltip for the no-large-media per-site switch" + "popupTipLog": { + "message": "查看連線請求日誌", + "description": "Tooltip used for the logger icon in the panel" }, - "popupTipNoCosmeticFiltering":{ - "message":"切換是否在此網站過濾網頁元素", - "description":"Tooltip for the no-cosmetic-filtering per-site switch" + "popupTipNoPopups": { + "message": "切換是否阻擋此網站的所有彈出型視窗", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipNoRemoteFonts":{ - "message":"切換封鎖此網站的遠端字體", - "description":"Tooltip for the no-remote-fonts per-site switch" + "popupTipNoPopups1": { + "message": "點擊以阻擋此網站所有彈出型視窗", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipGlobalRules":{ - "message":"全域規則:此欄位的規則會套用至所有網站。", - "description":"Tooltip when hovering the top-most cell of the global-rules column." + "popupTipNoPopups2": { + "message": "點擊以停止阻擋此網站所有彈出型視窗", + "description": "Tooltip for the no-popups per-site switch" }, - "popupTipLocalRules":{ - "message":"區域規則:此欄位的規則僅會套用至目前網站。\n區域規則會覆蓋過全域規則。", - "description":"Tooltip when hovering the top-most cell of the local-rules column." + "popupTipNoLargeMedia": { + "message": "切換封鎖此網站的大型媒體元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipSaveRules":{ - "message":"點擊此處讓變更永久生效。", - "description":"Tooltip when hovering over the padlock in the dynamic filtering pane." + "popupTipNoLargeMedia1": { + "message": "點擊以封鎖此網站的大型媒體元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupTipRevertRules":{ - "message":"點擊此處還原變更。", - "description":"Tooltip when hovering over the eraser in the dynamic filtering pane." + "popupTipNoLargeMedia2": { + "message": "點擊以停止封鎖此網站的大型媒體元素", + "description": "Tooltip for the no-large-media per-site switch" }, - "popupAnyRulePrompt":{ - "message":"全部", - "description":"" + "popupTipNoCosmeticFiltering": { + "message": "切換是否在此網站過濾網頁元素", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popupImageRulePrompt":{ - "message":"圖片", - "description":"" + "popupTipNoCosmeticFiltering1": { + "message": "點擊以停用此網站的網頁元素過濾", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pAnyRulePrompt":{ - "message":"第三方", - "description":"" + "popupTipNoCosmeticFiltering2": { + "message": "點擊以啟用此網站的網頁元素過濾", + "description": "Tooltip for the no-cosmetic-filtering per-site switch" }, - "popup3pPassiveRulePrompt":{ - "message":"第三方階層式樣式表 (CSS)/圖片", - "description":"" + "popupTipNoRemoteFonts": { + "message": "切換封鎖此網站的遠端字體", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popupInlineScriptRulePrompt":{ - "message":"行內腳本", - "description":"" + "popupTipNoRemoteFonts1": { + "message": "點擊以封鎖此網站的遠端字體", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup1pScriptRulePrompt":{ - "message":"第一方腳本", - "description":"" + "popupTipNoRemoteFonts2": { + "message": "點擊以停止封鎖此網站的遠端字體", + "description": "Tooltip for the no-remote-fonts per-site switch" }, - "popup3pScriptRulePrompt":{ - "message":"第三方腳本", - "description":"" + "popupTipGlobalRules": { + "message": "全域規則:此欄位的規則會套用至所有網站。", + "description": "Tooltip when hovering the top-most cell of the global-rules column." }, - "popup3pFrameRulePrompt":{ - "message":"第三方框架", - "description":"" + "popupTipLocalRules": { + "message": "區域規則:此欄位的規則僅會套用至目前網站。\n區域規則會覆蓋過全域規則。", + "description": "Tooltip when hovering the top-most cell of the local-rules column." }, - "popupHitDomainCountPrompt":{ - "message":"已連結的域名", - "description":"appears in popup" + "popupTipSaveRules": { + "message": "點擊此處讓變更永久生效。", + "description": "Tooltip when hovering over the padlock in the dynamic filtering pane." }, - "popupHitDomainCount":{ - "message":"{{count}} \/ {{total}}", - "description":"appears in popup" + "popupTipRevertRules": { + "message": "點擊此處還原變更。", + "description": "Tooltip when hovering over the eraser in the dynamic filtering pane." }, - "pickerCreate":{ - "message":"建立", - "description":"English: Create" + "popupAnyRulePrompt": { + "message": "全部", + "description": "" }, - "pickerPick":{ - "message":"選擇", - "description":"English: Pick" + "popupImageRulePrompt": { + "message": "圖片", + "description": "" }, - "pickerQuit":{ - "message":"離開", - "description":"English: Quit" + "popup3pAnyRulePrompt": { + "message": "第三方", + "description": "" }, - "pickerPreview":{ - "message":"預覽", - "description":"Element picker preview mode: will cause the elements matching the current filter to be removed from the page" + "popup3pPassiveRulePrompt": { + "message": "第三方階層式樣式表 (CSS)/圖片", + "description": "" }, - "pickerNetFilters":{ - "message":"網址過濾規則", - "description":"English: header for a type of filter in the element picker dialog" + "popupInlineScriptRulePrompt": { + "message": "行內腳本", + "description": "" }, - "pickerCosmeticFilters":{ - "message":"元素隱藏過濾規則", - "description":"English: Cosmetic filters" + "popup1pScriptRulePrompt": { + "message": "第一方腳本", + "description": "" }, - "pickerCosmeticFiltersHint":{ - "message":"點擊,按住 Ctrl 鍵點擊", - "description":"English: Click, Ctrl-click" + "popup3pScriptRulePrompt": { + "message": "第三方腳本", + "description": "" }, - "pickerContextMenuEntry":{ - "message":"阻擋元素", - "description":"English: Block element" + "popup3pFrameRulePrompt": { + "message": "第三方框架", + "description": "" }, - "settingsCollapseBlockedPrompt":{ - "message":"隱藏已阻擋的元素的預留位置", - "description":"English: Hide placeholders of blocked elements" + "popupHitDomainCountPrompt": { + "message": "已連結的域名", + "description": "appears in popup" }, - "settingsIconBadgePrompt":{ - "message":"在圖示上顯示已被阻擋的連線請求數量", - "description":"English: Show the number of blocked requests on the icon" + "popupHitDomainCount": { + "message": "{{count}} \/ {{total}}", + "description": "appears in popup" }, - "settingsTooltipsPrompt":{ - "message":"關閉提示文字功能", - "description":"A checkbox in the Settings pane" + "pickerCreate": { + "message": "建立", + "description": "English: Create" }, - "settingsContextMenuPrompt":{ - "message":"使用階層式內容功能表", - "description":"English: Make use of context menu where appropriate" + "pickerPick": { + "message": "選擇", + "description": "English: Pick" }, - "settingsColorBlindPrompt":{ - "message":"使用對色盲友善的色彩", - "description":"English: Color-blind friendly" + "pickerQuit": { + "message": "離開", + "description": "English: Quit" }, - "settingsCloudStorageEnabledPrompt":{ - "message":"啟用雲端儲存空間的支援", - "description":"" + "pickerPreview": { + "message": "預覽", + "description": "Element picker preview mode: will cause the elements matching the current filter to be removed from the page" }, - "settingsAdvancedUserPrompt":{ - "message":"我是進階使用者(必讀資訊<\/a>)", - "description":"" + "pickerNetFilters": { + "message": "網址過濾規則", + "description": "English: header for a type of filter in the element picker dialog" }, - "settingsAdvancedUserSettings":{ - "message":"進階設定", - "description":"For the tooltip of a link which gives access to advanced settings" + "pickerCosmeticFilters": { + "message": "元素隱藏過濾規則", + "description": "English: Cosmetic filters" }, - "settingsPrefetchingDisabledPrompt":{ - "message":"關閉預讀功能(避免連線至被阻擋的網域)", - "description":"English: " + "pickerCosmeticFiltersHint": { + "message": "點擊,按住 Ctrl 鍵點擊", + "description": "English: Click, Ctrl-click" }, - "settingsHyperlinkAuditingDisabledPrompt":{ - "message":"停用超連結監測", - "description":"English: " + "pickerContextMenuEntry": { + "message": "阻擋元素", + "description": "English: Block element" }, - "settingsWebRTCIPAddressHiddenPrompt":{ - "message":"預防 WebRTC 洩漏本地 IP 地址", - "description":"English: " + "settingsCollapseBlockedPrompt": { + "message": "隱藏已阻擋的元素的預留位置", + "description": "English: Hide placeholders of blocked elements" }, - "settingPerSiteSwitchGroup":{ - "message":"預設行為", - "description":"" + "settingsIconBadgePrompt": { + "message": "在圖示上顯示已被阻擋的連線請求數量", + "description": "English: Show the number of blocked requests on the icon" }, - "settingPerSiteSwitchGroupSynopsis":{ - "message":"這些預設行為可再依各網站調整", - "description":"" + "settingsTooltipsPrompt": { + "message": "關閉提示文字功能", + "description": "A checkbox in the Settings pane" }, - "settingsNoCosmeticFilteringPrompt":{ - "message":"停用元素隱藏過濾規則", - "description":"" + "settingsContextMenuPrompt": { + "message": "使用階層式內容功能表", + "description": "English: Make use of context menu where appropriate" }, - "settingsNoLargeMediaPrompt":{ - "message":"封鎖超過 {{input:number}} kB 的媒體元素", - "description":"" + "settingsColorBlindPrompt": { + "message": "使用對色盲友善的色彩", + "description": "English: Color-blind friendly" }, - "settingsNoRemoteFontsPrompt":{ - "message":"封鎖遠端字體", - "description":"" + "settingsCloudStorageEnabledPrompt": { + "message": "啟用雲端儲存空間的支援", + "description": "" }, - "settingsStorageUsed":{ - "message":"儲存空間:已使用 {{value}} 位元組", - "description":"English: Storage used: {{}} bytes" + "settingsAdvancedUserPrompt": { + "message": "我是進階使用者(必讀資訊<\/a>)", + "description": "" }, - "settingsLastRestorePrompt":{ - "message":"最後還原:", - "description":"English: Last restore:" + "settingsAdvancedUserSettings": { + "message": "進階設定", + "description": "For the tooltip of a link which gives access to advanced settings" }, - "settingsLastBackupPrompt":{ - "message":"最後備份:", - "description":"English: Last backup:" + "settingsPrefetchingDisabledPrompt": { + "message": "關閉預讀功能(避免連線至被阻擋的網域)", + "description": "English: " }, - "3pListsOfBlockedHostsPrompt":{ - "message":"目前已使用 {{netFilterCount}} 個網址過濾規則 + {{cosmeticFilterCount}} 個元素隱藏過濾規則:", - "description":"Appears at the top of the _3rd-party filters_ pane" + "settingsHyperlinkAuditingDisabledPrompt": { + "message": "停用超連結監測", + "description": "English: " }, - "3pListsOfBlockedHostsPerListStats":{ - "message":"在 {{total}} 個中,已使用 {{used}} 個", - "description":"Appears aside each filter list in the _3rd-party filters_ pane" + "settingsWebRTCIPAddressHiddenPrompt": { + "message": "預防 WebRTC 洩漏本地 IP 地址", + "description": "English: " }, - "3pAutoUpdatePrompt1":{ - "message":"自動更新過濾規則列表", - "description":"A checkbox in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroup": { + "message": "預設行為", + "description": "" }, - "3pUpdateNow":{ - "message":"立即更新", - "description":"A button in the in the _3rd-party filters_ pane" + "settingPerSiteSwitchGroupSynopsis": { + "message": "這些預設行為可再依各網站調整", + "description": "" }, - "3pPurgeAll":{ - "message":"清除所有快取", - "description":"A button in the in the _3rd-party filters_ pane" + "settingsNoCosmeticFilteringPrompt": { + "message": "停用元素隱藏過濾規則", + "description": "" }, - "3pParseAllABPHideFiltersPrompt1":{ - "message":"解析並套用 Adblock+ 元素隱藏過濾規則。", - "description":"English: Parse and enforce Adblock+ element hiding filters." + "settingsNoLargeMediaPrompt": { + "message": "封鎖超過 {{input:number}} kB 的媒體元素", + "description": "" }, - "3pParseAllABPHideFiltersInfo":{ - "message":"

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

啟用這項功能後將增加 uBlock₀ <\/i> 的記憶體使用量。<\/p>", - "description":"Describes the purpose of the 'Parse and enforce cosmetic filters' feature." + "settingsNoRemoteFontsPrompt": { + "message": "封鎖遠端字體", + "description": "" }, - "3pIgnoreGenericCosmeticFilters":{ - "message":"忽略一般元素隱藏過濾規則。", - "description":"This will cause uBO to ignore all generic cosmetic filters." + "settingsNoCSPReportsPrompt": { + "message": "封鎖 CSP 報告", + "description": "background information: https:\/\/github.com\/gorhill\/uBlock\/issues\/3150" }, - "3pIgnoreGenericCosmeticFiltersInfo":{ - "message":"

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

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

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

建議您在效能較差的裝置中開啟此選項。", - "description":"Describes the purpose of the 'Ignore generic cosmetic filters' feature." + "settingsStorageUsed": { + "message": "儲存空間:已使用 {{value}} 位元組", + "description": "English: Storage used: {{}} bytes" }, - "3pListsOfBlockedHostsHeader":{ - "message":"已阻擋的主機列表", - "description":"English: Lists of blocked hosts" + "settingsLastRestorePrompt": { + "message": "最後還原:", + "description": "English: Last restore:" }, - "3pApplyChanges":{ - "message":"套用變更", - "description":"English: Apply changes" + "settingsLastBackupPrompt": { + "message": "最後備份:", + "description": "English: Last backup:" }, - "3pGroupAds":{ - "message":"廣告", - "description":"English: Ads" + "3pListsOfBlockedHostsPrompt": { + "message": "目前已使用 {{netFilterCount}} 個網址過濾規則 + {{cosmeticFilterCount}} 個元素隱藏過濾規則:", + "description": "Appears at the top of the _3rd-party filters_ pane" }, - "3pGroupPrivacy":{ - "message":"隱私", - "description":"English: Privacy" + "3pListsOfBlockedHostsPerListStats": { + "message": "在 {{total}} 個中,已使用 {{used}} 個", + "description": "Appears aside each filter list in the _3rd-party filters_ pane" }, - "3pGroupMalware":{ - "message":"惡意域名", - "description":"English: Malware domains" + "3pAutoUpdatePrompt1": { + "message": "自動更新過濾規則列表", + "description": "A checkbox in the _3rd-party filters_ pane" }, - "3pGroupSocial":{ - "message":"社交", - "description":"English: Social" + "3pUpdateNow": { + "message": "立即更新", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupMultipurpose":{ - "message":"多用途", - "description":"English: Multipurpose" + "3pPurgeAll": { + "message": "清除所有快取", + "description": "A button in the in the _3rd-party filters_ pane" }, - "3pGroupRegions":{ - "message":"地區,語言", - "description":"English: Regions, languages" + "3pParseAllABPHideFiltersPrompt1": { + "message": "解析並套用 Adblock+ 元素隱藏過濾規則。", + "description": "English: Parse and enforce Adblock+ element hiding filters." }, - "3pGroupCustom":{ - "message":"自訂", - "description":"English: Custom" + "3pParseAllABPHideFiltersInfo": { + "message": "

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

啟用這項功能後將增加 uBlock₀ <\/i> 的記憶體使用量。<\/p>", + "description": "Describes the purpose of the 'Parse and enforce cosmetic filters' feature." }, - "3pExternalListsHint":{ - "message":"每行一個網址。以“!”開頭的行將被忽略。無效的網址將被忽略。", - "description":"English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." + "3pIgnoreGenericCosmeticFilters": { + "message": "忽略一般元素隱藏過濾規則。", + "description": "This will cause uBO to ignore all generic cosmetic filters." }, - "3pExternalListObsolete":{ - "message":"已過期。", - "description":"used as a tooltip for the out-of-date icon beside a list" + "3pIgnoreGenericCosmeticFiltersInfo": { + "message": "

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

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

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

建議您在效能較差的裝置中開啟此選項。", + "description": "Describes the purpose of the 'Ignore generic cosmetic filters' feature." }, - "3pLastUpdate":{ - "message":"最後更新:{{ago}}。", - "description":"used as a tooltip for the clock icon beside a list" + "3pListsOfBlockedHostsHeader": { + "message": "已阻擋的主機列表", + "description": "English: Lists of blocked hosts" }, - "3pUpdating":{ - "message":"更新中…", - "description":"used as a tooltip for the spinner icon beside a list" + "3pApplyChanges": { + "message": "套用變更", + "description": "English: Apply changes" }, - "3pNetworkError":{ - "message":"更新資源時發生網路錯誤。", - "description":"used as a tooltip for error icon beside a list" + "3pGroupAds": { + "message": "廣告", + "description": "English: Ads" }, - "1pFormatHint":{ - "message":"每行一個過濾規則。一個規則可以是一個平凡的主機名稱或者是一個與 Adblock Plus 相容的過濾規則。以“!”開頭的行將被忽略。", - "description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." + "3pGroupPrivacy": { + "message": "隱私", + "description": "English: Privacy" }, - "1pImport":{ - "message":"匯入並加入", - "description":"English: Import and append" + "3pGroupMalware": { + "message": "惡意域名", + "description": "English: Malware domains" }, - "1pExport":{ - "message":"匯出", - "description":"English: Export" + "3pGroupAnnoyances": { + "message": "惱人的", + "description": "The header identifying the filter lists in the category 'annoyances'" }, - "1pExportFilename":{ - "message":"我的-ublock-靜態過濾規則_{{datetime}}.txt", - "description":"English: my-ublock-static-filters_{{datetime}}.txt" + "3pGroupMultipurpose": { + "message": "多用途", + "description": "English: Multipurpose" }, - "1pApplyChanges":{ - "message":"套用變更", - "description":"English: Apply changes" + "3pGroupRegions": { + "message": "地區,語言", + "description": "English: Regions, languages" }, - "rulesPermanentHeader":{ - "message":"永久規則", - "description":"header" + "3pGroupCustom": { + "message": "自訂", + "description": "English: Custom" }, - "rulesTemporaryHeader":{ - "message":"臨時規則", - "description":"header" + "3pExternalListsHint": { + "message": "每行一個網址。以“!”開頭的行將被忽略。無效的網址將被忽略。", + "description": "English: One URL per line. Lines prefixed with ‘!’ will be ignored. Invalid URLs will be silently ignored." }, - "rulesRevert":{ - "message":"還原", - "description":"This will remove all temporary rules" + "3pExternalListObsolete": { + "message": "已過期。", + "description": "used as a tooltip for the out-of-date icon beside a list" }, - "rulesCommit":{ - "message":"提交", - "description":"This will persist temporary rules" + "3pLastUpdate": { + "message": "最後更新:{{ago}}。", + "description": "used as a tooltip for the clock icon beside a list" }, - "rulesEdit":{ - "message":"編輯", - "description":"Will enable manual-edit mode (textarea)" + "3pUpdating": { + "message": "更新中…", + "description": "used as a tooltip for the spinner icon beside a list" }, - "rulesEditSave":{ - "message":"儲存", - "description":"Will save manually-edited content and exit manual-edit mode" + "3pNetworkError": { + "message": "更新資源時發生網路錯誤。", + "description": "used as a tooltip for error icon beside a list" }, - "rulesEditDiscard":{ - "message":"捨棄", - "description":"Will discard manually-edited content and exit manual-edit mode" + "1pFormatHint": { + "message": "每行一個過濾規則。一個規則可以是一個平凡的主機名稱或者是一個與 Adblock Plus 相容的過濾規則。以“!”開頭的行將被忽略。", + "description": "English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with ‘!’ will be ignored." }, - "rulesImport":{ - "message":"從檔案匯入…", - "description":"" + "1pImport": { + "message": "匯入並加入", + "description": "English: Import and append" }, - "rulesExport":{ - "message":"匯出至檔案…", - "description":"" + "1pExport": { + "message": "匯出", + "description": "English: Export" }, - "rulesDefaultFileName":{ - "message":"我的-ublock-動態過濾規則_{{datetime}}.txt", - "description":"default file name to use" + "1pExportFilename": { + "message": "我的-ublock-靜態過濾規則_{{datetime}}.txt", + "description": "English: my-ublock-static-filters_{{datetime}}.txt" }, - "rulesHint":{ - "message":"您的動態過濾規則列表", - "description":"English: List of your dynamic filtering rules." + "1pApplyChanges": { + "message": "套用變更", + "description": "English: Apply changes" }, - "rulesFormatHint":{ - "message":"規則語法:來源主機名稱 目標主機名稱 連線請求類型 操作<\/code>(完整說明<\/a>)。", - "description":"English: dynamic rule syntax and full documentation." + "rulesPermanentHeader": { + "message": "永久規則", + "description": "header" }, - "whitelistPrompt":{ - "message":"列表裡的主機名稱將被 uBlock₀ 停用。每行一個規則。無效的主機名稱將被忽略掉。", - "description":"English: An overview of the content of the dashboard's Whitelist pane." + "rulesTemporaryHeader": { + "message": "臨時規則", + "description": "header" }, - "whitelistImport":{ - "message":"匯入並加入", - "description":"English: Import and append" + "rulesRevert": { + "message": "還原", + "description": "This will remove all temporary rules" }, - "whitelistExport":{ - "message":"匯出", - "description":"English: Export" + "rulesCommit": { + "message": "提交", + "description": "This will persist temporary rules" }, - "whitelistExportFilename":{ - "message":"我的-ublock-白名單_{{datetime}}.txt", - "description":"English: my-ublock-whitelist_{{datetime}}.txt" + "rulesEdit": { + "message": "編輯", + "description": "Will enable manual-edit mode (textarea)" }, - "whitelistApply":{ - "message":"套用變更", - "description":"English: Apply changes" + "rulesEditSave": { + "message": "儲存", + "description": "Will save manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderType":{ - "message":"類型", - "description":"English: Type" + "rulesEditDiscard": { + "message": "捨棄", + "description": "Will discard manually-edited content and exit manual-edit mode" }, - "logRequestsHeaderDomain":{ - "message":"域名", - "description":"English: Domain" + "rulesImport": { + "message": "從檔案匯入…", + "description": "" }, - "logRequestsHeaderURL":{ - "message":"網址", - "description":"English: URL" + "rulesExport": { + "message": "匯出至檔案…", + "description": "" }, - "logRequestsHeaderFilter":{ - "message":"過濾規則", - "description":"English: Filter" + "rulesDefaultFileName": { + "message": "我的-ublock-動態過濾規則_{{datetime}}.txt", + "description": "default file name to use" }, - "logAll":{ - "message":"全部", - "description":"Appears in the logger's tab selector" + "rulesHint": { + "message": "您的動態過濾規則列表", + "description": "English: List of your dynamic filtering rules." }, - "logBehindTheScene":{ - "message":"背景的網路連線請求", - "description":"Pretty name for behind-the-scene network requests" + "rulesFormatHint": { + "message": "規則語法:來源主機名稱 目標主機名稱 連線請求類型 操作<\/code>(完整說明<\/a>)。", + "description": "English: dynamic rule syntax and full documentation." }, - "logFilterPrompt":{ - "message":"過濾日誌項目", - "description":"English: filter log entries" + "whitelistPrompt": { + "message": "列表裡的主機名稱將被 uBlock₀ 停用。每行一個規則。無效的主機名稱將被忽略掉。", + "description": "English: An overview of the content of the dashboard's Whitelist pane." }, - "logMaxEntriesTip":{ - "message":"最大日誌項目的數量", - "description":"Tooltip informaing that the input field is to set the maximum number of entries in the log" + "whitelistImport": { + "message": "匯入並加入", + "description": "English: Import and append" }, - "loggerURLFilteringContextLabel":{ - "message":"環境:", - "description":"Label for the context selector" + "whitelistExport": { + "message": "匯出", + "description": "English: Export" }, - "loggerURLFilteringTypeLabel":{ - "message":"類型:", - "description":"Label for the type selector" + "whitelistExportFilename": { + "message": "我的-ublock-白名單_{{datetime}}.txt", + "description": "English: my-ublock-whitelist_{{datetime}}.txt" }, - "loggerURLFilteringHeader":{ - "message":"動態網址過濾", - "description":"Small header to identify the dynamic URL filtering section" + "whitelistApply": { + "message": "套用變更", + "description": "English: Apply changes" }, - "loggerStaticFilteringHeader":{ - "message":"靜態過濾", - "description":"Small header to identify the static filtering section" + "logRequestsHeaderType": { + "message": "類型", + "description": "English: Type" }, - "loggerStaticFilteringSentence":{ - "message":"當網址符合 {{url}} {{br}} 並且來自 {{origin}} 時,{{br}} {{action}} {{type}} 的網路請求。{{br}}{{importance}} 已有符合的過濾器。", - "description":"Used in the static filtering wizard" + "logRequestsHeaderDomain": { + "message": "域名", + "description": "English: Domain" }, - "loggerStaticFilteringSentencePartBlock":{ - "message":"封鎖", - "description":"Used in the static filtering wizard" + "logRequestsHeaderURL": { + "message": "網址", + "description": "English: URL" }, - "loggerStaticFilteringSentencePartAllow":{ - "message":"允許", - "description":"Used in the static filtering wizard" + "logRequestsHeaderFilter": { + "message": "過濾規則", + "description": "English: Filter" }, - "loggerStaticFilteringSentencePartType":{ - "message":"類型「{{type}}」", - "description":"Used in the static filtering wizard" + "logAll": { + "message": "全部", + "description": "Appears in the logger's tab selector" }, - "loggerStaticFilteringSentencePartAnyType":{ - "message":"任何類型", - "description":"Used in the static filtering wizard" + "logBehindTheScene": { + "message": "背景的網路連線請求", + "description": "Pretty name for behind-the-scene network requests" }, - "loggerStaticFilteringSentencePartOrigin":{ - "message":"來自「{{origin}}」", - "description":"Used in the static filtering wizard" + "logFilterPrompt": { + "message": "過濾日誌項目", + "description": "English: filter log entries" }, - "loggerStaticFilteringSentencePartAnyOrigin":{ - "message":"來自任何地方", - "description":"Used in the static filtering wizard" + "logMaxEntriesTip": { + "message": "最大日誌項目的數量", + "description": "Tooltip informaing that the input field is to set the maximum number of entries in the log" }, - "loggerStaticFilteringSentencePartNotImportant":{ - "message":"除非", - "description":"Used in the static filtering wizard" + "loggerURLFilteringContextLabel": { + "message": "環境:", + "description": "Label for the context selector" }, - "loggerStaticFilteringSentencePartImportant":{ - "message":"就算", - "description":"Used in the static filtering wizard" + "loggerURLFilteringTypeLabel": { + "message": "類型:", + "description": "Label for the type selector" }, - "loggerStaticFilteringFinderSentence1":{ - "message":"在下列清單中找到靜態過濾器 {{filter}}:", - "description":"Below this sentence, the filter lists in which the filter was found" + "loggerURLFilteringHeader": { + "message": "動態網址過濾", + "description": "Small header to identify the dynamic URL filtering section" }, - "aboutChangelog":{ - "message":"更新日誌", - "description":"English: Change log" + "loggerStaticFilteringHeader": { + "message": "靜態過濾", + "description": "Small header to identify the static filtering section" }, - "aboutWiki":{ - "message":"共筆系統", - "description":"English: project' wiki on Github" + "loggerStaticFilteringSentence": { + "message": "當網址符合 {{url}} {{br}} 並且來自 {{origin}} 時,{{br}} {{action}} {{type}} 的網路請求。{{br}}{{importance}} 已有符合的過濾器。", + "description": "Used in the static filtering wizard" }, - "aboutSupport":{ - "message":"支援", - "description":"A link for where to get support" + "loggerStaticFilteringSentencePartBlock": { + "message": "封鎖", + "description": "Used in the static filtering wizard" }, - "aboutCode":{ - "message":"原始程式碼(GPLv3)", - "description":"English: Source code (GPLv3)" + "loggerStaticFilteringSentencePartAllow": { + "message": "允許", + "description": "Used in the static filtering wizard" }, - "aboutContributors":{ - "message":"貢獻者", - "description":"English: Contributors" + "loggerStaticFilteringSentencePartType": { + "message": "類型「{{type}}」", + "description": "Used in the static filtering wizard" }, - "aboutBackupDataButton":{ - "message":"備份到檔案…", - "description":"Text for button to create a backup of all settings" + "loggerStaticFilteringSentencePartAnyType": { + "message": "任何類型", + "description": "Used in the static filtering wizard" }, - "aboutBackupFilename":{ - "message":"我的-ublock-備份_{{datetime}}.txt", - "description":"English: my-ublock-backup_{{datetime}}.txt" + "loggerStaticFilteringSentencePartOrigin": { + "message": "來自「{{origin}}」", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataButton":{ - "message":"從檔案還原…", - "description":"English: Restore from file..." + "loggerStaticFilteringSentencePartAnyOrigin": { + "message": "來自任何地方", + "description": "Used in the static filtering wizard" }, - "aboutResetDataButton":{ - "message":"重置為預設設定", - "description":"English: Reset to default settings..." + "loggerStaticFilteringSentencePartNotImportant": { + "message": "除非", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataConfirm":{ - "message":"您所有的設定將會被 {{time}} 的備份資料覆蓋,並將重新啟動 uBlock₀。\n\n您確定要用備份資料蓋過目前的所有設定嗎?", - "description":"Message asking user to confirm restore" + "loggerStaticFilteringSentencePartImportant": { + "message": "就算", + "description": "Used in the static filtering wizard" }, - "aboutRestoreDataError":{ - "message":"資料無法讀取或無效", - "description":"Message to display when an error occurred during restore" + "loggerStaticFilteringFinderSentence1": { + "message": "在下列清單中找到靜態過濾器 {{filter}}:", + "description": "Below this sentence, the filter lists in which the filter was found" }, - "aboutResetDataConfirm":{ - "message":"您所有的設定都將被移除,並將重新啟動 uBlock₀。\n\n您確定要將 uBlock₀ 回復為原廠設定?", - "description":"Message asking user to confirm reset" + "aboutChangelog": { + "message": "更新日誌", + "description": "English: Change log" }, - "errorCantConnectTo":{ - "message":"無法連線至 {{url}}", - "description":"English: Network error: {{msg}}" + "aboutWiki": { + "message": "共筆系統", + "description": "English: project' wiki on Github" }, - "subscriberConfirm":{ - "message":"uBlock₀:確定要新增下列網址至自訂過濾規則清單?\n\n標題:「{{title}}」\n網址:{{url}}", - "description":"English: The message seen by the user to confirm subscription to a ABP filter list" + "aboutSupport": { + "message": "支援網站", + "description": "A link for where to get support" }, - "elapsedOneMinuteAgo":{ - "message":"1 分鐘前", - "description":"English: a minute ago" + "aboutCode": { + "message": "原始程式碼(GPLv3)", + "description": "English: Source code (GPLv3)" }, - "elapsedManyMinutesAgo":{ - "message":"{{value}} 分鐘前", - "description":"English: {{value}} minutes ago" + "aboutContributors": { + "message": "貢獻者", + "description": "English: Contributors" }, - "elapsedOneHourAgo":{ - "message":"1 小時前", - "description":"English: an hour ago" + "aboutBackupDataButton": { + "message": "備份到檔案…", + "description": "Text for button to create a backup of all settings" }, - "elapsedManyHoursAgo":{ - "message":"{{value}} 小時前", - "description":"English: {{value}} hours ago" + "aboutBackupFilename": { + "message": "我的-ublock-備份_{{datetime}}.txt", + "description": "English: my-ublock-backup_{{datetime}}.txt" }, - "elapsedOneDayAgo":{ - "message":"1 天前", - "description":"English: a day ago" + "aboutRestoreDataButton": { + "message": "從檔案還原…", + "description": "English: Restore from file..." }, - "elapsedManyDaysAgo":{ - "message":"{{value}} 天前", - "description":"English: {{value}} days ago" + "aboutResetDataButton": { + "message": "重置為預設設定", + "description": "English: Reset to default settings..." }, - "showDashboardButton":{ - "message":"顯示控制台", - "description":"Firefox\/Fennec-specific: Show Dashboard" + "aboutRestoreDataConfirm": { + "message": "您所有的設定將會被 {{time}} 的備份資料覆蓋,並將重新啟動 uBlock₀。\n\n您確定要用備份資料蓋過目前的所有設定嗎?", + "description": "Message asking user to confirm restore" }, - "showNetworkLogButton":{ - "message":"顯示網路連線請求日誌", - "description":"Firefox\/Fennec-specific: Show Logger" + "aboutRestoreDataError": { + "message": "資料無法讀取或無效", + "description": "Message to display when an error occurred during restore" }, - "fennecMenuItemBlockingOff":{ - "message":"關閉", - "description":"Firefox-specific: appears as 'uBlock₀ (off)'" + "aboutResetDataConfirm": { + "message": "您所有的設定都將被移除,並將重新啟動 uBlock₀。\n\n您確定要將 uBlock₀ 回復為原廠設定?", + "description": "Message asking user to confirm reset" }, - "docblockedPrompt1":{ - "message":"uBlock₀ 已防止下列的頁面載入:", - "description":"English: uBlock₀ has prevented the following page from loading:" + "errorCantConnectTo": { + "message": "無法連線至 {{url}}", + "description": "English: Network error: {{msg}}" }, - "docblockedPrompt2":{ - "message":"因為下列的過濾", - "description":"English: Because of the following filter" + "subscriberConfirm": { + "message": "uBlock₀:確定要新增下列網址至自訂過濾規則清單?\n\n標題:「{{title}}」\n網址:{{url}}", + "description": "English: The message seen by the user to confirm subscription to a ABP filter list" }, - "docblockedNoParamsPrompt":{ - "message":"不帶參數", - "description":"label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" + "elapsedOneMinuteAgo": { + "message": "1 分鐘前", + "description": "English: a minute ago" }, - "docblockedFoundIn":{ - "message":"在下列清單找到:", - "description":"English: List of filter list names follows" + "elapsedManyMinutesAgo": { + "message": "{{value}} 分鐘前", + "description": "English: {{value}} minutes ago" }, - "docblockedBack":{ - "message":"返回", - "description":"English: Go back" + "elapsedOneHourAgo": { + "message": "1 小時前", + "description": "English: an hour ago" }, - "docblockedClose":{ - "message":"關閉此視窗", - "description":"English: Close this window" + "elapsedManyHoursAgo": { + "message": "{{value}} 小時前", + "description": "English: {{value}} hours ago" }, - "docblockedProceed":{ - "message":"關閉針對 {{hostname}} 的嚴謹阻擋", - "description":"English: Disable strict blocking for {{hostname}} ..." + "elapsedOneDayAgo": { + "message": "1 天前", + "description": "English: a day ago" }, - "docblockedDisableTemporary":{ - "message":"暫時地", - "description":"English: Temporarily" + "elapsedManyDaysAgo": { + "message": "{{value}} 天前", + "description": "English: {{value}} days ago" }, - "docblockedDisablePermanent":{ - "message":"永久地", - "description":"English: Permanently" + "showDashboardButton": { + "message": "顯示控制台", + "description": "Firefox\/Fennec-specific: Show Dashboard" }, - "cloudPush":{ - "message":"匯出至雲端儲存空間", - "description":"tooltip" + "showNetworkLogButton": { + "message": "顯示網路連線請求日誌", + "description": "Firefox\/Fennec-specific: Show Logger" }, - "cloudPull":{ - "message":"從雲端儲存空間匯入", - "description":"tooltip" + "fennecMenuItemBlockingOff": { + "message": "關閉", + "description": "Firefox-specific: appears as 'uBlock₀ (off)'" }, - "cloudPullAndMerge":{ - "message":"自雲端匯入,並與目前設定合併", - "description":"tooltip" + "docblockedPrompt1": { + "message": "uBlock₀ 已防止下列的頁面載入:", + "description": "English: uBlock₀ has prevented the following page from loading:" }, - "cloudNoData":{ - "message":"... ...", - "description":"" + "docblockedPrompt2": { + "message": "因為下列的過濾", + "description": "English: Because of the following filter" }, - "cloudDeviceNamePrompt":{ - "message":"此裝置的名稱:", - "description":"used as a prompt for the user to provide a custom device name" + "docblockedNoParamsPrompt": { + "message": "不帶參數", + "description": "label to be used for the parameter-less URL: https:\/\/cloud.githubusercontent.com\/assets\/585534\/9832014\/bfb1b8f0-593b-11e5-8a27-fba472a5529a.png" }, - "advancedSettingsWarning":{ - "message":"警告!修改進階設定時請自負風險。", - "description":"A warning to users at the top of 'Advanced settings' page" + "docblockedFoundIn": { + "message": "在下列清單找到:", + "description": "English: List of filter list names follows" }, - "genericSubmit":{ - "message":"送出", - "description":"for generic 'Submit' buttons" + "docblockedBack": { + "message": "返回", + "description": "English: Go back" }, - "genericApplyChanges":{ - "message":"套用變更", - "description":"for generic 'Apply changes' buttons" + "docblockedClose": { + "message": "關閉此視窗", + "description": "English: Close this window" }, - "genericRevert":{ - "message":"還原", - "description":"for generic 'Revert' buttons" + "docblockedProceed": { + "message": "關閉針對 {{hostname}} 的嚴謹阻擋", + "description": "English: Disable strict blocking for {{hostname}} ..." }, - "genericBytes":{ - "message":"位元組", - "description":"" + "docblockedDisableTemporary": { + "message": "暫時地", + "description": "English: Temporarily" }, - "contextMenuTemporarilyAllowLargeMediaElements":{ - "message":"暫時允許大型媒體元素", - "description":"A context menu entry, present when large media elements have been blocked on the current site" + "docblockedDisablePermanent": { + "message": "永久地", + "description": "English: Permanently" }, - "dummy":{ - "message":"This entry must be the last one", - "description":"so we dont need to deal with comma for last entry" + "cloudPush": { + "message": "匯出至雲端儲存空間", + "description": "tooltip" + }, + "cloudPull": { + "message": "從雲端儲存空間匯入", + "description": "tooltip" + }, + "cloudPullAndMerge": { + "message": "自雲端匯入,並與目前設定合併", + "description": "tooltip" + }, + "cloudNoData": { + "message": "... ...", + "description": "" + }, + "cloudDeviceNamePrompt": { + "message": "此裝置的名稱:", + "description": "used as a prompt for the user to provide a custom device name" + }, + "advancedSettingsWarning": { + "message": "警告!修改進階設定時請自負風險。", + "description": "A warning to users at the top of 'Advanced settings' page" + }, + "genericSubmit": { + "message": "送出", + "description": "for generic 'Submit' buttons" + }, + "genericApplyChanges": { + "message": "套用變更", + "description": "for generic 'Apply changes' buttons" + }, + "genericRevert": { + "message": "還原", + "description": "for generic 'Revert' buttons" + }, + "genericBytes": { + "message": "位元組", + "description": "" + }, + "contextMenuTemporarilyAllowLargeMediaElements": { + "message": "暫時允許大型媒體元素", + "description": "A context menu entry, present when large media elements have been blocked on the current site" + }, + "dummy": { + "message": "This entry must be the last one", + "description": "so we dont need to deal with comma for last entry" } } \ No newline at end of file diff --git a/src/about.html b/src/about.html index 842088d956f13..bd0120a0aad8d 100644 --- a/src/about.html +++ b/src/about.html @@ -6,7 +6,6 @@ uBlock — About - @@ -15,17 +14,18 @@

+ diff --git a/src/advanced-settings.html b/src/advanced-settings.html index da18ac34aaf80..2f91f68b92396 100644 --- a/src/advanced-settings.html +++ b/src/advanced-settings.html @@ -15,6 +15,7 @@

+ diff --git a/src/asset-viewer.html b/src/asset-viewer.html index bfabd8829ff95..95f311da922ed 100644 --- a/src/asset-viewer.html +++ b/src/asset-viewer.html @@ -14,6 +14,7 @@

+ diff --git a/src/background.html b/src/background.html index 219f0390b1d71..d3ccd04992c7f 100644 --- a/src/background.html +++ b/src/background.html @@ -8,9 +8,13 @@ + + + + @@ -22,7 +26,6 @@ - diff --git a/src/cloud-ui.html b/src/cloud-ui.html new file mode 100644 index 0000000000000..3053d7ab8ce38 --- /dev/null +++ b/src/cloud-ui.html @@ -0,0 +1,21 @@ + + + + + + + + + + + +

+ +
+
+

+

+

+
+ + diff --git a/src/css/about.css b/src/css/about.css deleted file mode 100644 index 20d78cbf79eff..0000000000000 --- a/src/css/about.css +++ /dev/null @@ -1,4 +0,0 @@ -ul { - padding-__MSG_@@bidi_start_edge__: 1em; - margin-__MSG_@@bidi_start_edge__: 1em; - } diff --git a/src/css/cloud-ui.css b/src/css/cloud-ui.css index a9519fc6922dc..609b3cddc33ce 100644 --- a/src/css/cloud-ui.css +++ b/src/css/cloud-ui.css @@ -2,7 +2,7 @@ background: url("../img/cloud.png") hsl(216, 100%, 93%); border-radius: 3px; margin: 0.5em 0; - padding: 1em; + padding: 1em 1em 0 1em; position: relative; } #cloudWidget.hide { @@ -22,6 +22,9 @@ #cloudWidget > button[disabled] { visibility: hidden; } +#cloudWidget > button.error { + color: red; + } #cloudPush:after { content: '\f0ee'; } @@ -29,6 +32,9 @@ #cloudPullAndMerge:before { content: '\f0ed'; } +#cloudPullAndMerge { + margin: 0 0.25em; + } #cloudPullAndMerge:after { content: '\f067'; font-size: 50%; @@ -45,7 +51,13 @@ vertical-align: bottom; white-space: pre; } -#cloudWidget > .nodata { +#cloudError { + color: red; + margin: 0; + padding: 0.5em 0; + } +#cloudError > span { + font-size: x-small; } #cloudWidget > #cloudCog { cursor: pointer; diff --git a/src/css/logger-ui-inspector.css b/src/css/logger-ui-inspector.css index 420df1bb6d423..2c24aba8b4738 100644 --- a/src/css/logger-ui-inspector.css +++ b/src/css/logger-ui-inspector.css @@ -28,16 +28,23 @@ background-color: #fee; } #domInspector li > * { + font-size: 0.8rem; + display: inline-block; + line-height: 1.2; margin-right: 1em; + vertical-align: middle; + } +#domInspector li > span { + color: #aaa; } #domInspector li > span:first-child { color: #000; cursor: default; - display: inline-block; + font-size: 1rem; margin-right: 0; opacity: 0.5; + padding: 0 4px 0 1px; visibility: hidden; - width: 1em; } #domInspector li > span:first-child:hover { opacity: 1; @@ -54,30 +61,51 @@ } #domInspector li.branch.show > span:first-child:before { content: '\25be'; - visibility: visible; } #domInspector li.branch.hasCosmeticHide > span:first-child:before { color: red; } #domInspector li > code { cursor: pointer; - font: 12px/1.4 monospace; + font-family: monospace; + overflow: hidden; + text-overflow: ellipsis; } #domInspector li > code.off { text-decoration: line-through; } -#domInspector li > span { - color: #aaa; - } #domInspector li > code.filter { color: red; } + #domInspector li > ul { + display: block; + } +#domInspector li:not(.hasCosmeticHide):not(.isCosmeticHide):not(.show) > ul { display: none; } -#domInspector li.show > ul { + +#domInspector.vCompact li:not(.hasCosmeticHide):not(.isCosmeticHide) { + display: none; + } +#domInspector #domTree > li { + display: block; + } +#domInspector.vCompact ul { + display: block; + } +#domInspector li > ul > li:not(.hasCosmeticHide):not(.isCosmeticHide) { + display: none; + } +#domInspector li.show > ul > li:not(.hasCosmeticHide):not(.isCosmeticHide) { display: block; } +#domInspector li:not(.hasCosmeticHide):not(.isCosmeticHide) { + display: block; + } +#domInspector.hCompact li > code:first-of-type { + max-width: 12em; + } #cosmeticFilteringDialog .dialog { text-align: center; diff --git a/src/css/logger-ui.css b/src/css/logger-ui.css index 355c2f11e8430..a7c5252586ed6 100644 --- a/src/css/logger-ui.css +++ b/src/css/logger-ui.css @@ -58,8 +58,14 @@ textarea { padding: 0.2em 0; } +/* + https://github.com/gorhill/uBlock/issues/3293 + => https://devhints.io/css-system-font-stack +*/ #inspectors { bottom: 0; + font-family: "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + font-size: 13px; position: absolute; top: 0; width: 100%; @@ -80,18 +86,22 @@ textarea { width: 100%; } -#netInspector { - font: 13px sans-serif; - } -#inspectors.dom #netInspector { - display: none; - } -#netInspector #compactViewToggler.button:before { +.vCompactToggler.button:before { content: '\f102'; } -#netInspector.compactView #compactViewToggler.button:before { +.vCompact .vCompactToggler.button:before { content: '\f103'; } +.hCompactToggler.button:before { + content: '\f100'; + } +.hCompact .hCompactToggler.button:before { + content: '\f101'; + } + +#inspectors.dom #netInspector { + display: none; + } #netInspector #filterButton { opacity: 0.25; } @@ -115,22 +125,22 @@ textarea { width: 100%; } #netInspector table > colgroup > col:nth-of-type(1) { - width: 5em; + width: 4.6em; } #netInspector table > colgroup > col:nth-of-type(2) { - width: 2.5em; + width: 2.2em; } #netInspector table > colgroup > col:nth-of-type(3) { width: 20%; } #netInspector table > colgroup > col:nth-of-type(4) { - width: 2.5em; + width: 2.2em; } #netInspector table > colgroup > col:nth-of-type(5) { width: 6em; } #netInspector table > colgroup > col:nth-of-type(6) { - width: calc(100% - 16em - 20%); + width: calc(100% - 15em - 20%); } #netInspector.f table tr.f { display: none; @@ -190,7 +200,7 @@ body #netInspector td { #netInspector tr td:last-of-type { border-right: none; } -#netInspector.compactView td { +#netInspector.vCompact td { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; diff --git a/src/css/popup.css b/src/css/popup.css index fb8769897ad3d..12b0b8e1d89ea 100644 --- a/src/css/popup.css +++ b/src/css/popup.css @@ -193,20 +193,24 @@ body[dir="ltr"] #extraTools > span > span.badge { body[dir="rtl"] #extraTools > span > span.badge { right: 100%; } -#extraTools > span.on > span:last-of-type { +#extraTools > span > span:last-of-type { color: #e00; - font-size: 1.1em; - left: 0; + left: 50%; position: absolute; - text-align: center; top: 0; - width: 100%; + transform: translateX(-50%); + visibility: hidden; } -#extraTools > span.on > span:last-of-type:after { - content: '\2715'; +#extraTools > span > span:last-of-type > svg { + stroke: red; + stroke-width: 2; + width: 1em; + } +#extraTools > span.on > span:last-of-type { + visibility: visible; } #extraTools > span:hover { - color: #444; + color: #333; } #refresh { diff --git a/src/dashboard.html b/src/dashboard.html index 14285be521b08..45e7083e5f067 100644 --- a/src/dashboard.html +++ b/src/dashboard.html @@ -24,6 +24,7 @@ + diff --git a/src/document-blocked.html b/src/document-blocked.html index ca24ee7b121c3..156ea6b15ef99 100644 --- a/src/document-blocked.html +++ b/src/document-blocked.html @@ -1,6 +1,7 @@ + diff --git a/src/img/ublock.svg b/src/img/ublock.svg new file mode 100644 index 0000000000000..ea2ffd3c55230 --- /dev/null +++ b/src/img/ublock.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + diff --git a/src/js/3p-filters.js b/src/js/3p-filters.js index 4739aadfada48..7da055c1925bc 100644 --- a/src/js/3p-filters.js +++ b/src/js/3p-filters.js @@ -69,7 +69,8 @@ var renderFilterLists = function(soft) { listEntryTemplate = uDom('#templates .listEntry'), listStatsTemplate = vAPI.i18n('3pListsOfBlockedHostsPerListStats'), renderElapsedTimeToString = vAPI.i18n.renderElapsedTimeToString, - hideUnusedLists = document.body.classList.contains('hideUnused'); + hideUnusedLists = document.body.classList.contains('hideUnused'), + groupNames = new Map(); // Assemble a pretty list name if possible var listNameFromListKey = function(listKey) { @@ -170,7 +171,17 @@ var renderFilterLists = function(soft) { var liGroup = document.querySelector('#lists > .groupEntry[data-groupkey="' + groupKey + '"]'); if ( liGroup === null ) { liGroup = listGroupTemplate.clone().nodeAt(0); - var groupName = vAPI.i18n('3pGroup' + groupKey.charAt(0).toUpperCase() + groupKey.slice(1)); + var groupName = groupNames.get(groupKey); + if ( groupName === undefined ) { + groupName = vAPI.i18n('3pGroup' + groupKey.charAt(0).toUpperCase() + groupKey.slice(1)); + // Category "Social" is being renamed "Annoyances": ensure + // smooth transition. + // TODO: remove when majority of users are post-1.14.8 uBO. + if ( groupName === '' && groupKey === 'social' ) { + groupName = vAPI.i18n('3pGroupAnnoyances'); + } + groupNames.set(groupKey, groupName); + } if ( groupName !== '' ) { liGroup.querySelector('.geName').textContent = groupName; } diff --git a/src/js/assets.js b/src/js/assets.js index 09dffbc2ff53a..da04779dc34e0 100644 --- a/src/js/assets.js +++ b/src/js/assets.js @@ -975,9 +975,24 @@ var updaterStatus, updaterAssetDelayDefault = 120000, updaterAssetDelay = updaterAssetDelayDefault, updaterUpdated = [], - updaterFetched = new Set(); + updaterFetched = new Set(), + noRemoteResources; var updateFirst = function() { + // Firefox extension reviewers do not want uBO/webext to fetch its own + // scriptlets/resources asset from the project's own repo (github.com). + // See: https://github.com/gorhill/uBlock/commit/126110c9a0a0630cd556f5cb215422296a961029 + if ( noRemoteResources === undefined ) { + noRemoteResources = + typeof vAPI.webextFlavor === 'string' && + vAPI.webextFlavor.startsWith('Mozilla-Firefox-'); + } + // This is to ensure the packaged version will always be used (in case + // there is a cache remnant from a pre-stable webext era). + // See https://github.com/uBlockOrigin/uAssets/commit/a6c77af4afb45800d4fd7c268a2a5eab5a64daf3#commitcomment-24642912 + if ( noRemoteResources ) { + api.remove('ublock-resources'); + } updaterStatus = 'updating'; updaterFetched.clear(); updaterUpdated = []; @@ -1007,6 +1022,10 @@ var updateNext = function() { if ( cacheEntry && (cacheEntry.writeTime + assetEntry.updateAfter * 86400000) > now ) { continue; } + // Update of user scripts/resources forbidden? + if ( assetKey === 'ublock-resources' && noRemoteResources ) { + continue; + } if ( fireNotification( 'before-asset-updated', diff --git a/src/js/background.js b/src/js/background.js index 39faa13bedb66..a60e2ea05b9de 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -120,8 +120,8 @@ var µBlock = (function() { // jshint ignore:line // read-only systemSettings: { - compiledMagic: 'pwvcdyqfkuek', - selfieMagic: 'pwvcdyqfkuek' + compiledMagic: 'vrgorlgelgws', + selfieMagic: 'vrgorlgelgws' }, restoreBackupSettings: { @@ -153,9 +153,14 @@ var µBlock = (function() { // jshint ignore:line noopFunc: function(){}, apiErrorCount: 0, - mouseX: -1, - mouseY: -1, - mouseURL: '', + + mouseEventRegister: { + tabId: '', + x: -1, + y: -1, + url: '' + }, + epickerTarget: '', epickerZap: false, epickerEprom: null, diff --git a/src/js/cloud-ui.js b/src/js/cloud-ui.js index e616625a705bf..45a1f73a0b7a2 100644 --- a/src/js/cloud-ui.js +++ b/src/js/cloud-ui.js @@ -1,7 +1,7 @@ /******************************************************************************* uBlock Origin - a browser extension to block requests. - Copyright (C) 2015-2016 Raymond Hill + Copyright (C) 2015-2017 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 @@ -54,7 +54,7 @@ var messaging = vAPI.messaging; /******************************************************************************/ var onCloudDataReceived = function(entry) { - if ( typeof entry !== 'object' || entry === null ) { + if ( entry instanceof Object === false ) { return; } @@ -106,7 +106,15 @@ var pushData = function() { datakey: self.cloud.datakey, data: self.cloud.onPush() }, - fetchCloudData + function(error) { + var failed = typeof error === 'string'; + document.getElementById('cloudPush') + .classList + .toggle('error', failed); + document.querySelector('#cloudError > span') + .textContent = failed ? error : ''; + fetchCloudData(); + } ); }; @@ -149,7 +157,7 @@ var closeOptions = function(ev) { var submitOptions = function() { var onOptions = function(options) { - if ( typeof options !== 'object' || options === null ) { + if ( options instanceof Object === false ) { return; } self.cloud.options = options; @@ -182,30 +190,32 @@ var onInitialize = function(options) { fetchCloudData(); - var html = [ - '', - '', - ' ', - '', - '', - '
', - '
', - '

', - '

', - '

', - '
', - ].join(''); - - vAPI.insertHTML(widget, html); - vAPI.i18n.render(widget); - widget.classList.remove('hide'); - - uDom('#cloudPush').on('click', pushData); - uDom('#cloudPull').on('click', pullData); - uDom('#cloudPullAndMerge').on('click', pullAndMergeData); - uDom('#cloudCog').on('click', openOptions); - uDom('#cloudOptions').on('click', closeOptions); - uDom('#cloudOptionsSubmit').on('click', submitOptions); + var xhr = new XMLHttpRequest(); + xhr.open('GET', 'cloud-ui.html', true); + xhr.overrideMimeType('text/html;charset=utf-8'); + xhr.responseType = 'text'; + xhr.onload = function() { + this.onload = null; + var parser = new DOMParser(), + parsed = parser.parseFromString(this.responseText, 'text/html'), + fromParent = parsed.body; + while ( fromParent.firstElementChild !== null ) { + widget.appendChild( + document.adoptNode(fromParent.firstElementChild) + ); + } + + vAPI.i18n.render(widget); + widget.classList.remove('hide'); + + uDom('#cloudPush').on('click', pushData); + uDom('#cloudPull').on('click', pullData); + uDom('#cloudPullAndMerge').on('click', pullAndMergeData); + uDom('#cloudCog').on('click', openOptions); + uDom('#cloudOptions').on('click', closeOptions); + uDom('#cloudOptionsSubmit').on('click', submitOptions); + }; + xhr.send(); }; messaging.send('cloudWidget', { what: 'cloudGetOptions' }, onInitialize); diff --git a/src/js/commands.js b/src/js/commands.js index 09a684384b18d..71b03fb587d1b 100644 --- a/src/js/commands.js +++ b/src/js/commands.js @@ -35,10 +35,8 @@ case 'launch-element-zapper': case 'launch-element-picker': vAPI.tabs.get(null, function(tab) { - if ( tab instanceof Object === false ) { - return; - } - µb.mouseX = µb.mouseY = -1; + if ( tab instanceof Object === false ) { return; } + µb.mouseEventRegister.x = µb.mouseEventRegister.y = -1; µb.elementPickerExec(tab.id, undefined, command === 'launch-element-zapper'); }); break; diff --git a/src/js/contentscript.js b/src/js/contentscript.js index ec036ad035304..a231524af8233 100644 --- a/src/js/contentscript.js +++ b/src/js/contentscript.js @@ -23,9 +23,15 @@ /******************************************************************************* - +--> [[domSurveyor] --> domFilterer] - domWatcher--| - +--> [domCollapser] + +--> domCollapser + | + | + domWatcher--+ + | +-- domSurveyor + | | + +--> domFilterer --+-- domLogger + | + +-- domInspector domWatcher: Watches for changes in the DOM, and notify the other components about these @@ -41,11 +47,18 @@ domSurveyor: Surveys the DOM to find new cosmetic filters to apply to the current page. + domLogger: + Surveys the page to find and report the injected cosmetic filters blocking + actual elements on the current page. This component is dynamically loaded + IF AND ONLY IF uBO's logger is opened. + If page is whitelisted: - domWatcher: off - domCollapser: off - domFilterer: off - domSurveyor: off + - domLogger: off + I verified that the code in this file is completely flushed out of memory when a page is whitelisted. @@ -54,1020 +67,753 @@ - domCollapser: on - domFilterer: off - domSurveyor: off + - domLogger: off If generic cosmetic filtering is disabled: - domWatcher: on - domCollapser: on - domFilterer: on - domSurveyor: off + - domLogger: on if uBO logger is opened + + If generic cosmetic filtering is enabled: + - domWatcher: on + - domCollapser: on + - domFilterer: on + - domSurveyor: on + - domLogger: on if uBO logger is opened Additionally, the domSurveyor can turn itself off once it decides that it has become pointless (repeatedly not finding new cosmetic filters). - The domFilterer makes use of platform-dependent user styles[1] code, or - provide a default generic implementation if none is present. + The domFilterer makes use of platform-dependent user stylesheets[1]. + At time of writing, only modern Firefox provides a custom implementation, which makes for solid, reliable and low overhead cosmetic filtering on Firefox. + The generic implementation[2] performs as best as can be, but won't ever be - as reliable as real user styles. - [1] "user styles" refer to local CSS rules which have priority over, and - can't be overriden by a web page's own CSS rules. + as reliable and accurate as real user stylesheets. + + [1] "user stylesheets" refer to local CSS rules which have priority over, + and can't be overriden by a web page's own CSS rules. [2] below, see platformUserCSS / platformHideNode / platformUnhideNode */ -/******************************************************************************/ -/******************************************************************************/ -/******************************************************************************/ - -// Abort execution by throwing if an unexpected condition arise. -// - https://github.com/chrisaljoudi/uBlock/issues/456 - -if ( typeof vAPI !== 'object' ) { - throw new Error('uBlock Origin: aborting content scripts for ' + window.location); -} -vAPI.lock(); +// Abort execution if our global vAPI object does not exist. +// https://github.com/chrisaljoudi/uBlock/issues/456 +// https://github.com/gorhill/uBlock/issues/2029 -vAPI.matchesProp = (function() { - var docElem = document.documentElement; - if ( typeof docElem.matches !== 'function' ) { - if ( typeof docElem.mozMatchesSelector === 'function' ) { - return 'mozMatchesSelector'; - } else if ( typeof docElem.webkitMatchesSelector === 'function' ) { - return 'webkitMatchesSelector'; - } else if ( typeof docElem.msMatchesSelector === 'function' ) { - return 'msMatchesSelector'; - } - } - return 'matches'; -})(); +if ( typeof vAPI === 'object' && !vAPI.contentScript ) { // >>>>>>>> start of HUGE-IF-BLOCK /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ -// https://github.com/gorhill/uBlock/issues/2147 - -vAPI.SafeAnimationFrame = function(callback) { - this.fid = this.tid = null; - this.callback = callback; -}; - -vAPI.SafeAnimationFrame.prototype.start = function() { - if ( this.fid !== null ) { return; } - this.fid = requestAnimationFrame(this.callback); - this.tid = vAPI.setTimeout(this.callback, 1200000); -}; - -vAPI.SafeAnimationFrame.prototype.clear = function() { - if ( this.fid === null ) { return; } - cancelAnimationFrame(this.fid); - clearTimeout(this.tid); - this.fid = this.tid = null; -}; +vAPI.contentScript = true; /******************************************************************************/ /******************************************************************************/ -/******************************************************************************/ - -// The DOM filterer is the heart of uBO's cosmetic filtering. - -vAPI.domFilterer = (function() { +/******************************************************************************* -/******************************************************************************/ + The purpose of SafeAnimationFrame is to take advantage of the behavior of + window.requestAnimationFrame[1]. If we use an animation frame as a timer, + then this timer is described as follow: -var allExceptions = new Set(), - allSelectors = new Set(), - stagedNodes = []; + - time events are throttled by the browser when the viewport is not visible -- + there is no point for uBO to play with the DOM if the document is not + visible. + - time events are micro tasks[2]. + - time events are synchronized to monitor refresh, meaning that they can fire + at most 1/60 (typically). -// Complex selectors, due to their nature may need to be "de-committed". A -// Set() is used to implement this functionality. + If a delay value is provided, a plain timer is first used. Plain timers are + macro-tasks, so this is good when uBO wants to yield to more important tasks + on a page. Once the plain timer elapse, an animation frame is used to trigger + the next time at which to execute the job. -var complexSelectorsOldResultSet, - complexSelectorsCurrentResultSet = new Set(); + [1] https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame + [2] https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/ -/******************************************************************************/ +*/ -var cosmeticFiltersActivatedTimer = null; +// https://github.com/gorhill/uBlock/issues/2147 -var cosmeticFiltersActivated = function() { - cosmeticFiltersActivatedTimer = null; - vAPI.messaging.send( - 'contentscript', - { what: 'cosmeticFiltersActivated' } - ); +vAPI.SafeAnimationFrame = function(callback) { + this.fid = this.tid = null; + this.callback = callback; + this.boundMacroToMicro = this.macroToMicro.bind(this); }; -/******************************************************************************/ - -// If a platform does not support its own vAPI.userCSS (user styles), we -// provide a default (imperfect) implementation. - -// Probably no longer need to watch for style tags removal/tampering with fix -// to https://github.com/gorhill/uBlock/issues/963 - -var platformUserCSS = (function() { - if ( vAPI.userCSS instanceof Object ) { - return vAPI.userCSS; - } - - return { - enabled: true, - styles: [], - add: function(css) { - var style = document.createElement('style'); - style.setAttribute('type', 'text/css'); - style.textContent = css; - if ( document.head ) { - document.head.appendChild(style); - } - this.styles.push(style); - if ( style.sheet ) { - style.sheet.disabled = !this.enabled; - } - }, - remove: function(css) { - var i = this.styles.length, - style, parent; - while ( i-- ) { - style = this.styles[i]; - if ( style.textContent !== css ) { continue; } - parent = style.parentNode; - if ( parent !== null ) { - parent.removeChild(style); - } - this.styles.splice(i, 1); +vAPI.SafeAnimationFrame.prototype = { + start: function(delay) { + if ( delay === undefined ) { + if ( this.fid === null ) { + this.fid = requestAnimationFrame(this.callback); } - }, - toggle: function(state) { - if ( this.styles.length === '' ) { return; } - if ( state === undefined ) { - state = !this.enabled; + if ( this.tid === null ) { + this.tid = vAPI.setTimeout(this.callback, 20000); } - var i = this.styles.length, style; - while ( i-- ) { - style = this.styles[i]; - if ( style.sheet !== null ) { - style.sheet.disabled = !state; - } - } - this.enabled = state; + return; } - }; -})(); - -// If a platform does not provide its own (improved) vAPI.hideNode, we assign -// a default one to try to override author styles as best as can be. + if ( this.fid === null && this.tid === null ) { + this.tid = vAPI.setTimeout(this.boundMacroToMicro, delay); + } + }, + clear: function() { + if ( this.fid !== null ) { cancelAnimationFrame(this.fid); } + if ( this.tid !== null ) { clearTimeout(this.tid); } + this.fid = this.tid = null; + }, + macroToMicro: function() { + this.tid = null; + this.start(); + } +}; -var platformHideNode = vAPI.hideNode, - platformUnhideNode = vAPI.unhideNode; +/******************************************************************************/ +/******************************************************************************/ +/******************************************************************************/ -(function() { - if ( platformHideNode instanceof Function ) { - return; - } +vAPI.domWatcher = (function() { - var uid, - timer, - observer, - changedNodes = new Set(), - observerOptions = { - attributes: true, - attributeFilter: [ 'style' ] - }; + var addedNodeLists = [], + addedNodes = [], + domIsReady = false, + domLayoutObserver, + ignoreTags = new Set([ 'br', 'head', 'link', 'meta', 'script', 'style' ]), + listeners = [], + listenerIterator = [], listenerIteratorDirty = false, + removedNodeLists = [], + removedNodes = false, + safeObserverHandlerTimer; - // https://jsperf.com/clientheight-and-clientwidth-vs-getcomputedstyle - // Avoid getComputedStyle(), detecting whether a node is visible can be - // achieved with clientWidth/clientHeight. - // https://gist.github.com/paulirish/5d52fb081b3570c81e3a - // Do not interleave read-from/write-to the DOM. Write-to DOM - // operations would cause the first read-from to be expensive, and - // interleaving means that potentially all single read-from operation - // would be expensive rather than just the 1st one. - // Benchmarking toggling off/on cosmetic filtering confirms quite an - // improvement when: - // - batching as much as possible handling of all nodes; - // - avoiding to interleave read-from/write-to operations. - // However, toggling off/on cosmetic filtering repeatedly is not - // a real use case, but this shows this will help performance - // on sites which try to use inline styles to bypass blockers. - var batchProcess = function() { - timer.clear(); - var uid_ = uid; - for ( var node of changedNodes ) { - if ( - node[uid_] === undefined || - node.clientHeight === 0 || node.clientWidth === 0 - ) { - continue; + var safeObserverHandler = function() { + //console.time('dom watcher/safe observer handler'); + safeObserverHandlerTimer.clear(); + var i = addedNodeLists.length, + j = addedNodes.length, + nodeList, iNode, node; + while ( i-- ) { + nodeList = addedNodeLists[i]; + iNode = nodeList.length; + while ( iNode-- ) { + node = nodeList[iNode]; + if ( node.nodeType !== 1 ) { continue; } + if ( ignoreTags.has(node.localName) ) { continue; } + if ( node.parentElement === null ) { continue; } + addedNodes[j++] = node; } - var attr = node.getAttribute('style'); - if ( attr === null ) { - attr = ''; - } else if ( - attr.length !== 0 && - attr.charCodeAt(attr.length - 1) !== 0x3B /* ';' */ - ) { - attr += '; '; + } + addedNodeLists.length = 0; + i = removedNodeLists.length; + while ( i-- && removedNodes === false ) { + nodeList = removedNodeLists[i]; + iNode = nodeList.length; + while ( iNode-- ) { + if ( nodeList[iNode].nodeType !== 1 ) { continue; } + removedNodes = true; + break; } - node.setAttribute('style', attr + 'display: none !important;'); } - changedNodes.clear(); + removedNodeLists.length = 0; + //console.timeEnd('dom watcher/safe observer handler'); + if ( addedNodes.length === 0 && removedNodes === false ) { return; } + for ( var listener of getListenerIterator() ) { + listener.onDOMChanged(addedNodes, removedNodes); + } + addedNodes.length = 0; + removedNodes = false; }; + // https://github.com/chrisaljoudi/uBlock/issues/205 + // Do not handle added node directly from within mutation observer. var observerHandler = function(mutations) { - var i = mutations.length, - changedNodes_ = changedNodes; + //console.time('dom watcher/observer handler'); + var nodeList, mutation, + i = mutations.length; while ( i-- ) { - changedNodes_.add(mutations[i].target); + mutation = mutations[i]; + nodeList = mutation.addedNodes; + if ( nodeList.length !== 0 ) { + addedNodeLists.push(nodeList); + } + if ( removedNodes ) { continue; } + nodeList = mutation.removedNodes; + if ( nodeList.length !== 0 ) { + removedNodeLists.push(nodeList); + } + } + if ( addedNodeLists.length !== 0 || removedNodes ) { + safeObserverHandlerTimer.start( + addedNodeLists.length < 100 ? 1 : undefined + ); } - timer.start(); + //console.timeEnd('dom watcher/observer handler'); }; - platformHideNode = function(node) { - if ( uid === undefined ) { - uid = vAPI.randomToken(); - timer = new vAPI.SafeAnimationFrame(batchProcess); - } - if ( node[uid] === undefined ) { - node[uid] = node.hasAttribute('style') && (node.getAttribute('style') || ''); - } - // Performance: batch-process nodes to hide. - changedNodes.add(node); - timer.start(); - if ( observer === undefined ) { - observer = new MutationObserver(observerHandler); - } - observer.observe(node, observerOptions); + var startMutationObserver = function() { + if ( domLayoutObserver !== undefined || !domIsReady ) { return; } + domLayoutObserver = new MutationObserver(observerHandler); + domLayoutObserver.observe(document.documentElement, { + //attributeFilter: [ 'class', 'id' ], + //attributes: true, + childList: true, + subtree: true + }); + safeObserverHandlerTimer = new vAPI.SafeAnimationFrame(safeObserverHandler); + vAPI.shutdown.add(cleanup); }; - platformUnhideNode = function(node) { - if ( uid === undefined ) { return; } - var attr = node[uid]; - if ( attr === false ) { - node.removeAttribute('style'); - } else if ( typeof attr === 'string' ) { - node.setAttribute('style', attr); - } - delete node[uid]; + var stopMutationObserver = function() { + if ( domLayoutObserver === undefined ) { return; } + cleanup(); + vAPI.shutdown.remove(cleanup); }; -})(); -/******************************************************************************/ + var getListenerIterator = function() { + if ( listenerIteratorDirty ) { + listenerIterator = listeners.slice(); + listenerIteratorDirty = false; + } + return listenerIterator; + }; -// 'P' stands for 'Procedural' + var addListener = function(listener) { + if ( listeners.indexOf(listener) !== -1 ) { return; } + listeners.push(listener); + listenerIteratorDirty = true; + if ( domIsReady !== true ) { return; } + listener.onDOMCreated(); + startMutationObserver(); + }; -var PSelectorHasTask = function(task) { - this.selector = task[1]; -}; -PSelectorHasTask.prototype.exec = function(input) { - var output = []; - for ( var i = 0, n = input.length; i < n; i++ ) { - if ( input[i].querySelector(this.selector) !== null ) { - output.push(input[i]); + var removeListener = function(listener) { + var pos = listeners.indexOf(listener); + if ( pos === -1 ) { return; } + listeners.splice(pos, 1); + listenerIteratorDirty = true; + if ( listeners.length === 0 ) { + stopMutationObserver(); } - } - return output; -}; + }; -var PSelectorHasTextTask = function(task) { - this.needle = new RegExp(task[1]); -}; -PSelectorHasTextTask.prototype.exec = function(input) { - var output = []; - for ( var i = 0, n = input.length; i < n; i++ ) { - if ( this.needle.test(input[i].textContent) ) { - output.push(input[i]); + var cleanup = function() { + if ( domLayoutObserver !== undefined ) { + domLayoutObserver.disconnect(); + domLayoutObserver = null; } - } - return output; -}; - -var PSelectorIfTask = function(task) { - this.pselector = new PSelector(task[1]); -}; -PSelectorIfTask.prototype.target = true; -PSelectorIfTask.prototype.exec = function(input) { - var output = []; - for ( var i = 0, n = input.length; i < n; i++ ) { - if ( this.pselector.test(input[i]) === this.target ) { - output.push(input[i]); + if ( safeObserverHandlerTimer !== undefined ) { + safeObserverHandlerTimer.clear(); + safeObserverHandlerTimer = undefined; } - } - return output; -}; - -var PSelectorIfNotTask = function(task) { - PSelectorIfTask.call(this, task); - this.target = false; -}; -PSelectorIfNotTask.prototype = Object.create(PSelectorIfTask.prototype); -PSelectorIfNotTask.prototype.constructor = PSelectorIfNotTask; + }; -var PSelectorMatchesCSSTask = function(task) { - this.name = task[1].name; - this.value = new RegExp(task[1].value); -}; -PSelectorMatchesCSSTask.prototype.pseudo = null; -PSelectorMatchesCSSTask.prototype.exec = function(input) { - var output = [], style; - for ( var i = 0, n = input.length; i < n; i++ ) { - style = window.getComputedStyle(input[i], this.pseudo); - if ( style === null ) { return null; } /* FF */ - if ( this.value.test(style[this.name]) ) { - output.push(input[i]); + var start = function() { + domIsReady = true; + for ( var listener of getListenerIterator() ) { + listener.onDOMCreated(); } - } - return output; -}; + startMutationObserver(); + }; -var PSelectorMatchesCSSAfterTask = function(task) { - PSelectorMatchesCSSTask.call(this, task); - this.pseudo = ':after'; -}; -PSelectorMatchesCSSAfterTask.prototype = Object.create(PSelectorMatchesCSSTask.prototype); -PSelectorMatchesCSSAfterTask.prototype.constructor = PSelectorMatchesCSSAfterTask; + return { + start: start, + addListener: addListener, + removeListener: removeListener + }; +})(); -var PSelectorMatchesCSSBeforeTask = function(task) { - PSelectorMatchesCSSTask.call(this, task); - this.pseudo = ':before'; -}; -PSelectorMatchesCSSBeforeTask.prototype = Object.create(PSelectorMatchesCSSTask.prototype); -PSelectorMatchesCSSBeforeTask.prototype.constructor = PSelectorMatchesCSSBeforeTask; +/******************************************************************************/ +/******************************************************************************/ +/******************************************************************************/ -var PSelectorXpathTask = function(task) { - this.xpe = document.createExpression(task[1], null); - this.xpr = null; -}; -PSelectorXpathTask.prototype.exec = function(input) { - var output = [], j, node; - for ( var i = 0, n = input.length; i < n; i++ ) { - this.xpr = this.xpe.evaluate( - input[i], - XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, - this.xpr - ); - j = this.xpr.snapshotLength; - while ( j-- ) { - node = this.xpr.snapshotItem(j); - if ( node.nodeType === 1 ) { - output.push(node); - } +vAPI.matchesProp = (function() { + var docElem = document.documentElement; + if ( typeof docElem.matches !== 'function' ) { + if ( typeof docElem.mozMatchesSelector === 'function' ) { + return 'mozMatchesSelector'; + } else if ( typeof docElem.webkitMatchesSelector === 'function' ) { + return 'webkitMatchesSelector'; + } else if ( typeof docElem.msMatchesSelector === 'function' ) { + return 'msMatchesSelector'; } } - return output; -}; + return 'matches'; +})(); -var PSelector = function(o) { - if ( PSelector.prototype.operatorToTaskMap === undefined ) { - PSelector.prototype.operatorToTaskMap = new Map([ - [ ':has', PSelectorHasTask ], - [ ':has-text', PSelectorHasTextTask ], - [ ':if', PSelectorIfTask ], - [ ':if-not', PSelectorIfNotTask ], - [ ':matches-css', PSelectorMatchesCSSTask ], - [ ':matches-css-after', PSelectorMatchesCSSAfterTask ], - [ ':matches-css-before', PSelectorMatchesCSSBeforeTask ], - [ ':xpath', PSelectorXpathTask ] - ]); - } - this.raw = o.raw; - this.selector = o.selector; - this.tasks = []; - var tasks = o.tasks; - if ( !tasks ) { return; } - for ( var i = 0, task, ctor; i < tasks.length; i++ ) { - task = tasks[i]; - ctor = this.operatorToTaskMap.get(task[0]); - this.tasks.push(new ctor(task)); - } -}; -PSelector.prototype.operatorToTaskMap = undefined; -PSelector.prototype.prime = function(input) { - var root = input || document; - if ( this.selector !== '' ) { - return root.querySelectorAll(this.selector); - } - return [ root ]; -}; -PSelector.prototype.exec = function(input) { - //var t0 = window.performance.now(); - var tasks = this.tasks, nodes = this.prime(input); - for ( var i = 0, n = tasks.length; i < n && nodes.length !== 0; i++ ) { - nodes = tasks[i].exec(nodes); - } - //console.log('%s: %s ms', this.raw, (window.performance.now() - t0).toFixed(2)); - return nodes; -}; -PSelector.prototype.test = function(input) { - //var t0 = window.performance.now(); - var tasks = this.tasks, nodes = this.prime(input), AA = [ null ], aa; - for ( var i = 0, ni = nodes.length; i < ni; i++ ) { - AA[0] = nodes[i]; aa = AA; - for ( var j = 0, nj = tasks.length; j < nj && aa.length !== 0; j++ ) { - aa = tasks[j].exec(aa); - } - if ( aa.length !== 0 ) { return true; } +/******************************************************************************/ +/******************************************************************************/ +/******************************************************************************/ + +vAPI.injectScriptlet = function(doc, text) { + if ( !doc ) { return; } + try { + var script = doc.createElement('script'); + script.appendChild(doc.createTextNode(text)); + (doc.head || doc.documentElement).appendChild(script); + } catch (ex) { } - //console.log('%s: %s ms', this.raw, (window.performance.now() - t0).toFixed(2)); - return false; }; /******************************************************************************/ +/******************************************************************************/ +/******************************************************************************* -var domFilterer = { - addedNodesHandlerMissCount: 0, - commitTimer: null, - disabledId: vAPI.randomToken(), - enabled: true, - excludeId: undefined, - hiddenId: vAPI.randomToken(), - hiddenNodeCount: 0, - hiddenNodeEnforcer: false, - loggerEnabled: undefined, - - newHideSelectorBuffer: [], // Hide style filter buffer - newStyleRuleBuffer: [], // Non-hide style filter buffer - simpleHideSelectors: { // Hiding filters: simple selectors - entries: [], - matchesProp: vAPI.matchesProp, - selector: undefined, - add: function(selector) { - this.entries.push(selector); - this.selector = undefined; - }, - forEachNode: function(callback, root, extra) { - if ( this.selector === undefined ) { - this.selector = this.entries.join(extra + ',') + extra; - } - if ( root[this.matchesProp](this.selector) ) { - callback(root); - } - var nodes = root.querySelectorAll(this.selector), - i = nodes.length; - while ( i-- ) { - callback(nodes[i]); - } - } - }, - complexHideSelectors: { // Hiding filters: complex selectors - entries: [], - selector: undefined, - add: function(selector) { - this.entries.push(selector); - this.selector = undefined; - }, - forEachNode: function(callback) { - if ( this.selector === undefined ) { - this.selector = this.entries.join(','); - } - var nodes = document.querySelectorAll(this.selector), - i = nodes.length; - while ( i-- ) { - callback(nodes[i]); - } - } - }, - nqsSelectors: [], // Non-querySelector-able filters - proceduralSelectors: { // Hiding filters: procedural - entries: [], - add: function(o) { - this.entries.push(new PSelector(o)); - }, - forEachNode: function(callback) { - var pfilters = this.entries, i = pfilters.length, pfilter, nodes, j; - while ( i-- ) { - pfilter = pfilters[i]; - nodes = pfilter.exec(); - j = nodes.length; - while ( j-- ) { - callback(nodes[j], pfilter); - } - } - } - }, - - addExceptions: function(aa) { - for ( var i = 0, n = aa.length; i < n; i++ ) { - allExceptions.add(aa[i]); - } - }, - - addSelector: function(selector) { - if ( allSelectors.has(selector) || allExceptions.has(selector) ) { - return; - } - allSelectors.add(selector); - if ( selector.charCodeAt(0) !== 0x7B /* '{' */ ) { - this.newHideSelectorBuffer.push(selector); - if ( selector.indexOf(' ') === -1 ) { - this.simpleHideSelectors.add(selector); - } else { - this.complexHideSelectors.add(selector); - } - return; - } - var o = JSON.parse(selector); - if ( o.style ) { - this.newStyleRuleBuffer.push(o.style.join(' ')); - this.nqsSelectors.push(o.raw); - return; - } - if ( o.pseudoclass ) { - this.newHideSelectorBuffer.push(o.raw); - this.nqsSelectors.push(o.raw); - return; - } - if ( o.tasks ) { - this.proceduralSelectors.add(o); - return; - } - }, + The DOM filterer is the heart of uBO's cosmetic filtering. - addSelectors: function(aa) { - for ( var i = 0, n = aa.length; i < n; i++ ) { - this.addSelector(aa[i]); - } - }, + DOMBaseFilterer: platform-specific + | + | + +---- DOMFilterer: adds procedural cosmetic filtering - commit_: function() { - this.commitTimer.clear(); +*/ - var beforeHiddenNodeCount = this.hiddenNodeCount, - styleText = ''; +vAPI.DOMFilterer = (function() { - // CSS rules/hide - if ( this.newHideSelectorBuffer.length ) { - styleText = '\n:root ' + this.newHideSelectorBuffer.join(',\n:root ') + '\n{ display: none !important; }'; - this.newHideSelectorBuffer.length = 0; - } + // 'P' stands for 'Procedural' - // CSS rules/any css declaration - if ( this.newStyleRuleBuffer.length ) { - styleText += '\n' + this.newStyleRuleBuffer.join('\n'); - this.newStyleRuleBuffer.length = 0; + var PSelectorHasTask = function(task) { + this.selector = task[1]; + }; + PSelectorHasTask.prototype.exec = function(input) { + var output = []; + for ( var node of input ) { + if ( node.querySelector(this.selector) !== null ) { + output.push(node); + } } + return output; + }; - // Simple selectors: incremental. - - // Simple css selectors/hide - if ( this.simpleHideSelectors.entries.length ) { - var i = stagedNodes.length; - while ( i-- ) { - this.simpleHideSelectors.forEachNode(hideNode, stagedNodes[i], cssNotHiddenId); + var PSelectorHasTextTask = function(task) { + this.needle = new RegExp(task[1]); + }; + PSelectorHasTextTask.prototype.exec = function(input) { + var output = []; + for ( var node of input ) { + if ( this.needle.test(node.textContent) ) { + output.push(node); } } - stagedNodes = []; - - // Complex selectors: non-incremental. - complexSelectorsOldResultSet = complexSelectorsCurrentResultSet; - complexSelectorsCurrentResultSet = new Set(); + return output; + }; - // Complex css selectors/hide - // The handling of these can be considered optional, since they are - // also applied declaratively using a style tag. - if ( this.complexHideSelectors.entries.length ) { - this.complexHideSelectors.forEachNode(complexHideNode); + var PSelectorIfTask = function(task) { + this.pselector = new PSelector(task[1]); + }; + PSelectorIfTask.prototype.target = true; + PSelectorIfTask.prototype.exec = function(input) { + var output = []; + for ( var node of input ) { + if ( this.pselector.test(node) === this.target ) { + output.push(node); + } } + return output; + }; - // Procedural cosmetic filters - if ( this.proceduralSelectors.entries.length ) { - this.proceduralSelectors.forEachNode(complexHideNode); - } + var PSelectorIfNotTask = function(task) { + PSelectorIfTask.call(this, task); + this.target = false; + }; + PSelectorIfNotTask.prototype = Object.create(PSelectorIfTask.prototype); + PSelectorIfNotTask.prototype.constructor = PSelectorIfNotTask; - // https://github.com/gorhill/uBlock/issues/1912 - // If one or more nodes have been manually hidden, insert a style tag - // targeting these manually hidden nodes. For browsers supporting - // user styles, this allows uBO to win. - var commitHit = this.hiddenNodeCount !== beforeHiddenNodeCount; - if ( commitHit ) { - if ( this.hiddenNodeEnforcer === false ) { - styleText += '\n:root *[' + this.hiddenId + '][hidden] { display: none !important; }'; - this.hiddenNodeEnforcer = true; + var PSelectorMatchesCSSTask = function(task) { + this.name = task[1].name; + this.value = new RegExp(task[1].value); + }; + PSelectorMatchesCSSTask.prototype.pseudo = null; + PSelectorMatchesCSSTask.prototype.exec = function(input) { + var output = [], style; + for ( var node of input ) { + style = window.getComputedStyle(node, this.pseudo); + if ( style === null ) { return null; } /* FF */ + if ( this.value.test(style[this.name]) ) { + output.push(node); } - this.addedNodesHandlerMissCount = 0; - } else { - this.addedNodesHandlerMissCount += 1; } + return output; + }; - if ( styleText !== '' ) { - platformUserCSS.add(styleText); - } + var PSelectorMatchesCSSAfterTask = function(task) { + PSelectorMatchesCSSTask.call(this, task); + this.pseudo = ':after'; + }; + PSelectorMatchesCSSAfterTask.prototype = Object.create(PSelectorMatchesCSSTask.prototype); + PSelectorMatchesCSSAfterTask.prototype.constructor = PSelectorMatchesCSSAfterTask; - // Un-hide nodes previously hidden. - for ( var node of complexSelectorsOldResultSet ) { - this.unhideNode(node); - } - complexSelectorsOldResultSet.clear(); + var PSelectorMatchesCSSBeforeTask = function(task) { + PSelectorMatchesCSSTask.call(this, task); + this.pseudo = ':before'; + }; + PSelectorMatchesCSSBeforeTask.prototype = Object.create(PSelectorMatchesCSSTask.prototype); + PSelectorMatchesCSSBeforeTask.prototype.constructor = PSelectorMatchesCSSBeforeTask; - // If DOM nodes have been affected, lazily notify core process. - if ( - this.loggerEnabled !== false && - commitHit && - cosmeticFiltersActivatedTimer === null - ) { - cosmeticFiltersActivatedTimer = vAPI.setTimeout( - cosmeticFiltersActivated, - 503 + var PSelectorXpathTask = function(task) { + this.xpe = document.createExpression(task[1], null); + this.xpr = null; + }; + PSelectorXpathTask.prototype.exec = function(input) { + var output = [], j; + for ( var node of input ) { + this.xpr = this.xpe.evaluate( + node, + XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, + this.xpr ); + j = this.xpr.snapshotLength; + while ( j-- ) { + node = this.xpr.snapshotItem(j); + if ( node.nodeType === 1 ) { + output.push(node); + } + } } - }, + return output; + }; - commit: function(nodes, commitNow) { - if ( nodes === 'all' ) { - stagedNodes = [ document.documentElement ]; - } else if ( stagedNodes[0] !== document.documentElement ) { - stagedNodes = stagedNodes.concat(nodes); + var PSelector = function(o) { + if ( PSelector.prototype.operatorToTaskMap === undefined ) { + PSelector.prototype.operatorToTaskMap = new Map([ + [ ':has', PSelectorHasTask ], + [ ':has-text', PSelectorHasTextTask ], + [ ':if', PSelectorIfTask ], + [ ':if-not', PSelectorIfNotTask ], + [ ':matches-css', PSelectorMatchesCSSTask ], + [ ':matches-css-after', PSelectorMatchesCSSAfterTask ], + [ ':matches-css-before', PSelectorMatchesCSSBeforeTask ], + [ ':xpath', PSelectorXpathTask ] + ]); + } + this.budget = 200; // I arbitrary picked a 1/5 second + this.raw = o.raw; + this.cost = 0; + this.lastAllowanceTime = 0; + this.selector = o.selector; + this.tasks = []; + var tasks = o.tasks; + if ( !tasks ) { return; } + for ( var task of tasks ) { + this.tasks.push(new (this.operatorToTaskMap.get(task[0]))(task)); } - if ( commitNow ) { - this.commitTimer.clear(); - this.commit_(); - return; + }; + PSelector.prototype.operatorToTaskMap = undefined; + PSelector.prototype.prime = function(input) { + var root = input || document; + if ( this.selector !== '' ) { + return root.querySelectorAll(this.selector); } - this.commitTimer.start(); - }, - - createProceduralFilter: function(o) { - return new PSelector(o); - }, - - getExcludeId: function() { - if ( this.excludeId === undefined ) { - this.excludeId = vAPI.randomToken(); + return [ root ]; + }; + PSelector.prototype.exec = function(input) { + var nodes = this.prime(input); + for ( var task of this.tasks ) { + if ( nodes.length === 0 ) { break; } + nodes = task.exec(nodes); } - return this.excludeId; - }, - - hideNode: function(node) { - if ( node[this.hiddenId] !== undefined ) { return; } - if ( this.excludeId !== undefined && node[this.excludeId] ) { return; } - node.setAttribute(this.hiddenId, ''); - this.hiddenNodeCount += 1; - node.hidden = true; - node[this.hiddenId] = null; - platformHideNode(node); - }, - - init: function() { - this.commitTimer = new vAPI.SafeAnimationFrame(this.commit_.bind(this)); - }, - - showNode: function(node) { - node.hidden = false; - platformUnhideNode(node); - }, - - toggleLogging: function(state) { - this.loggerEnabled = state; - }, - - toggleOff: function() { - platformUserCSS.toggle(false); - this.enabled = false; - }, - - toggleOn: function() { - platformUserCSS.toggle(true); - this.enabled = true; - }, - - userCSS: platformUserCSS, - - unhideNode: function(node) { - if ( node[this.hiddenId] !== undefined ) { - this.hiddenNodeCount--; + return nodes; + }; + PSelector.prototype.test = function(input) { + var nodes = this.prime(input), AA = [ null ], aa; + for ( var node of nodes ) { + AA[0] = node; aa = AA; + for ( var task of this.tasks ) { + aa = task.exec(aa); + if ( aa.length === 0 ) { break; } + } + if ( aa.length !== 0 ) { return true; } } - node.removeAttribute(this.hiddenId); - node[this.hiddenId] = undefined; - node.hidden = false; - platformUnhideNode(node); - }, - - unshowNode: function(node) { - node.hidden = true; - platformHideNode(node); - }, - - domChangedHandler: function(addedNodes) { - this.commit(addedNodes); - }, - - start: function() { - var domChangedHandler = this.domChangedHandler.bind(this); - vAPI.domWatcher.addListener(domChangedHandler); - vAPI.shutdown.add(function() { - vAPI.domWatcher.removeListener(domChangedHandler); - }); - } -}; - -/******************************************************************************/ - -var hideNode = domFilterer.hideNode.bind(domFilterer); - -var complexHideNode = function(node) { - complexSelectorsCurrentResultSet.add(node); - if ( !complexSelectorsOldResultSet.delete(node) ) { - hideNode(node); - } -}; - -var cssNotHiddenId = ':not([' + domFilterer.hiddenId + '])'; + return false; + }; -domFilterer.init(); + var DOMProceduralFilterer = function(domFilterer) { + this.domFilterer = domFilterer; + this.domIsReady = false; + this.domIsWatched = false; + this.addedSelectors = new Map(); + this.addedNodes = false; + this.removedNodes = false; + this.selectors = new Map(); + }; -/******************************************************************************/ + DOMProceduralFilterer.prototype = { + + addProceduralSelectors: function(aa) { + var raw, o, pselector, + mustCommit = this.domIsWatched; + for ( var i = 0, n = aa.length; i < n; i++ ) { + raw = aa[i]; + o = JSON.parse(raw); + if ( o.style ) { + this.domFilterer.addCSSRule(o.style[0], o.style[1]); + mustCommit = true; + continue; + } + if ( o.pseudoclass ) { + this.domFilterer.addCSSRule( + o.raw, + 'display:none!important;' + ); + mustCommit = true; + continue; + } + if ( o.tasks ) { + if ( this.selectors.has(raw) === false ) { + pselector = new PSelector(o); + this.selectors.set(raw, pselector); + this.addedSelectors.set(raw, pselector); + mustCommit = true; + } + continue; + } + } + if ( mustCommit === false ) { return; } + this.domFilterer.commit(); + if ( this.domFilterer.hasListeners() ) { + this.domFilterer.triggerListeners({ + procedural: Array.from(this.addedSelectors.values()) + }); + } + }, -return domFilterer; + commitNow: function() { + if ( this.selectors.size === 0 || this.domIsReady === false ) { + return; + } -/******************************************************************************/ + if ( this.addedNodes || this.removedNodes ) { + this.addedSelectors.clear(); + } -})(); + var entry, nodes, i; -/******************************************************************************/ -/******************************************************************************/ -/******************************************************************************/ + if ( this.addedSelectors.size !== 0 ) { + //console.time('procedural selectors/filterset changed'); + for ( entry of this.addedSelectors ) { + nodes = entry[1].exec(); + i = nodes.length; + while ( i-- ) { + this.domFilterer.hideNode(nodes[i]); + } + } + this.addedSelectors.clear(); + //console.timeEnd('procedural selectors/filterset changed'); + return; + } -// This is executed once, and since no hooks are left behind once the response -// is received, I expect this code to be garbage collected by the browser. + //console.time('procedural selectors/dom layout changed'); -(function domIsLoading() { + this.addedNodes = this.removedNodes = false; - var responseHandler = function(response) { - // cosmetic filtering engine aka 'cfe' - var cfeDetails = response && response.specificCosmeticFilters; - if ( !cfeDetails || !cfeDetails.ready ) { - vAPI.domWatcher = vAPI.domCollapser = vAPI.domFilterer = - vAPI.domSurveyor = vAPI.domIsLoaded = null; - vAPI.unlock(); - return; - } + var t0 = Date.now(), + t1, pselector, allowance; - if ( response.noCosmeticFiltering ) { - vAPI.domFilterer = null; - vAPI.domSurveyor = null; - } else { - var domFilterer = vAPI.domFilterer; - domFilterer.toggleLogging(response.loggerEnabled); - if ( response.noGenericCosmeticFiltering || cfeDetails.noDOMSurveying ) { - vAPI.domSurveyor = null; - } - if ( cfeDetails.cosmeticHide.length !== 0 || cfeDetails.cosmeticDonthide.length !== 0 ) { - domFilterer.addExceptions(cfeDetails.cosmeticDonthide); - domFilterer.addSelectors(cfeDetails.cosmeticHide); - domFilterer.commit('all', true); + for ( entry of this.selectors ) { + pselector = entry[1]; + allowance = Math.floor((t0 - pselector.lastAllowanceTime) / 2000); + if ( allowance >= 1 ) { + pselector.budget += allowance * 50; + if ( pselector.budget > 200 ) { pselector.budget = 200; } + pselector.lastAllowanceTime = t0; + } + if ( pselector.budget <= 0 ) { continue; } + nodes = pselector.exec(); + t1 = Date.now(); + pselector.budget += t0 - t1; + if ( pselector.budget < -500 ) { + console.info('uBO: disabling %s', pselector.raw); + pselector.budget = -0x7FFFFFFF; + } + t0 = t1; + i = nodes.length; + while ( i-- ) { + this.domFilterer.hideNode(nodes[i]); + } } - } - var parent = document.head || document.documentElement; - if ( parent ) { - var elem, text; - if ( cfeDetails.netHide.length !== 0 ) { - elem = document.createElement('style'); - elem.setAttribute('type', 'text/css'); - text = cfeDetails.netHide.join(',\n'); - text += response.collapseBlocked ? - '\n{display:none !important;}' : - '\n{visibility:hidden !important;}'; - elem.appendChild(document.createTextNode(text)); - parent.appendChild(elem); - } - // Library of resources is located at: - // https://github.com/gorhill/uBlock/blob/master/assets/ublock/resources.txt - if ( cfeDetails.scripts ) { - elem = document.createElement('script'); - // Have the injected script tag remove itself when execution completes: - // to keep DOM as clean as possible. - text = cfeDetails.scripts + - "\n" + - "(function() {\n" + - " var c = document.currentScript,\n" + - " p = c && c.parentNode;\n" + - " if ( p ) {\n" + - " p.removeChild(c);\n" + - " }\n" + - "})();"; - elem.appendChild(document.createTextNode(text)); - parent.appendChild(elem); - vAPI.injectedScripts = text; - } - } + //console.timeEnd('procedural selectors/dom layout changed'); + }, - // https://github.com/chrisaljoudi/uBlock/issues/587 - // If no filters were found, maybe the script was injected before - // uBlock's process was fully initialized. When this happens, pages - // won't be cleaned right after browser launch. - if ( document.readyState !== 'loading' ) { - (new vAPI.SafeAnimationFrame(vAPI.domIsLoaded)).start(); - } else { - document.addEventListener('DOMContentLoaded', vAPI.domIsLoaded); - } - }; + createProceduralFilter: function(o) { + return new PSelector(o); + }, - var url = window.location.href; - vAPI.messaging.send( - 'contentscript', - { - what: 'retrieveContentScriptParameters', - pageURL: url, - locationURL: url + onDOMCreated: function() { + this.domIsReady = true; + this.domFilterer.commitNow(); }, - responseHandler - ); -})(); + onDOMChanged: function(addedNodes, removedNodes) { + if ( this.selectors.size === 0 ) { return; } + this.addedNodes = this.addedNodes || addedNodes.length !== 0; + this.removedNodes = this.removedNodes || removedNodes; + this.domFilterer.commit(); + } + }; -/******************************************************************************/ -/******************************************************************************/ -/******************************************************************************/ + var DOMFiltererBase = vAPI.DOMFilterer; -vAPI.domWatcher = (function() { + var domFilterer = function() { + DOMFiltererBase.call(this); + this.exceptions = []; + this.proceduralFilterer = new DOMProceduralFilterer(this); + this.hideNodeAttr = undefined; + this.hideNodeStyleSheetInjected = false; - var domLayoutObserver = null, - ignoreTags = { 'head': 1, 'link': 1, 'meta': 1, 'script': 1, 'style': 1 }, - addedNodeLists = [], - addedNodes = [], - removedNodes = false, - listeners = []; + // May or may not exist: cache locally since this may be called often. + this.baseOnDOMChanged = DOMFiltererBase.prototype.onDOMChanged; - var safeObserverHandler = function() { - safeObserverHandlerTimer.clear(); - var i = addedNodeLists.length, - nodeList, iNode, node; - while ( i-- ) { - nodeList = addedNodeLists[i]; - iNode = nodeList.length; - while ( iNode-- ) { - node = nodeList[iNode]; - if ( node.nodeType !== 1 ) { - continue; - } - if ( ignoreTags[node.localName] === 1 ) { - continue; - } - addedNodes.push(node); - } - } - addedNodeLists.length = 0; - if ( addedNodes.length !== 0 || removedNodes ) { - listeners[0](addedNodes); - if ( listeners[1] ) { - listeners[1](addedNodes); - } - addedNodes.length = 0; - removedNodes = false; + if ( vAPI.domWatcher instanceof Object ) { + vAPI.domWatcher.addListener(this); } }; + domFilterer.prototype = Object.create(DOMFiltererBase.prototype); + domFilterer.prototype.constructor = domFilterer; - var safeObserverHandlerTimer = new vAPI.SafeAnimationFrame(safeObserverHandler); - - // https://github.com/chrisaljoudi/uBlock/issues/205 - // Do not handle added node directly from within mutation observer. - var observerHandler = function(mutations) { - var nodeList, mutation, - i = mutations.length; - while ( i-- ) { - mutation = mutations[i]; - nodeList = mutation.addedNodes; - if ( nodeList.length !== 0 ) { - addedNodeLists.push(nodeList); - } - if ( mutation.removedNodes.length !== 0 ) { - removedNodes = true; - } - } - if ( addedNodeLists.length !== 0 || removedNodes ) { - safeObserverHandlerTimer.start(); - } + domFilterer.prototype.commitNow = function() { + DOMFiltererBase.prototype.commitNow.call(this); + this.proceduralFilterer.commitNow(); }; - var addListener = function(listener) { - if ( listeners.indexOf(listener) !== -1 ) { - return; - } - listeners.push(listener); - if ( domLayoutObserver !== null ) { - return; - } - domLayoutObserver = new MutationObserver(observerHandler); - domLayoutObserver.observe(document.documentElement, { - //attributeFilter: [ 'class', 'id' ], - //attributes: true, - childList: true, - subtree: true - }); + domFilterer.prototype.addProceduralSelectors = function(aa) { + this.proceduralFilterer.addProceduralSelectors(aa); }; - var removeListener = function(listener) { - var pos = listeners.indexOf(listener); - if ( pos === -1 ) { - return; - } - listeners.splice(pos, 1); - if ( listeners.length !== 0 || domLayoutObserver === null ) { - return; - } - domLayoutObserver.disconnect(); - domLayoutObserver = null; + domFilterer.prototype.createProceduralFilter = function(o) { + return this.proceduralFilterer.createProceduralFilter(o); }; - var start = function() { - vAPI.shutdown.add(function() { - if ( domLayoutObserver !== null ) { - domLayoutObserver.disconnect(); - domLayoutObserver = null; - } - safeObserverHandlerTimer.clear(); - }); + domFilterer.prototype.getAllSelectors = function() { + var out = DOMFiltererBase.prototype.getAllSelectors.call(this); + out.procedural = Array.from(this.proceduralFilterer.selectors.values()); + return out; }; - return { - addListener: addListener, - removeListener: removeListener, - start: start + domFilterer.prototype.getAllExceptionSelectors = function() { + return this.exceptions.join(',\n'); }; + + domFilterer.prototype.onDOMCreated = function() { + if ( DOMFiltererBase.prototype.onDOMCreated !== undefined ) { + DOMFiltererBase.prototype.onDOMCreated.call(this); + } + this.proceduralFilterer.onDOMCreated(); + }; + + domFilterer.prototype.onDOMChanged = function() { + if ( this.baseOnDOMChanged !== undefined ) { + this.baseOnDOMChanged.apply(this, arguments); + } + this.proceduralFilterer.onDOMChanged.apply( + this.proceduralFilterer, + arguments + ); + }; + + return domFilterer; })(); +vAPI.domFilterer = new vAPI.DOMFilterer(); + /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ vAPI.domCollapser = (function() { - var timer = null; - var pendingRequests = Object.create(null); - var roundtripRequests = []; + var resquestIdGenerator = 1, + processTimer, + toProcess = [], + toFilter = [], + toCollapse = new Map(), + cachedBlockedSet, + cachedBlockedSetHash, + cachedBlockedSetTimer; var src1stProps = { 'embed': 'src', + 'iframe': 'src', 'img': 'src', 'object': 'data' }; var src2ndProps = { 'img': 'srcset' }; - var netSelectorCacheCount = 0; - var messaging = vAPI.messaging; + var tagToTypeMap = { + embed: 'object', + iframe: 'sub_frame', + img: 'image', + object: 'object' + }; + var netSelectorCacheCount = 0, + messaging = vAPI.messaging; - // Because a while ago I have observed constructors are faster than - // literal object instanciations. - var RoundtripRequest = function(tag, attr, url) { - this.tag = tag; - this.attr = attr; - this.url = url; - this.collapse = false; + var cachedBlockedSetClear = function() { + cachedBlockedSet = + cachedBlockedSetHash = + cachedBlockedSetTimer = undefined; }; + // https://github.com/chrisaljoudi/uBlock/issues/174 + // Do not remove fragment from src URL var onProcessed = function(response) { - // This can happens if uBO is restarted. - if ( !response ) { + if ( !response ) { // This happens if uBO is disabled or restarted. + toCollapse.clear(); return; } - var requests = response.result; - if ( requests === null || Array.isArray(requests) === false ) { + + var targets = toCollapse.get(response.id); + if ( targets === undefined ) { return; } + toCollapse.delete(response.id); + if ( cachedBlockedSetHash !== response.hash ) { + cachedBlockedSet = new Set(response.blockedResources); + cachedBlockedSetHash = response.hash; + if ( cachedBlockedSetTimer !== undefined ) { + clearTimeout(cachedBlockedSetTimer); + } + cachedBlockedSetTimer = vAPI.setTimeout(cachedBlockedSetClear, 30000); + } + if ( cachedBlockedSet === undefined || cachedBlockedSet.size === 0 ) { return; } var selectors = [], + iframeLoadEventPatch = vAPI.iframeLoadEventPatch, netSelectorCacheCountMax = response.netSelectorCacheCountMax, - aa = [ null ], - request, key, entry, target, value; - // https://github.com/gorhill/uBlock/issues/2256 - var iframeLoadEventPatch = vAPI.iframeLoadEventPatch; - // Important: process in chronological order -- this ensures the - // cached selectors are the most useful ones. - for ( var i = 0, ni = requests.length; i < ni; i++ ) { - request = requests[i]; - key = request.tag + ' ' + request.attr + ' ' + request.url; - entry = pendingRequests[key]; - if ( entry === undefined ) { - continue; + tag, prop, src, value; + + for ( var target of targets ) { + tag = target.localName; + prop = src1stProps[tag]; + if ( prop === undefined ) { continue; } + src = target[prop]; + if ( typeof src !== 'string' || src.length === 0 ) { + prop = src2ndProps[tag]; + if ( prop === undefined ) { continue; } + src = target[prop]; + if ( typeof src !== 'string' || src.length === 0 ) { continue; } } - delete pendingRequests[key]; - // https://github.com/chrisaljoudi/uBlock/issues/869 - if ( !request.collapse ) { + if ( cachedBlockedSet.has(tagToTypeMap[tag] + ' ' + src) === false ) { continue; } - if ( Array.isArray(entry) === false ) { - aa[0] = entry; - entry = aa; + // https://github.com/chrisaljoudi/uBlock/issues/399 + // Never remove elements from the DOM, just hide them + target.style.setProperty('display', 'none', 'important'); + target.hidden = true; + // https://github.com/chrisaljoudi/uBlock/issues/1048 + // Use attribute to construct CSS rule + if ( + netSelectorCacheCount <= netSelectorCacheCountMax && + (value = target.getAttribute(prop)) + ) { + selectors.push(tag + '[' + prop + '="' + value + '"]'); + netSelectorCacheCount += 1; } - for ( var j = 0, nj = entry.length; j < nj; j++ ) { - target = entry[j]; - // https://github.com/chrisaljoudi/uBlock/issues/399 - // Never remove elements from the DOM, just hide them - target.style.setProperty('display', 'none', 'important'); - target.hidden = true; - // https://github.com/chrisaljoudi/uBlock/issues/1048 - // Use attribute to construct CSS rule - if ( - netSelectorCacheCount <= netSelectorCacheCountMax && - (value = target.getAttribute(request.attr)) - ) { - selectors.push(request.tag + '[' + request.attr + '="' + value + '"]'); - netSelectorCacheCount += 1; - } - if ( iframeLoadEventPatch ) { iframeLoadEventPatch(target); } + if ( iframeLoadEventPatch !== undefined ) { + iframeLoadEventPatch(target); } } + if ( selectors.length !== 0 ) { messaging.send( 'contentscript', @@ -1082,72 +828,35 @@ vAPI.domCollapser = (function() { }; var send = function() { - timer = null; - // https://github.com/gorhill/uBlock/issues/1927 - // Normalize hostname to avoid trailing dot of FQHN. - var pageHostname = window.location.hostname || ''; - if ( - pageHostname.length && - pageHostname.charCodeAt(pageHostname.length - 1) === 0x2e - ) { - pageHostname = pageHostname.slice(0, -1); - } - messaging.send( - 'contentscript', - { - what: 'filterRequests', - pageURL: window.location.href, - pageHostname: pageHostname, - requests: roundtripRequests - }, onProcessed - ); - roundtripRequests = []; + processTimer = undefined; + toCollapse.set(resquestIdGenerator, toProcess); + var msg = { + what: 'getCollapsibleBlockedRequests', + id: resquestIdGenerator, + frameURL: window.location.href, + resources: toFilter, + hash: cachedBlockedSetHash + }; + messaging.send('contentscript', msg, onProcessed); + toProcess = []; + toFilter = []; + resquestIdGenerator += 1; }; var process = function(delay) { - if ( roundtripRequests.length === 0 ) { - return; - } + if ( toProcess.length === 0 ) { return; } if ( delay === 0 ) { - clearTimeout(timer); + if ( processTimer !== undefined ) { + clearTimeout(processTimer); + } send(); - } else if ( timer === null ) { - timer = vAPI.setTimeout(send, delay || 20); + } else if ( processTimer === undefined ) { + processTimer = vAPI.setTimeout(send, delay || 20); } }; var add = function(target) { - var tag = target.localName; - var prop = src1stProps[tag]; - if ( prop === undefined ) { - return; - } - // https://github.com/chrisaljoudi/uBlock/issues/174 - // Do not remove fragment from src URL - var src = target[prop]; - if ( typeof src !== 'string' || src.length === 0 ) { - prop = src2ndProps[tag]; - if ( prop === undefined ) { - return; - } - src = target[prop]; - if ( typeof src !== 'string' || src.length === 0 ) { - return; - } - } - if ( src.lastIndexOf('http', 0) !== 0 ) { - return; - } - var key = tag + ' ' + prop + ' ' + src, - entry = pendingRequests[key]; - if ( entry === undefined ) { - pendingRequests[key] = target; - roundtripRequests.push(new RoundtripRequest(tag, prop, src)); - } else if ( Array.isArray(entry) ) { - entry.push(target); - } else { - pendingRequests[key] = [ entry, target ]; - } + toProcess[toProcess.length] = target; }; var addMany = function(targets) { @@ -1177,12 +886,7 @@ vAPI.domCollapser = (function() { // and which scripts are selectively looked-up from: // https://github.com/gorhill/uBlock/blob/master/assets/ublock/resources.txt if ( vAPI.injectedScripts ) { - var scriptTag = document.createElement('script'); - scriptTag.appendChild(document.createTextNode(vAPI.injectedScripts)); - var parent = iframe.contentDocument && iframe.contentDocument.head; - if ( parent ) { - parent.appendChild(scriptTag); - } + vAPI.injectScriptlet(iframe.contentDocument, vAPI.injectedScripts); } }; @@ -1198,19 +902,12 @@ vAPI.domCollapser = (function() { primeLocalIFrame(iframe); return; } - if ( src.lastIndexOf('http', 0) !== 0 ) { - return; - } - var key = 'iframe' + ' ' + 'src' + ' ' + src, - entry = pendingRequests[key]; - if ( entry === undefined ) { - pendingRequests[key] = iframe; - roundtripRequests.push(new RoundtripRequest('iframe', 'src', src)); - } else if ( Array.isArray(entry) ) { - entry.push(iframe); - } else { - pendingRequests[key] = [ entry, iframe ]; - } + if ( src.lastIndexOf('http', 0) !== 0 ) { return; } + toFilter[toFilter.length] = { + type: 'sub_frame', + url: iframe.src + }; + add(iframe); }; var addIFrames = function(iframes) { @@ -1221,68 +918,78 @@ vAPI.domCollapser = (function() { }; var onResourceFailed = function(ev) { - vAPI.domCollapser.add(ev.target); - vAPI.domCollapser.process(); + if ( tagToTypeMap[ev.target.localName] !== undefined ) { + add(ev.target); + process(); + } }; - var domChangedHandler = function(nodes) { - var node; - for ( var i = 0, ni = nodes.length; i < ni; i++ ) { - node = nodes[i]; - if ( node.localName === 'iframe' ) { - addIFrame(node); + var domWatcherInterface = { + onDOMCreated: function() { + if ( vAPI instanceof Object === false ) { return; } + if ( vAPI.domCollapser instanceof Object === false ) { + if ( vAPI.domWatcher instanceof Object ) { + vAPI.domWatcher.removeListener(domWatcherInterface); + } + return; } - if ( node.childElementCount !== 0 ) { + // Listener to collapse blocked resources. + // - Future requests not blocked yet + // - Elements dynamically added to the page + // - Elements which resource URL changes + // https://github.com/chrisaljoudi/uBlock/issues/7 + // Preferring getElementsByTagName over querySelectorAll: + // http://jsperf.com/queryselectorall-vs-getelementsbytagname/145 + var elems = document.images || document.getElementsByTagName('img'), + i = elems.length, elem; + while ( i-- ) { + elem = elems[i]; + if ( elem.complete ) { + add(elem); + } + } + addMany(document.embeds || document.getElementsByTagName('embed')); + addMany(document.getElementsByTagName('object')); + addIFrames(document.getElementsByTagName('iframe')); + process(0); + + document.addEventListener('error', onResourceFailed, true); + + vAPI.shutdown.add(function() { + document.removeEventListener('error', onResourceFailed, true); + if ( processTimer !== undefined ) { + clearTimeout(processTimer); + } + }); + }, + onDOMChanged: function(addedNodes) { + var ni = addedNodes.length; + if ( ni === 0 ) { return; } + for ( var i = 0, node; i < ni; i++ ) { + node = addedNodes[i]; + if ( node.localName === 'iframe' ) { + addIFrame(node); + } + if ( node.childElementCount === 0 ) { continue; } var iframes = node.getElementsByTagName('iframe'); if ( iframes.length !== 0 ) { addIFrames(iframes); } } + process(); } - process(); }; - var start = function() { - // Listener to collapse blocked resources. - // - Future requests not blocked yet - // - Elements dynamically added to the page - // - Elements which resource URL changes - - // https://github.com/chrisaljoudi/uBlock/issues/7 - // Preferring getElementsByTagName over querySelectorAll: - // http://jsperf.com/queryselectorall-vs-getelementsbytagname/145 - var elems = document.images || document.getElementsByTagName('img'), - i = elems.length, elem; - while ( i-- ) { - elem = elems[i]; - if ( elem.complete ) { - add(elem); - } - } - addMany(document.embeds || document.getElementsByTagName('embed')); - addMany(document.getElementsByTagName('object')); - addIFrames(document.getElementsByTagName('iframe')); - process(0); - - document.addEventListener('error', onResourceFailed, true); - vAPI.domWatcher.addListener(domChangedHandler); - - vAPI.shutdown.add(function() { - document.removeEventListener('error', onResourceFailed, true); - vAPI.domWatcher.removeListener(domChangedHandler); - if ( timer !== null ) { - clearTimeout(timer); - } - }); - }; + if ( vAPI.domWatcher instanceof Object ) { + vAPI.domWatcher.addListener(domWatcherInterface); + } return { add: add, addMany: addMany, addIFrame: addIFrame, addIFrames: addIFrames, - process: process, - start: start + process: process }; })(); @@ -1291,250 +998,129 @@ vAPI.domCollapser = (function() { /******************************************************************************/ vAPI.domSurveyor = (function() { - var domFilterer = null, - messaging = vAPI.messaging, - surveyPhase3Nodes = [], - cosmeticSurveyingMissCount = 0, - highGenerics = null, - lowGenericSelectors = [], - queriedSelectors = new Set(), + var messaging = vAPI.messaging, + domFilterer, + hostname = '', + queriedIds = new Set(), + queriedClasses = new Set(), + pendingIdNodes = { nodes: [], added: [] }, + pendingClassNodes = { nodes: [], added: [] }, surveyCost = 0; + // This is to shutdown the surveyor if result of surveying keeps being + // fruitless. This is useful on long-lived web page. I arbitrarily + // picked 5 minutes before the surveyor is allowed to shutdown. I also + // arbitrarily picked 256 misses before the surveyor is allowed to + // shutdown. + var canShutdownAfter = Date.now() + 300000, + surveyingMissCount = 0; + // Handle main process' response. var surveyPhase3 = function(response) { var result = response && response.result, - firstSurvey = highGenerics === null; + mustCommit = false; if ( result ) { - if ( result.hide.length ) { - processLowGenerics(result.hide); - } - if ( result.highGenerics ) { - highGenerics = result.highGenerics; - } - } - - if ( highGenerics ) { - var t0 = window.performance.now(); - if ( highGenerics.hideLowCount ) { - processHighLowGenerics(highGenerics.hideLow); + var selectors = result.simple; + if ( Array.isArray(selectors) && selectors.length !== 0 ) { + domFilterer.addCSSRule( + selectors, + 'display:none!important;', + { type: 'simple' } + ); + mustCommit = true; } - if ( highGenerics.hideMediumCount ) { - processHighMediumGenerics(highGenerics.hideMedium); + selectors = result.complex; + if ( Array.isArray(selectors) && selectors.length !== 0 ) { + domFilterer.addCSSRule( + selectors, + 'display:none!important;', + { type: 'complex' } + ); + mustCommit = true; } - if ( highGenerics.hideHighSimpleCount || highGenerics.hideHighComplexCount ) { - processHighHighGenerics(); + selectors = result.injected; + if ( typeof selectors === 'string' && selectors.length !== 0 ) { + domFilterer.addCSSRule( + selectors, + 'display:none!important;', + { injected: true } + ); + mustCommit = true; } - surveyCost += window.performance.now() - t0; } - // Need to do this before committing DOM filterer, as needed info - // will no longer be there after commit. - if ( firstSurvey || domFilterer.newHideSelectorBuffer.length ) { - messaging.send( - 'contentscript', - { - what: 'cosmeticFiltersInjected', - type: 'cosmetic', - hostname: window.location.hostname, - selectors: domFilterer.newHideSelectorBuffer, - first: firstSurvey, - cost: surveyCost - } - ); + if ( hasChunk(pendingIdNodes) || hasChunk(pendingClassNodes) ) { + surveyTimer.start(1); } - // Shutdown surveyor if too many consecutive empty resultsets. - if ( domFilterer.newHideSelectorBuffer.length === 0 ) { - cosmeticSurveyingMissCount += 1; - } else { - cosmeticSurveyingMissCount = 0; + if ( mustCommit ) { + surveyingMissCount = 0; + canShutdownAfter = Date.now() + 300000; + return; } - domFilterer.commit(surveyPhase3Nodes); - surveyPhase3Nodes = []; - }; - - // Query main process. - - var surveyPhase2 = function(addedNodes) { - surveyPhase3Nodes = surveyPhase3Nodes.concat(addedNodes); - if ( lowGenericSelectors.length !== 0 || highGenerics === null ) { - messaging.send( - 'contentscript', - { - what: 'retrieveGenericCosmeticSelectors', - pageURL: window.location.href, - selectors: lowGenericSelectors, - firstSurvey: highGenerics === null - }, - surveyPhase3 - ); - lowGenericSelectors = []; - } else { - surveyPhase3(null); + surveyingMissCount += 1; + if ( surveyingMissCount < 256 || Date.now() < canShutdownAfter ) { + return; } - }; - - // Low generics: - // - [id] - // - [class] - - var processLowGenerics = function(generics) { - domFilterer.addSelectors(generics); - }; - // High-low generics: - // - [alt="..."] - // - [title="..."] + //console.info('dom surveyor shutting down: too many misses'); - var processHighLowGenerics = function(generics) { - var attrs = ['title', 'alt']; - var attr, attrValue, nodeList, iNode, node; - var selector; - while ( (attr = attrs.pop()) ) { - nodeList = selectNodes('[' + attr + ']', surveyPhase3Nodes); - iNode = nodeList.length; - while ( iNode-- ) { - node = nodeList[iNode]; - attrValue = node.getAttribute(attr); - if ( !attrValue ) { continue; } - // Candidate 1 = generic form - // If generic form is injected, no need to process the - // specific form, as the generic will affect all related - // specific forms. - selector = '[' + attr + '="' + attrValue + '"]'; - if ( generics.hasOwnProperty(selector) ) { - domFilterer.addSelector(selector); - continue; - } - // Candidate 2 = specific form - selector = node.localName + selector; - if ( generics.hasOwnProperty(selector) ) { - domFilterer.addSelector(selector); - } - } - } + surveyTimer.clear(); + vAPI.domWatcher.removeListener(domWatcherInterface); + vAPI.domSurveyor = null; }; - // High-medium generics: - // - [href^="http"] + var surveyTimer = new vAPI.SafeAnimationFrame(function() { + surveyPhase1(); + }); - var processHighMediumGenerics = function(generics) { - var stagedNodes = surveyPhase3Nodes, - i = stagedNodes.length; - if ( i === 1 && stagedNodes[0] === document.documentElement ) { - processHighMediumGenericsForNodes(document.links, generics); - return; - } - var aa = [ null ], - node, nodes; - while ( i-- ) { - node = stagedNodes[i]; - if ( node.localName === 'a' ) { - aa[0] = node; - processHighMediumGenericsForNodes(aa, generics); - } - nodes = node.getElementsByTagName('a'); - if ( nodes.length !== 0 ) { - processHighMediumGenericsForNodes(nodes, generics); - } - } - }; + // The purpose of "chunkification" is to ensure the surveyor won't unduly + // block the main event loop. - var processHighMediumGenericsForNodes = function(nodes, generics) { - var i = nodes.length, - node, href, pos, entry, j, selector; - while ( i-- ) { - node = nodes[i]; - href = node.getAttribute('href'); - if ( !href ) { continue; } - pos = href.indexOf('://'); - if ( pos === -1 ) { continue; } - entry = generics[href.slice(pos + 3, pos + 11)]; - if ( entry === undefined ) { continue; } - if ( typeof entry === 'string' ) { - if ( href.lastIndexOf(entry.slice(8, -2), 0) === 0 ) { - domFilterer.addSelector(entry); - } - continue; - } - j = entry.length; - while ( j-- ) { - selector = entry[j]; - if ( href.lastIndexOf(selector.slice(8, -2), 0) === 0 ) { - domFilterer.addSelector(selector); - } - } - } + var hasChunk = function(pending) { + return pending.nodes.length !== 0 || + pending.added.length !== 0; }; - var highHighSimpleGenericsCost = 0, - highHighSimpleGenericsInjected = false, - highHighComplexGenericsCost = 0, - highHighComplexGenericsInjected = false; - - var processHighHighGenerics = function() { - var tstart; - // Simple selectors. - if ( - highHighSimpleGenericsInjected === false && - highHighSimpleGenericsCost < 50 && - highGenerics.hideHighSimpleCount !== 0 - ) { - tstart = window.performance.now(); - var matchesProp = vAPI.matchesProp, - nodes = surveyPhase3Nodes, - i = nodes.length, node; - while ( i-- ) { - node = nodes[i]; - if ( - node[matchesProp](highGenerics.hideHighSimple) || - node.querySelector(highGenerics.hideHighSimple) !== null - ) { - highHighSimpleGenericsInjected = true; - domFilterer.addSelectors(highGenerics.hideHighSimple.split(',\n')); - break; - } - } - highHighSimpleGenericsCost += window.performance.now() - tstart; - } - // Complex selectors. + var addChunk = function(pending, added) { + if ( added.length === 0 ) { return; } if ( - highHighComplexGenericsInjected === false && - highHighComplexGenericsCost < 50 && - highGenerics.hideHighComplexCount !== 0 + Array.isArray(added) === false || + pending.added.length === 0 || + Array.isArray(pending.added[0]) === false || + pending.added[0].length >= 1000 ) { - tstart = window.performance.now(); - if ( document.querySelector(highGenerics.hideHighComplex) !== null ) { - highHighComplexGenericsInjected = true; - domFilterer.addSelectors(highGenerics.hideHighComplex.split(',\n')); - } - highHighComplexGenericsCost += window.performance.now() - tstart; + pending.added.push(added); + } else { + pending.added = pending.added.concat(added); } }; - // Extract and return the staged nodes which (may) match the selectors. - - var selectNodes = function(selector, nodes) { - var stagedNodes = nodes, - i = stagedNodes.length; - if ( i === 1 && stagedNodes[0] === document.documentElement ) { - return document.querySelectorAll(selector); - } - var targetNodes = [], - node, nodeList, j; - while ( i-- ) { - node = stagedNodes[i]; - targetNodes.push(node); - nodeList = node.querySelectorAll(selector); - j = nodeList.length; - while ( j-- ) { - targetNodes.push(nodeList[j]); - } + var nextChunk = function(pending) { + var added = pending.added.length !== 0 ? pending.added.shift() : [], + nodes; + if ( pending.nodes.length === 0 ) { + if ( added.length <= 1000 ) { return added; } + nodes = Array.isArray(added) + ? added + : Array.prototype.slice.call(added); + pending.nodes = nodes.splice(1000); + return nodes; + } + if ( Array.isArray(added) === false ) { + added = Array.prototype.slice.call(added); + } + if ( pending.nodes.length < 1000 ) { + nodes = pending.nodes.concat(added.splice(0, 1000 - pending.nodes.length)); + pending.nodes = added; + } else { + nodes = pending.nodes.splice(0, 1000); + pending.nodes = pending.nodes.concat(added); } - return targetNodes; + return nodes; }; // Extract all classes/ids: these will be passed to the cosmetic @@ -1545,70 +1131,130 @@ vAPI.domSurveyor = (function() { // http://www.w3.org/TR/2014/REC-html5-20141028/infrastructure.html#space-separated-tokens // http://jsperf.com/enumerate-classes/6 - var surveyPhase1 = function(addedNodes) { - var t0 = window.performance.now(), - rews = reWhitespace, - qq = queriedSelectors, - ll = lowGenericSelectors, - lli = ll.length, - nodes, i, node, v, vv, j; - nodes = selectNodes('[id]', addedNodes); + var surveyPhase1 = function() { + //console.time('dom surveyor/surveying'); + surveyTimer.clear(); + var t0 = window.performance.now(); + var rews = reWhitespace, + qq, iout, nodes, i, node, v, vv, j; + var ids = []; + iout = 0; + qq = queriedIds; + nodes = nextChunk(pendingIdNodes); i = nodes.length; while ( i-- ) { node = nodes[i]; v = node.id; if ( typeof v !== 'string' ) { continue; } - v = '#' + v.trim(); - if ( !qq.has(v) && v.length !== 1 ) { - ll[lli] = v; lli++; qq.add(v); + v = v.trim(); + if ( qq.has(v) === false && v.length !== 0 ) { + ids[iout++] = v; qq.add(v); } } - nodes = selectNodes('[class]', addedNodes); + var classes = []; + iout = 0; + qq = queriedClasses; + nodes = nextChunk(pendingClassNodes); i = nodes.length; while ( i-- ) { node = nodes[i]; vv = node.className; if ( typeof vv !== 'string' ) { continue; } - if ( !rews.test(vv) ) { - v = '.' + vv; - if ( !qq.has(v) && v.length !== 1 ) { - ll[lli] = v; lli++; qq.add(v); + if ( rews.test(vv) === false ) { + if ( qq.has(vv) === false && vv.length !== 0 ) { + classes[iout++] = vv; qq.add(vv); } } else { vv = node.classList; j = vv.length; while ( j-- ) { - v = '.' + vv[j]; - if ( !qq.has(v) ) { - ll[lli] = v; lli++; qq.add(v); + v = vv[j]; + if ( qq.has(v) === false ) { + classes[iout++] = v; qq.add(v); } } } } surveyCost += window.performance.now() - t0; - surveyPhase2(addedNodes); + // Phase 2: Ask main process to lookup relevant cosmetic filters. + if ( ids.length !== 0 || classes.length !== 0 ) { + messaging.send( + 'contentscript', + { + what: 'retrieveGenericCosmeticSelectors', + hostname: hostname, + ids: ids.join('\n'), + classes: classes.join('\n'), + exceptions: domFilterer.exceptions, + cost: surveyCost + }, + surveyPhase3 + ); + } else { + surveyPhase3(null); + } + //console.timeEnd('dom surveyor/surveying'); }; var reWhitespace = /\s/; - var domChangedHandler = function(addedNodes) { - if ( cosmeticSurveyingMissCount > 255 ) { - vAPI.domWatcher.removeListener(domChangedHandler); - vAPI.domSurveyor = null; - domFilterer.domChangedHandler(addedNodes); - domFilterer.start(); - return; + var domWatcherInterface = { + onDOMCreated: function() { + if ( + vAPI instanceof Object === false || + vAPI.domSurveyor instanceof Object === false || + vAPI.domFilterer instanceof Object === false + ) { + if ( vAPI instanceof Object ) { + if ( vAPI.domWatcher instanceof Object ) { + vAPI.domWatcher.removeListener(domWatcherInterface); + } + vAPI.domSurveyor = null; + } + return; + } + //console.time('dom surveyor/dom layout created'); + domFilterer = vAPI.domFilterer; + addChunk(pendingIdNodes, document.querySelectorAll('[id]')); + addChunk(pendingClassNodes, document.querySelectorAll('[class]')); + surveyTimer.start(); + //console.timeEnd('dom surveyor/dom layout created'); + }, + onDOMChanged: function(addedNodes) { + if ( addedNodes.length === 0 ) { return; } + //console.time('dom surveyor/dom layout changed'); + var idNodes = [], iid = 0, + classNodes = [], iclass = 0; + var i = addedNodes.length, + node, nodeList, j; + while ( i-- ) { + node = addedNodes[i]; + idNodes[iid++] = node; + classNodes[iclass++] = node; + if ( node.childElementCount === 0 ) { continue; } + nodeList = node.querySelectorAll('[id]'); + j = nodeList.length; + while ( j-- ) { + idNodes[iid++] = nodeList[j]; + } + nodeList = node.querySelectorAll('[class]'); + j = nodeList.length; + while ( j-- ) { + classNodes[iclass++] = nodeList[j]; + } + } + if ( idNodes.length !== 0 || classNodes.lengh !== 0 ) { + addChunk(pendingIdNodes, idNodes); + addChunk(pendingClassNodes, classNodes); + surveyTimer.start(1); + } + //console.timeEnd('dom surveyor/dom layout changed'); } - - surveyPhase1(addedNodes); }; - var start = function() { - domFilterer = vAPI.domFilterer; - domChangedHandler([ document.documentElement ]); - vAPI.domWatcher.addListener(domChangedHandler); - vAPI.shutdown.add(function() { - vAPI.domWatcher.removeListener(domChangedHandler); - }); + var start = function(details) { + if ( vAPI.domWatcher instanceof Object === false ) { return; } + hostname = details.hostname; + vAPI.domWatcher.addListener(domWatcherInterface); }; return { @@ -1620,73 +1266,169 @@ vAPI.domSurveyor = (function() { /******************************************************************************/ /******************************************************************************/ -vAPI.domIsLoaded = function(ev) { - // This can happen on Firefox. For instance: - // https://github.com/gorhill/uBlock/issues/1893 - if ( window.location === null ) { - return; - } +// Bootstrapping allows all components of the content script to be launched +// if/when needed. - var slowLoad = ev instanceof Event; - if ( slowLoad ) { - document.removeEventListener('DOMContentLoaded', vAPI.domIsLoaded); - } - vAPI.domIsLoaded = null; - - vAPI.domWatcher.start(); - vAPI.domCollapser.start(); - - if ( vAPI.domFilterer ) { - // To avoid neddless CPU overhead, we commit existing cosmetic filters - // only if the page loaded "slowly", i.e. if the code here had to wait - // for a DOMContentLoaded event -- in which case the DOM may have - // changed a lot since last time the domFilterer acted on it. - if ( slowLoad ) { - vAPI.domFilterer.commit('all'); +(function bootstrap() { + + var bootstrapPhase2 = function(ev) { + // This can happen on Firefox. For instance: + // https://github.com/gorhill/uBlock/issues/1893 + if ( window.location === null ) { return; } + + if ( ev ) { + document.removeEventListener('DOMContentLoaded', bootstrapPhase2); } - if ( vAPI.domSurveyor ) { - vAPI.domSurveyor.start(); - } else { - vAPI.domFilterer.start(); + + if ( vAPI instanceof Object === false ) { + return; } - } - // To send mouse coordinates to main process, as the chrome API fails - // to provide the mouse position to context menu listeners. - // https://github.com/chrisaljoudi/uBlock/issues/1143 - // Also, find a link under the mouse, to try to avoid confusing new tabs - // as nuisance popups. - // Ref.: https://developer.mozilla.org/en-US/docs/Web/Events/contextmenu - - var onMouseClick = function(ev) { - var elem = ev.target; - while ( elem !== null && elem.localName !== 'a' ) { - elem = elem.parentElement; + if ( vAPI.domWatcher instanceof Object ) { + vAPI.domWatcher.start(); } - vAPI.messaging.send( - 'contentscript', - { - what: 'mouseClick', - x: ev.clientX, - y: ev.clientY, - url: elem !== null ? elem.href : '' - } - ); - }; - (function() { - if ( window !== window.top || !vAPI.domFilterer ) { + // Element picker works only in top window for now. + if ( + window !== window.top || + vAPI.domFilterer instanceof Object === false + ) { return; } + + // To send mouse coordinates to main process, as the chrome API fails + // to provide the mouse position to context menu listeners. + // https://github.com/chrisaljoudi/uBlock/issues/1143 + // Also, find a link under the mouse, to try to avoid confusing new tabs + // as nuisance popups. + // Ref.: https://developer.mozilla.org/en-US/docs/Web/Events/contextmenu + + var onMouseClick = function(ev) { + var elem = ev.target; + while ( elem !== null && elem.localName !== 'a' ) { + elem = elem.parentElement; + } + vAPI.messaging.send( + 'contentscript', + { + what: 'mouseClick', + x: ev.clientX, + y: ev.clientY, + url: elem !== null && ev.isTrusted !== false ? elem.href : '' + } + ); + }; + document.addEventListener('mousedown', onMouseClick, true); // https://github.com/gorhill/uMatrix/issues/144 vAPI.shutdown.add(function() { document.removeEventListener('mousedown', onMouseClick, true); }); - })(); -}; + }; + + var bootstrapPhase1 = function(response) { + // cosmetic filtering engine aka 'cfe' + var cfeDetails = response && response.specificCosmeticFilters; + if ( !cfeDetails || !cfeDetails.ready ) { + vAPI.domWatcher = vAPI.domCollapser = vAPI.domFilterer = + vAPI.domSurveyor = vAPI.domIsLoaded = null; + return; + } + + if ( response.noCosmeticFiltering ) { + vAPI.domFilterer = null; + vAPI.domSurveyor = null; + } else { + var domFilterer = vAPI.domFilterer; + if ( response.noGenericCosmeticFiltering || cfeDetails.noDOMSurveying ) { + vAPI.domSurveyor = null; + } + domFilterer.exceptions = cfeDetails.exceptionFilters; + domFilterer.hideNodeAttr = cfeDetails.hideNodeAttr; + domFilterer.hideNodeStyleSheetInjected = + cfeDetails.hideNodeStyleSheetInjected === true; + domFilterer.addCSSRule( + cfeDetails.declarativeFilters, + 'display:none!important;' + ); + domFilterer.addCSSRule( + cfeDetails.highGenericHideSimple, + 'display:none!important;', + { type: 'simple', lazy: true } + ); + domFilterer.addCSSRule( + cfeDetails.highGenericHideComplex, + 'display:none!important;', + { type: 'complex', lazy: true } + ); + domFilterer.addCSSRule( + cfeDetails.injectedHideFilters, + 'display:none!important;', + { injected: true } + ); + domFilterer.addProceduralSelectors(cfeDetails.proceduralFilters); + } + + if ( cfeDetails.networkFilters.length !== 0 ) { + vAPI.userStylesheet.add( + cfeDetails.networkFilters + '\n{display:none!important;}'); + } + + vAPI.userStylesheet.apply(); + + // Library of resources is located at: + // https://github.com/gorhill/uBlock/blob/master/assets/ublock/resources.txt + if ( cfeDetails.scripts ) { + // Have the injected script tag remove itself when execution completes: + // to keep DOM as clean as possible. + var text = cfeDetails.scripts + + "\n" + + "(function() {\n" + + " var c = document.currentScript,\n" + + " p = c && c.parentNode;\n" + + " if ( p ) {\n" + + " p.removeChild(c);\n" + + " }\n" + + "})();"; + vAPI.injectScriptlet(document, text); + vAPI.injectedScripts = text; + } + + if ( vAPI.domSurveyor instanceof Object ) { + vAPI.domSurveyor.start(cfeDetails); + } + + // https://github.com/chrisaljoudi/uBlock/issues/587 + // If no filters were found, maybe the script was injected before + // uBlock's process was fully initialized. When this happens, pages + // won't be cleaned right after browser launch. + if ( + typeof document.readyState === 'string' && + document.readyState !== 'loading' + ) { + bootstrapPhase2(); + } else { + document.addEventListener('DOMContentLoaded', bootstrapPhase2); + } + }; + + // This starts bootstrap process. + var url = window.location.href; + vAPI.messaging.send( + 'contentscript', + { + what: 'retrieveContentScriptParameters', + pageURL: url, + locationURL: url, + isRootFrame: window === window.top + }, + bootstrapPhase1 + ); +})(); /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ + +} // <<<<<<<< end of HUGE-IF-BLOCK diff --git a/src/js/contextmenu.js b/src/js/contextmenu.js index 9cd2163b03002..166303859feab 100644 --- a/src/js/contextmenu.js +++ b/src/js/contextmenu.js @@ -27,6 +27,12 @@ /******************************************************************************/ +if ( vAPI.contextMenu === undefined ) { + return { + update: function() {} + }; +} + var µb = µBlock; /******************************************************************************/ @@ -63,14 +69,10 @@ var onBlockElement = function(details, tab) { /******************************************************************************/ var onTemporarilyAllowLargeMediaElements = function(details, tab) { - if ( tab === undefined ) { - return; - } + if ( tab === undefined ) { return; } var pageStore = µb.pageStoreFromTabId(tab.id); - if ( pageStore === null ) { - return; - } - pageStore.temporarilyAllowLargeMediaElements(); + if ( pageStore === null ) { return; } + pageStore.temporarilyAllowLargeMediaElements(true); }; /******************************************************************************/ diff --git a/src/js/cosmetic-filtering.js b/src/js/cosmetic-filtering.js index 1f918cd0d02bd..9baf3a5ee052d 100644 --- a/src/js/cosmetic-filtering.js +++ b/src/js/cosmetic-filtering.js @@ -51,6 +51,14 @@ var isValidCSSSelector = (function() { } else { matchesFn = div.querySelector.bind(div); } + // https://github.com/gorhill/uBlock/issues/3111 + // Workaround until https://bugzilla.mozilla.org/show_bug.cgi?id=1406817 + // is fixed. + try { + matchesFn(':scope'); + } catch (ex) { + matchesFn = div.querySelector.bind(div); + } return function(s) { try { matchesFn(s + ', ' + s + ':not(#foo)'); @@ -153,7 +161,7 @@ FilterHostname.prototype.fid = 8; FilterHostname.prototype.retrieve = function(hostname, out) { if ( hostname.endsWith(this.hostname) ) { - out.push(this.s); + out.add(this.s); } }; @@ -220,7 +228,7 @@ var FilterParser = function() { this.hostnames = []; this.invalid = false; this.cosmetic = true; - this.reNeedHostname = /^(?:script:contains|script:inject|.+?:has|.+?:has-text|.+?:if|.+?:if-not|.+?:matches-css(?:-before|-after)?|.*?:xpath)\(.+\)$/; + this.reNeedHostname = /^(?:script:contains|script:inject|.+?:-abp-contains|.+?:-abp-has|.+?:contains|.+?:has|.+?:has-text|.+?:if|.+?:if-not|.+?:matches-css(?:-before|-after)?|.*?:xpath)\(.+\)$/; }; /******************************************************************************/ @@ -257,8 +265,8 @@ FilterParser.prototype.parse = function(raw) { // Coarse-check that the anchor is valid. // `##`: l = 1 - // `#@#`, `#$#`, `#%#`: l = 2 - // `#@$#`, `#@%#`: l = 3 + // `#@#`, `#$#`, `#%#`, `#?#`: l = 2 + // `#@$#`, `#@%#`, `#@?#`: l = 3 if ( (rpos - lpos) > 3 ) { this.cosmetic = false; return this; @@ -276,23 +284,28 @@ FilterParser.prototype.parse = function(raw) { // supported. var cCode = raw.charCodeAt(rpos - 1); if ( cCode !== 0x23 /* '#' */ && cCode !== 0x40 /* '@' */ ) { - // We have an Adguard cosmetic filter if and only if the character is - // `$` or `%`, otherwise it's not a cosmetic filter. - // Not a cosmetic filter. - if ( cCode !== 0x24 /* '$' */ && cCode !== 0x25 /* '%' */ ) { + // We have an Adguard/ABP cosmetic filter if and only if the character + // is `$`, `%` or `?`, otherwise it's not a cosmetic filter. + if ( + cCode !== 0x24 /* '$' */ && + cCode !== 0x25 /* '%' */ && + cCode !== 0x3F /* '?' */ + ) { this.cosmetic = false; return this; } - // Not supported. - if ( cCode !== 0x24 /* '$' */ ) { + // Adguard's scriptlet injection: not supported. + if ( cCode === 0x25 /* '%' */ ) { this.invalid = true; return this; } - // CSS injection rule: supported, but translate into uBO's own format. - raw = this.translateAdguardCSSInjectionFilter(raw); - if ( raw === '' ) { - this.invalid = true; - return this; + // Adguard's style injection: supported, but translate to uBO's format. + if ( cCode === 0x24 /* '$' */ ) { + raw = this.translateAdguardCSSInjectionFilter(raw); + if ( raw === '' ) { + this.invalid = true; + return this; + } } rpos = raw.indexOf('#', lpos + 1); } @@ -332,6 +345,9 @@ FilterParser.prototype.parse = function(raw) { // For some selectors, it is mandatory to have a hostname or entity: // ##script:contains(...) // ##script:inject(...) + // ##.foo:-abp-contains(...) + // ##.foo:-abp-has(...) + // ##.foo:contains(...) // ##.foo:has(...) // ##.foo:has-text(...) // ##.foo:if(...) @@ -398,10 +414,9 @@ var netSelectorCacheHighWaterMark = 30; /******************************************************************************/ SelectorCacheEntry.prototype.reset = function() { - this.cosmetic = {}; + this.cosmetic = new Set(); this.cosmeticSurveyingMissCount = 0; - this.net = {}; - this.netCount = 0; + this.net = new Map(); this.lastAccessTime = Date.now(); return this; }; @@ -429,9 +444,8 @@ SelectorCacheEntry.prototype.addCosmetic = function(details) { return; } this.cosmeticSurveyingMissCount = 0; - var dict = this.cosmetic; while ( i-- ) { - dict[selectors[i]] = true; + this.cosmetic.add(selectors[i]); } }; @@ -446,41 +460,29 @@ SelectorCacheEntry.prototype.addNet = function(selectors) { // Net request-derived selectors: I limit the number of cached selectors, // as I expect cases where the blocked net-requests are never the // exact same URL. - if ( this.netCount < netSelectorCacheHighWaterMark ) { - return; - } + if ( this.net.size < netSelectorCacheHighWaterMark ) { return; } var dict = this.net; - var keys = Object.keys(dict).sort(function(a, b) { - return dict[b] - dict[a]; + var keys = µb.arrayFrom(dict.keys()).sort(function(a, b) { + return dict.get(b) - dict.get(a); }).slice(netSelectorCacheLowWaterMark); var i = keys.length; while ( i-- ) { - delete dict[keys[i]]; + dict.delete(keys[i]); } }; /******************************************************************************/ SelectorCacheEntry.prototype.addNetOne = function(selector, now) { - var dict = this.net; - if ( dict[selector] === undefined ) { - this.netCount += 1; - } - dict[selector] = now; + this.net.set(selector, now); }; /******************************************************************************/ SelectorCacheEntry.prototype.addNetMany = function(selectors, now) { - var dict = this.net; var i = selectors.length || 0; - var selector; while ( i-- ) { - selector = selectors[i]; - if ( dict[selector] === undefined ) { - this.netCount += 1; - } - dict[selector] = now; + this.net.set(selectors[i], now); } }; @@ -501,24 +503,35 @@ SelectorCacheEntry.prototype.add = function(details) { SelectorCacheEntry.prototype.remove = function(type) { this.lastAccessTime = Date.now(); if ( type === undefined || type === 'cosmetic' ) { - this.cosmetic = {}; + this.cosmetic.clear(); this.cosmeticSurveyingMissCount = 0; } if ( type === undefined || type === 'net' ) { - this.net = {}; - this.netCount = 0; + this.net.clear(); } }; /******************************************************************************/ +SelectorCacheEntry.prototype.retrieveToArray = function(iterator, out) { + for ( var selector of iterator ) { + out.push(selector); + } +}; + +SelectorCacheEntry.prototype.retrieveToSet = function(iterator, out) { + for ( var selector of iterator ) { + out.add(selector); + } +}; + SelectorCacheEntry.prototype.retrieve = function(type, out) { this.lastAccessTime = Date.now(); - var dict = type === 'cosmetic' ? this.cosmetic : this.net; - for ( var selector in dict ) { - if ( dict.hasOwnProperty(selector) ) { - out.push(selector); - } + var iterator = type === 'cosmetic' ? this.cosmetic : this.net.keys(); + if ( Array.isArray(out) ) { + this.retrieveToArray(iterator, out); + } else { + this.retrieveToSet(iterator, out); } }; @@ -595,20 +608,72 @@ var makeHash = function(token) { var FilterContainer = function() { this.noDomainHash = '-'; this.parser = new FilterParser(); - this.selectorCachePruneDelay = 10 * 60 * 1000; // 15 minutes - this.selectorCacheAgeMax = 120 * 60 * 1000; // 120 minutes - this.selectorCacheCountMin = 25; - this.netSelectorCacheCountMax = netSelectorCacheHighWaterMark; - this.selectorCacheTimer = null; this.reHasUnicode = /[^\x00-\x7F]/; this.rePlainSelector = /^[#.][\w\\-]+/; this.rePlainSelectorEscaped = /^[#.](?:\\[0-9A-Fa-f]+ |\\.|\w|-)+/; - this.rePlainSelectorEx = /^[^#.\[(]+([#.][\w-]+)/; + this.rePlainSelectorEx = /^[^#.\[(]+([#.][\w-]+)|([#.][\w-]+)$/; this.reEscapeSequence = /\\([0-9A-Fa-f]+ |.)/g; - this.reHighLow = /^[a-z]*\[(?:alt|title)="[^"]+"\]$/; + this.reSimpleHighGeneric1 = /^[a-z]*\[[^[]+]$/; this.reHighMedium = /^\[href\^="https?:\/\/([^"]{8})[^"]*"\]$/; this.reScriptSelector = /^script:(contains|inject)\((.+)\)$/; this.punycode = punycode; + + this.selectorCache = new Map(); + this.selectorCachePruneDelay = 10 * 60 * 1000; // 10 minutes + this.selectorCacheAgeMax = 120 * 60 * 1000; // 120 minutes + this.selectorCacheCountMin = 25; + this.netSelectorCacheCountMax = netSelectorCacheHighWaterMark; + this.selectorCacheTimer = null; + + this.supportsUserStylesheets = vAPI.supportsUserStylesheets; + + // generic exception filters + this.genericDonthideSet = new Set(); + + // hostname, entity-based filters + this.specificFilters = new Map(); + this.proceduralFilters = new Map(); + + // low generic cosmetic filters, organized by id/class then simple/complex. + this.lowlyGeneric = Object.create(null); + this.lowlyGeneric.id = { + canonical: 'ids', + prefix: '#', + simple: new Set(), + complex: new Map() + }; + this.lowlyGeneric.cl = { + canonical: 'classes', + prefix: '.', + simple: new Set(), + complex: new Map() + }; + + // highly generic selectors sets + this.highlyGeneric = Object.create(null); + this.highlyGeneric.simple = { + canonical: 'highGenericHideSimple', + dict: new Set(), + str: '', + mru: new µb.MRUCache(16) + }; + this.highlyGeneric.complex = { + canonical: 'highGenericHideComplex', + dict: new Set(), + str: '', + mru: new µb.MRUCache(16) + }; + + this.userScripts = new Map(); + + // Short-lived: content is valid only during one function call. These + // is to prevent repeated allocation/deallocation overheads -- the + // constructors/destructors of javascript Set/Map is assumed to be costlier + // than just calling clear() on these. + this.setRegister0 = new Set(); + this.setRegister1 = new Set(); + this.setRegister2 = new Set(); + this.reset(); }; @@ -624,8 +689,7 @@ FilterContainer.prototype.reset = function() { this.discardedCount = 0; this.duplicateBuster = new Set(); - this.selectorCache = {}; - this.selectorCacheCount = 0; + this.selectorCache.clear(); if ( this.selectorCacheTimer !== null ) { clearTimeout(this.selectorCacheTimer); this.selectorCacheTimer = null; @@ -634,37 +698,30 @@ FilterContainer.prototype.reset = function() { // generic filters this.hasGenericHide = false; - // [class], [id] - this.lowGenericHide = new Set(); - this.lowGenericHideEx = new Map(); - this.lowGenericHideCount = 0; - - // [alt="..."], [title="..."] - this.highLowGenericHide = {}; - this.highLowGenericHideCount = 0; - - // a[href^="http..."] - this.highMediumGenericHide = {}; - this.highMediumGenericHideCount = 0; - - // high-high-simple selectors - this.highHighSimpleGenericHideArray = []; - this.highHighSimpleGenericHide = ''; - this.highHighSimpleGenericHideCount = 0; - - // high-high-complex selectors - this.highHighComplexGenericHideArray = []; - this.highHighComplexGenericHide = ''; - this.highHighComplexGenericHideCount = 0; - // generic exception filters - this.genericDonthide = []; + this.genericDonthideSet.clear(); // hostname, entity-based filters - this.specificFilters = new Map(); + this.specificFilters.clear(); + this.proceduralFilters.clear(); + + // low generic cosmetic filters, organized by id/class then simple/complex. + this.lowlyGeneric.id.simple.clear(); + this.lowlyGeneric.id.complex.clear(); + this.lowlyGeneric.cl.simple.clear(); + this.lowlyGeneric.cl.complex.clear(); + + // highly generic selectors sets + this.highlyGeneric.simple.dict.clear(); + this.highlyGeneric.simple.str = ''; + this.highlyGeneric.simple.mru.reset(); + this.highlyGeneric.complex.dict.clear(); + this.highlyGeneric.complex.str = ''; + this.highlyGeneric.complex.mru.reset(); + this.scriptTagFilters = {}; this.scriptTagFilterCount = 0; - this.userScripts = new Map(); + this.userScripts.clear(); this.userScriptCount = 0; }; @@ -673,23 +730,31 @@ FilterContainer.prototype.reset = function() { FilterContainer.prototype.freeze = function() { this.duplicateBuster = new Set(); - if ( this.highHighSimpleGenericHide !== '' ) { - this.highHighSimpleGenericHideArray.unshift(this.highHighSimpleGenericHide); - } - this.highHighSimpleGenericHide = this.highHighSimpleGenericHideArray.join(',\n'); - this.highHighSimpleGenericHideArray = []; - - if ( this.highHighComplexGenericHide !== '' ) { - this.highHighComplexGenericHideArray.unshift(this.highHighComplexGenericHide); + this.hasGenericHide = + this.lowlyGeneric.id.simple.size !== 0 || + this.lowlyGeneric.id.complex.size !== 0 || + this.lowlyGeneric.cl.simple.size !== 0 || + this.lowlyGeneric.cl.complex.size !== 0 || + this.highlyGeneric.simple.dict.size !== 0 || + this.highlyGeneric.complex.dict.size !== 0; + + if ( this.genericDonthideSet.size !== 0 ) { + for ( var selector of this.genericDonthideSet ) { + var type = selector.charCodeAt(0); + if ( type === 0x23 /* '#' */ ) { + this.lowlyGeneric.id.simple.delete(selector.slice(1)); + } else if ( type === 0x2E /* '.' */ ) { + this.lowlyGeneric.cl.simple.delete(selector.slice(1)); + } + // TODO: + // this.lowlyGeneric.id.complex.delete(selector); + // this.lowlyGeneric.cl.complex.delete(selector); + this.highlyGeneric.simple.dict.delete(selector); + this.highlyGeneric.complex.dict.delete(selector); + } } - this.highHighComplexGenericHide = this.highHighComplexGenericHideArray.join(',\n'); - this.highHighComplexGenericHideArray = []; - - this.hasGenericHide = this.lowGenericHideCount !== 0 || - this.highLowGenericHideCount !== 0 || - this.highMediumGenericHideCount !== 0 || - this.highHighSimpleGenericHideCount !== 0 || - this.highHighComplexGenericHideCount !== 0; + this.highlyGeneric.simple.str = µb.arrayFrom(this.highlyGeneric.simple.dict).join(',\n'); + this.highlyGeneric.complex.str = µb.arrayFrom(this.highlyGeneric.complex.dict).join(',\n'); this.parser.reset(); this.compileSelector.reset(); @@ -715,9 +780,17 @@ FilterContainer.prototype.compileSelector = (function() { reStyleBad = /url\([^)]+\)/, reScriptSelector = /^script:(contains|inject)\((.+)\)$/, reExtendedSyntax = /\[-(?:abp|ext)-[a-z-]+=(['"])(?:.+?)(?:\1)\]/, - reExtendedSyntaxHas = /\[-ext-has=(['"])(.+?)\1\]/, + reExtendedSyntaxParser = /\[-(?:abp|ext)-([a-z-]+)=(['"])(.+?)\2\]/, div = document.createElement('div'); + var normalizedExtendedSyntaxOperators = new Map([ + [ 'contains', ':has-text' ], + [ 'has', ':if' ], + [ 'matches-css', ':matches-css' ], + [ 'matches-css-after', ':matches-css-after' ], + [ 'matches-css-before', ':matches-css-before' ], + ]); + var isValidStyleProperty = function(cssText) { if ( reStyleBad.test(cssText) ) { return false; } div.style.cssText = cssText; @@ -727,32 +800,32 @@ FilterContainer.prototype.compileSelector = (function() { }; var entryPoint = function(raw) { - if ( isValidCSSSelector(raw) && reExtendedSyntax.test(raw) === false ) { + var extendedSyntax = reExtendedSyntax.test(raw); + if ( isValidCSSSelector(raw) && extendedSyntax === false ) { return raw; } // We rarely reach this point -- majority of selectors are plain // CSS selectors. - // Unsupported ABP's advanced selector syntax. - if ( raw.indexOf('[-abp-properties=') !== -1 ) { - return; - } - - var matches; + var matches, operator; - // Supported Adguard's advanced selector syntax: will translate into + // Supported Adguard/ABP advanced selector syntax: will translate into // uBO's syntax before further processing. - // - // [-ext-has=...] - // Converted to `:if(...)`, because Adguard accepts procedural - // selectors within its `:has(...)` selector. - if ( (matches = reExtendedSyntaxHas.exec(raw)) !== null ) { - return this.compileSelector( - raw.slice(0, matches.index) + - ':if('+ matches[2].replace(/:contains\(/g, ':has-text(') + ')' + - raw.slice(matches.index + matches[0].length) - ); + // Mind unsupported advanced selector syntax, such as ABP's + // `-abp-properties`. + // Note: extended selector syntax has been deprecated in ABP, in favor + // of the procedural one (i.e. `:operator(...)`). See + // https://issues.adblockplus.org/ticket/5287 + if ( extendedSyntax ) { + while ( (matches = reExtendedSyntaxParser.exec(raw)) !== null ) { + operator = normalizedExtendedSyntaxOperators.get(matches[1]); + if ( operator === undefined ) { return; } + raw = raw.slice(0, matches.index) + + operator + '(' + matches[3] + ')' + + raw.slice(matches.index + matches[0].length); + } + return this.compileSelector(raw); } var selector = raw, @@ -779,12 +852,10 @@ FilterContainer.prototype.compileSelector = (function() { selector += pseudoclass; } if ( style !== undefined ) { - if ( isValidStyleProperty(style) === false ) { - return; - } + if ( isValidStyleProperty(style) === false ) { return; } return JSON.stringify({ raw: raw, - style: [ selector, '{' + style + '}' ] + style: [ selector, style ] }); } return JSON.stringify({ @@ -800,7 +871,10 @@ FilterContainer.prototype.compileSelector = (function() { return raw; } // :contains - if ( reIsRegexLiteral.test(matches[2]) === false || isBadRegex(matches[2].slice(1, -1)) === false ) { + if ( + reIsRegexLiteral.test(matches[2]) === false || + isBadRegex(matches[2].slice(1, -1)) === false + ) { return raw; } } @@ -823,14 +897,15 @@ FilterContainer.prototype.compileSelector = (function() { /******************************************************************************/ FilterContainer.prototype.compileProceduralSelector = (function() { - var reOperatorParser = /(:(?:has|has-text|if|if-not|matches-css|matches-css-after|matches-css-before|xpath))\(.+\)$/, + var reOperatorParser = /(:(?:-abp-contains|-abp-has|contains|has|has-text|if|if-not|matches-css|matches-css-after|matches-css-before|xpath))\(.+\)$/, reFirstParentheses = /^\(*/, reLastParentheses = /\)*$/, reEscapeRegex = /[.*+?^${}()|[\]\\]/g, reNeedScope = /^\s*[+>~]/; var lastProceduralSelector = '', - lastProceduralSelectorCompiled; + lastProceduralSelectorCompiled, + regexToRawValue = new Map(); var compileCSSSelector = function(s) { // https://github.com/AdguardTeam/ExtendedCss/issues/31#issuecomment-302391277 @@ -844,28 +919,31 @@ FilterContainer.prototype.compileProceduralSelector = (function() { }; var compileText = function(s) { + var reText; if ( reIsRegexLiteral.test(s) ) { - s = s.slice(1, -1); - if ( isBadRegex(s) ) { return; } + reText = s.slice(1, -1); + if ( isBadRegex(reText) ) { return; } } else { - s = s.replace(reEscapeRegex, '\\$&'); + reText = s.replace(reEscapeRegex, '\\$&'); + regexToRawValue.set(reText, s); } - return s; + return reText; }; var compileCSSDeclaration = function(s) { - var name, value, + var name, value, reText, pos = s.indexOf(':'); if ( pos === -1 ) { return; } name = s.slice(0, pos).trim(); value = s.slice(pos + 1).trim(); if ( reIsRegexLiteral.test(value) ) { - value = value.slice(1, -1); - if ( isBadRegex(value) ) { return; } + reText = value.slice(1, -1); + if ( isBadRegex(reText) ) { return; } } else { - value = value.replace(reEscapeRegex, '\\$&'); + reText = '^' + value.replace(reEscapeRegex, '\\$&') + '$'; + regexToRawValue.set(reText, value); } - return { name: name, value: value }; + return { name: name, value: reText }; }; var compileConditionalSelector = function(s) { @@ -887,6 +965,13 @@ FilterContainer.prototype.compileProceduralSelector = (function() { return s; }; + // https://github.com/gorhill/uBlock/issues/2793 + var normalizedOperators = new Map([ + [ ':-abp-contains', ':has-text' ], + [ ':-abp-has', ':if' ], + [ ':contains', ':has-text' ] + ]); + var compileArgument = new Map([ [ ':has', compileCSSSelector ], [ ':has-text', compileText ], @@ -898,6 +983,50 @@ FilterContainer.prototype.compileProceduralSelector = (function() { [ ':xpath', compileXpathExpression ] ]); + // https://github.com/gorhill/uBlock/issues/2793#issuecomment-333269387 + // - Normalize (somewhat) the stringified version of procedural cosmetic + // filters -- this increase the likelihood of detecting duplicates given + // that uBO is able to understand syntax specific to other blockers. + // The normalized string version is what is reported in the logger, by + // design. + var decompile = function(compiled) { + var raw = [ compiled.selector ], + tasks = compiled.tasks, + value; + if ( Array.isArray(tasks) ) { + for ( var i = 0, n = tasks.length, task; i < n; i++ ) { + task = tasks[i]; + switch ( task[0] ) { + case ':has': + case ':xpath': + raw.push(task[0], '(', task[1], ')'); + break; + case ':has-text': + value = regexToRawValue.get(task[1]); + if ( value === undefined ) { + value = '/' + task[1] + '/'; + } + raw.push(task[0], '(', value, ')'); + break; + case ':matches-css': + case ':matches-css-after': + case ':matches-css-before': + value = regexToRawValue.get(task[1].value); + if ( value === undefined ) { + value = '/' + task[1].value + '/'; + } + raw.push(task[0], '(', task[1].name, ': ', value, ')'); + break; + case ':if': + case ':if-not': + raw.push(task[0], '(', decompile(task[1]), ')'); + break; + } + } + } + return raw.join(''); + }; + var compile = function(raw) { var matches = reOperatorParser.exec(raw); if ( matches === null ) { @@ -932,6 +1061,7 @@ FilterContainer.prototype.compileProceduralSelector = (function() { if ( depth !== 0 ) { currentArgument += nextOperand + nextOperator; } else { + currentOperator = normalizedOperators.get(currentOperator) || currentOperator; currentArgument = compileArgument.get(currentOperator)(nextOperand.slice(1, -1)); if ( currentArgument === undefined ) { return; } tasks.push([ currentOperator, currentArgument ]); @@ -951,7 +1081,7 @@ FilterContainer.prototype.compileProceduralSelector = (function() { lastProceduralSelector = raw; var compiled = compile(raw); if ( compiled !== undefined ) { - compiled.raw = raw; + compiled.raw = decompile(compiled); compiled = JSON.stringify(compiled); } lastProceduralSelectorCompiled = compiled; @@ -959,6 +1089,7 @@ FilterContainer.prototype.compileProceduralSelector = (function() { }; entryPoint.reset = function() { + regexToRawValue = new Map(); lastProceduralSelector = ''; lastProceduralSelectorCompiled = undefined; }; @@ -1008,7 +1139,6 @@ FilterContainer.prototype.compile = function(s, writer) { return false; } if ( parsed.invalid ) { - //console.error("uBlock Origin> discarding invalid cosmetic filter '%s'", s); return true; } @@ -1052,22 +1182,39 @@ FilterContainer.prototype.compileGenericSelector = function(parsed, writer) { FilterContainer.prototype.compileGenericHideSelector = function(parsed, writer) { var selector = parsed.suffix, - type = selector.charAt(0), - key, matches; + type = selector.charCodeAt(0), + key; + + if ( type === 0x23 /* '#' */ ) { + key = this.keyFromSelector(selector); + if ( key === undefined ) { return; } + // Simple selector-based CSS rule: no need to test for whether the + // selector is valid, the regex took care of this. Most generic + // selector falls into that category. + if ( key === selector ) { + writer.push([ 0 /* lg */, key.slice(1) ]); + return; + } + // Complex selector-based CSS rule. + if ( this.compileSelector(selector) !== undefined ) { + writer.push([ 1 /* lg+ */, key.slice(1), selector ]); + } + return; + } - if ( type === '#' || type === '.' ) { + if ( type === 0x2E /* '.' */ ) { key = this.keyFromSelector(selector); if ( key === undefined ) { return; } - // Single-CSS rule: no need to test for whether the selector - // is valid, the regex took care of this. Most generic selector falls - // into that category. + // Simple selector-based CSS rule: no need to test for whether the + // selector is valid, the regex took care of this. Most generic + // selector falls into that category. if ( key === selector ) { - writer.push([ 0 /* lg */, key ]); + writer.push([ 2 /* lg */, key.slice(1) ]); return; } - // Composite CSS rule. + // Complex selector-based CSS rule. if ( this.compileSelector(selector) !== undefined ) { - writer.push([ 1 /* lg+ */, key, selector ]); + writer.push([ 3 /* lg+ */, key.slice(1), selector ]); } return; } @@ -1076,34 +1223,35 @@ FilterContainer.prototype.compileGenericHideSelector = function(parsed, writer) if ( compiled === undefined ) { return; } // TODO: Detect and error on procedural cosmetic filters. - // ["title"] and ["alt"] will go in high-low generic bin. - if ( this.reHighLow.test(selector) ) { - writer.push([ 2 /* hlg0 */, selector ]); + // https://github.com/gorhill/uBlock/issues/909 + // Anything which contains a plain id/class selector can be classified + // as a low generic cosmetic filter. + var matches = this.rePlainSelectorEx.exec(selector); + if ( matches !== null ) { + key = matches[1] || matches[2]; + type = key.charCodeAt(0); + writer.push([ + type === 0x23 ? 1 : 3 /* lg+ */, + key.slice(1), + selector + ]); return; } - // [href^="..."] will go in high-medium generic bin. - matches = this.reHighMedium.exec(selector); - if ( matches && matches.length === 2 ) { - writer.push([ 3 /* hmg0 */, matches[1], selector ]); - return; - } + // Pass this point, we are dealing with highly-generic cosmetic filters. + // + // For efficiency purpose, we will distinguish between simple and complex + // selectors. - // https://github.com/gorhill/uBlock/issues/909 - // Anything which contains a plain id/class selector can be classified - // as a low generic cosmetic filter. - matches = this.rePlainSelectorEx.exec(selector); - if ( matches && matches.length === 2 ) { - writer.push([ 1 /* lg+ */, matches[1], selector ]); + if ( this.reSimpleHighGeneric1.test(selector) ) { + writer.push([ 4 /* simple */, selector ]); return; } - // All else: high-high generics. - // Distinguish simple vs complex selectors. if ( selector.indexOf(' ') === -1 ) { - writer.push([ 4 /* hhsg0 */, selector ]); + writer.push([ 4 /* simple */, selector ]); } else { - writer.push([ 5 /* hhcg0 */, selector ]); + writer.push([ 5 /* complex */, selector ]); } }; @@ -1124,8 +1272,8 @@ FilterContainer.prototype.compileGenericUnhideSelector = function(parsed, writer if ( compiled === undefined ) { return; } // https://github.com/chrisaljoudi/uBlock/issues/497 - // All generic exception filters are put in the same bucket: they are - // expected to be very rare. + // All generic exception filters are put in the same bucket: they are + // expected to be very rare. writer.push([ 7 /* g1 */, compiled ]); }; @@ -1175,7 +1323,13 @@ FilterContainer.prototype.compileHostnameSelector = function(hostname, parsed, w // h, hash, example.com, .promoted-tweet // h, hash, example.*, .promoted-tweet - writer.push([ 8 /* h */, hash, hostname, compiled ]); + // 8 = declarative, 9 = procedural + writer.push([ + compiled.charCodeAt(0) !== 0x7B /* '{' */ ? 8 : 9, + hash, + hostname, + compiled + ]); }; /******************************************************************************/ @@ -1194,7 +1348,7 @@ FilterContainer.prototype.fromCompiledContent = function( return; } - var fingerprint, args, filter, bucket; + var fingerprint, args, db, filter, bucket; while ( reader.next() === true ) { this.acceptedCount += 1; @@ -1209,69 +1363,49 @@ FilterContainer.prototype.fromCompiledContent = function( switch ( args[0] ) { - // .largeAd - case 0: - bucket = this.lowGenericHideEx.get(args[1]); + // low generic, simple + case 0: // #AdBanner + case 2: // .largeAd + db = args[0] === 0 ? this.lowlyGeneric.id : this.lowlyGeneric.cl; + bucket = db.complex.get(args[1]); if ( bucket === undefined ) { - this.lowGenericHide.add(args[1]); + db.simple.add(args[1]); } else if ( Array.isArray(bucket) ) { bucket.push(args[1]); } else { - this.lowGenericHideEx.set(args[1], [ bucket, args[1] ]); + db.complex.set(args[1], [ bucket, args[1] ]); } - this.lowGenericHideCount += 1; break; - // .Mpopup, .Mpopup + #Mad > #MadZone - case 1: - bucket = this.lowGenericHideEx.get(args[1]); + // low generic, complex + case 1: // #tads + div + .c + case 3: // .Mpopup + #Mad > #MadZone + db = args[0] === 1 ? this.lowlyGeneric.id : this.lowlyGeneric.cl; + bucket = db.complex.get(args[1]); if ( bucket === undefined ) { - if ( this.lowGenericHide.has(args[1]) ) { - this.lowGenericHideEx.set(args[1], [ args[1], args[2] ]); + if ( db.simple.has(args[1]) ) { + db.complex.set(args[1], [ args[1], args[2] ]); } else { - this.lowGenericHideEx.set(args[1], args[2]); - this.lowGenericHide.add(args[1]); + db.complex.set(args[1], args[2]); + db.simple.add(args[1]); } } else if ( Array.isArray(bucket) ) { bucket.push(args[2]); } else { - this.lowGenericHideEx.set(args[1], [ bucket, args[2] ]); - } - this.lowGenericHideCount += 1; - break; - - // ["title"] - // ["alt"] - case 2: - this.highLowGenericHide[args[1]] = true; - this.highLowGenericHideCount += 1; - break; - - // [href^="..."] - case 3: - bucket = this.highMediumGenericHide[args[1]]; - if ( bucket === undefined ) { - this.highMediumGenericHide[args[1]] = args[2]; - } else if ( Array.isArray(bucket) ) { - bucket.push(args[2]); - } else { - this.highMediumGenericHide[args[1]] = [bucket, args[2]]; + db.complex.set(args[1], [ bucket, args[2] ]); } - this.highMediumGenericHideCount += 1; break; // High-high generic hide/simple selectors // div[id^="allo"] case 4: - this.highHighSimpleGenericHideArray.push(args[1]); - this.highHighSimpleGenericHideCount += 1; + this.highlyGeneric.simple.dict.add(args[1]); break; // High-high generic hide/complex selectors // div[id^="allo"] > span case 5: - this.highHighComplexGenericHideArray.push(args[1]); - this.highHighComplexGenericHideCount += 1; + this.highlyGeneric.complex.dict.add(args[1]); break; // js, hash, example.com, script:contains(...) @@ -1284,20 +1418,22 @@ FilterContainer.prototype.fromCompiledContent = function( // Generic exception filters: expected to be a rare occurrence. // #@#.tweet case 7: - this.genericDonthide.push(args[1]); + this.genericDonthideSet.add(args[1]); break; // h, hash, example.com, .promoted-tweet // h, hash, example.*, .promoted-tweet case 8: + case 9: + db = args[0] === 8 ? this.specificFilters : this.proceduralFilters; filter = new FilterHostname(args[3], args[2]); - bucket = this.specificFilters.get(args[1]); + bucket = db.get(args[1]); if ( bucket === undefined ) { - this.specificFilters.set(args[1], filter); + db.set(args[1], filter); } else if ( bucket instanceof FilterBucket ) { bucket.add(filter); } else { - this.specificFilters.set(args[1], new FilterBucket(bucket, filter)); + db.set(args[1], new FilterBucket(bucket, filter)); } break; @@ -1311,7 +1447,7 @@ FilterContainer.prototype.fromCompiledContent = function( /******************************************************************************/ FilterContainer.prototype.skipGenericCompiledContent = function(reader) { - var fingerprint, args, filter, bucket; + var fingerprint, args, db, filter, bucket; while ( reader.next() === true ) { this.acceptedCount += 1; @@ -1336,21 +1472,23 @@ FilterContainer.prototype.skipGenericCompiledContent = function(reader) { // Generic exception filters: expected to be a rare occurrence. case 7: this.duplicateBuster.add(fingerprint); - this.genericDonthide.push(args[1]); + this.genericDonthideSet.add(args[1]); break; // h, hash, example.com, .promoted-tweet // h, hash, example.*, .promoted-tweet case 8: + case 9: + db = args[0] === 8 ? this.specificFilters : this.proceduralFilters; this.duplicateBuster.add(fingerprint); filter = new FilterHostname(args[3], args[2]); - bucket = this.specificFilters.get(args[1]); + bucket = db.get(args[1]); if ( bucket === undefined ) { - this.specificFilters.set(args[1], filter); + db.set(args[1], filter); } else if ( bucket instanceof FilterBucket ) { bucket.add(filter); } else { - this.specificFilters.set(args[1], new FilterBucket(bucket, filter)); + db.set(args[1], new FilterBucket(bucket, filter)); } break; @@ -1513,34 +1651,43 @@ FilterContainer.prototype.retrieveUserScripts = function(domain, hostname) { } // Explicit (hash is domain). - var selectors = [], bucket; + var selectors = new Set(), + bucket; if ( (bucket = this.userScripts.get(domain)) ) { bucket.retrieve(hostname, selectors); } if ( entity !== '' && (bucket = this.userScripts.get(entity)) ) { bucket.retrieve(entity, selectors); } - var i = selectors.length; - while ( i-- ) { - this._lookupUserScript(scripts, selectors[i].slice(14, -1).trim(), reng, out); + for ( var selector of selectors ) { + this._lookupUserScript(scripts, selector.slice(14, -1).trim(), reng, out); } if ( out.length === 0 ) { return; } + // https://github.com/gorhill/uBlock/issues/2835 + // Do not inject scriptlets if the site is under an `allow` rule. + if ( + µb.userSettings.advancedUserEnabled === true && + µb.sessionFirewall.evaluateCellZY(hostname, hostname, '*') === 2 + ) { + return; + } + // Exceptions should be rare, so we check for exception only if there are // scriptlets returned. - var exceptions = [], j, token; + var exceptions = new Set(), + j, token; if ( (bucket = this.userScripts.get('!' + domain)) ) { bucket.retrieve(hostname, exceptions); } if ( entity !== '' && (bucket = this.userScripts.get('!' + entity)) ) { bucket.retrieve(hostname, exceptions); } - i = exceptions.length; - while ( i-- ) { - token = exceptions[i].slice(14, -1); + for ( var exception of exceptions ) { + token = exception.slice(14, -1); if ( (j = scripts.get(token)) !== undefined ) { out[j] = '// User script "' + token + '" excepted.\n'; } @@ -1604,19 +1751,15 @@ FilterContainer.prototype.toSelfie = function() { acceptedCount: this.acceptedCount, discardedCount: this.discardedCount, specificFilters: selfieFromMap(this.specificFilters), + proceduralFilters: selfieFromMap(this.proceduralFilters), hasGenericHide: this.hasGenericHide, - lowGenericHide: µb.setToArray(this.lowGenericHide), - lowGenericHideEx: µb.mapToArray(this.lowGenericHideEx), - lowGenericHideCount: this.lowGenericHideCount, - highLowGenericHide: this.highLowGenericHide, - highLowGenericHideCount: this.highLowGenericHideCount, - highMediumGenericHide: this.highMediumGenericHide, - highMediumGenericHideCount: this.highMediumGenericHideCount, - highHighSimpleGenericHide: this.highHighSimpleGenericHide, - highHighSimpleGenericHideCount: this.highHighSimpleGenericHideCount, - highHighComplexGenericHide: this.highHighComplexGenericHide, - highHighComplexGenericHideCount: this.highHighComplexGenericHideCount, - genericDonthide: this.genericDonthide, + lowlyGenericSID: µb.arrayFrom(this.lowlyGeneric.id.simple), + lowlyGenericCID: µb.arrayFrom(this.lowlyGeneric.id.complex), + lowlyGenericSCL: µb.arrayFrom(this.lowlyGeneric.cl.simple), + lowlyGenericCCL: µb.arrayFrom(this.lowlyGeneric.cl.complex), + highSimpleGenericHideArray: µb.arrayFrom(this.highlyGeneric.simple.dict), + highComplexGenericHideArray: µb.arrayFrom(this.highlyGeneric.complex.dict), + genericDonthideArray: µb.arrayFrom(this.genericDonthideSet), scriptTagFilters: this.scriptTagFilters, scriptTagFilterCount: this.scriptTagFilterCount, userScripts: selfieFromMap(this.userScripts), @@ -1641,19 +1784,17 @@ FilterContainer.prototype.fromSelfie = function(selfie) { this.acceptedCount = selfie.acceptedCount; this.discardedCount = selfie.discardedCount; this.specificFilters = mapFromSelfie(selfie.specificFilters); + this.proceduralFilters = mapFromSelfie(selfie.proceduralFilters); this.hasGenericHide = selfie.hasGenericHide; - this.lowGenericHide = µb.setFromArray(selfie.lowGenericHide); - this.lowGenericHideEx = µb.mapFromArray(selfie.lowGenericHideEx); - this.lowGenericHideCount = selfie.lowGenericHideCount; - this.highLowGenericHide = selfie.highLowGenericHide; - this.highLowGenericHideCount = selfie.highLowGenericHideCount; - this.highMediumGenericHide = selfie.highMediumGenericHide; - this.highMediumGenericHideCount = selfie.highMediumGenericHideCount; - this.highHighSimpleGenericHide = selfie.highHighSimpleGenericHide; - this.highHighSimpleGenericHideCount = selfie.highHighSimpleGenericHideCount; - this.highHighComplexGenericHide = selfie.highHighComplexGenericHide; - this.highHighComplexGenericHideCount = selfie.highHighComplexGenericHideCount; - this.genericDonthide = selfie.genericDonthide; + this.lowlyGeneric.id.simple = new Set(selfie.lowlyGenericSID); + this.lowlyGeneric.id.complex = new Map(selfie.lowlyGenericCID); + this.lowlyGeneric.cl.simple = new Set(selfie.lowlyGenericSCL); + this.lowlyGeneric.cl.complex = new Map(selfie.lowlyGenericCCL); + this.highlyGeneric.simple.dict = new Set(selfie.highSimpleGenericHideArray); + this.highlyGeneric.simple.str = selfie.highSimpleGenericHideArray.join(',\n'); + this.highlyGeneric.complex.dict = new Set(selfie.highComplexGenericHideArray); + this.highlyGeneric.complex.str = selfie.highComplexGenericHideArray.join(',\n'); + this.genericDonthideSet = new Set(selfie.genericDonthideArray); this.scriptTagFilters = selfie.scriptTagFilters; this.scriptTagFilterCount = selfie.scriptTagFilterCount; this.userScripts = mapFromSelfie(selfie.userScripts); @@ -1664,247 +1805,462 @@ FilterContainer.prototype.fromSelfie = function(selfie) { /******************************************************************************/ FilterContainer.prototype.triggerSelectorCachePruner = function() { - if ( this.selectorCacheTimer !== null ) { - return; - } - if ( this.selectorCacheCount <= this.selectorCacheCountMin ) { - return; - } // Of interest: http://fitzgeraldnick.com/weblog/40/ // http://googlecode.blogspot.ca/2009/07/gmail-for-mobile-html5-series-using.html - this.selectorCacheTimer = vAPI.setTimeout( - this.pruneSelectorCacheAsync.bind(this), - this.selectorCachePruneDelay - ); + if ( this.selectorCacheTimer === null ) { + this.selectorCacheTimer = vAPI.setTimeout( + this.pruneSelectorCacheAsync.bind(this), + this.selectorCachePruneDelay + ); + } }; /******************************************************************************/ FilterContainer.prototype.addToSelectorCache = function(details) { var hostname = details.hostname; - if ( typeof hostname !== 'string' || hostname === '' ) { - return; - } + if ( typeof hostname !== 'string' || hostname === '' ) { return; } var selectors = details.selectors; - if ( !selectors ) { - return; - } - var entry = this.selectorCache[hostname]; + if ( Array.isArray(selectors) === false ) { return; } + var entry = this.selectorCache.get(hostname); if ( entry === undefined ) { - entry = this.selectorCache[hostname] = SelectorCacheEntry.factory(); - this.selectorCacheCount += 1; - this.triggerSelectorCachePruner(); + entry = SelectorCacheEntry.factory(); + this.selectorCache.set(hostname, entry); + if ( this.selectorCache.size > this.selectorCacheCountMin ) { + this.triggerSelectorCachePruner(); + } } entry.add(details); }; /******************************************************************************/ -FilterContainer.prototype.removeFromSelectorCache = function(targetHostname, type) { - var targetHostnameLength = targetHostname.length; - for ( var hostname in this.selectorCache ) { - if ( this.selectorCache.hasOwnProperty(hostname) === false ) { - continue; - } +FilterContainer.prototype.removeFromSelectorCache = function( + targetHostname, + type +) { + var targetHostnameLength = targetHostname.length, + hostname, item; + for ( var entry of this.selectorCache ) { + hostname = entry[0]; + item = entry[1]; if ( targetHostname !== '*' ) { - if ( hostname.endsWith(targetHostname) === false ) { - continue; - } - if ( hostname.length !== targetHostnameLength && - hostname.charAt(hostname.length - targetHostnameLength - 1) !== '.' ) { + if ( hostname.endsWith(targetHostname) === false ) { continue; } + if ( + hostname.length !== targetHostnameLength && + hostname.charAt(hostname.length - targetHostnameLength - 1) !== '.' + ) { continue; } } - this.selectorCache[hostname].remove(type); + item.remove(type); } }; /******************************************************************************/ -FilterContainer.prototype.retrieveFromSelectorCache = function(hostname, type, out) { - var entry = this.selectorCache[hostname]; - if ( entry === undefined ) { - return; +FilterContainer.prototype.retrieveFromSelectorCache = function( + hostname, + type, + out +) { + var entry = this.selectorCache.get(hostname); + if ( entry !== undefined ) { + entry.retrieve(type, out); } - entry.retrieve(type, out); }; /******************************************************************************/ FilterContainer.prototype.pruneSelectorCacheAsync = function() { this.selectorCacheTimer = null; - if ( this.selectorCacheCount <= this.selectorCacheCountMin ) { - return; - } + if ( this.selectorCache.size <= this.selectorCacheCountMin ) { return; } var cache = this.selectorCache; // Sorted from most-recently-used to least-recently-used, because // we loop beginning at the end below. // We can't avoid sorting because we have to keep a minimum number of // entries, and these entries should always be the most-recently-used. - var hostnames = Object.keys(cache) - .sort(function(a, b) { return cache[b].lastAccessTime - cache[a].lastAccessTime; }) - .slice(this.selectorCacheCountMin); - var obsolete = Date.now() - this.selectorCacheAgeMax; - var hostname, entry; - var i = hostnames.length; + var hostnames = µb.arrayFrom(cache.keys()) + .sort(function(a, b) { + return cache.get(b).lastAccessTime - + cache.get(a).lastAccessTime; + }) + .slice(this.selectorCacheCountMin); + var obsolete = Date.now() - this.selectorCacheAgeMax, + hostname, entry, + i = hostnames.length; while ( i-- ) { hostname = hostnames[i]; - entry = cache[hostname]; - if ( entry.lastAccessTime > obsolete ) { - break; - } + entry = cache.get(hostname); + if ( entry.lastAccessTime > obsolete ) { break; } // console.debug('pruneSelectorCacheAsync: flushing "%s"', hostname); entry.dispose(); - delete cache[hostname]; - this.selectorCacheCount -= 1; + cache.delete(hostname); + } + if ( cache.size > this.selectorCacheCountMin ) { + this.triggerSelectorCachePruner(); } - this.triggerSelectorCachePruner(); }; /******************************************************************************/ -FilterContainer.prototype.retrieveGenericSelectors = function(request) { - if ( this.acceptedCount === 0 ) { - return; +FilterContainer.prototype.randomAlphaToken = function() { + return String.fromCharCode(Date.now() % 26 + 97) + + Math.floor(Math.random() * 982451653 + 982451653).toString(36); +}; + +/******************************************************************************/ + +FilterContainer.prototype.retrieveGenericSelectors = function( + request, + sender +) { + if ( this.acceptedCount === 0 ) { return; } + if ( !request.ids && !request.classes ) { return; } + + //console.time('cosmeticFilteringEngine.retrieveGenericSelectors'); + + var simpleSelectors = this.setRegister0, + complexSelectors = this.setRegister1; + var entry, selectors, + strEnd, sliceBeg, sliceEnd, + selector, bucket; + + var cacheEntry = this.selectorCache.get(request.hostname), + previousHits = cacheEntry && cacheEntry.cosmetic || this.setRegister2; + + for ( var type in this.lowlyGeneric ) { + entry = this.lowlyGeneric[type]; + selectors = request[entry.canonical]; + if ( typeof selectors !== 'string' ) { continue; } + strEnd = selectors.length; + sliceBeg = 0; + do { + sliceEnd = selectors.indexOf('\n', sliceBeg); + if ( sliceEnd === -1 ) { sliceEnd = strEnd; } + selector = selectors.slice(sliceBeg, sliceEnd); + sliceBeg = sliceEnd + 1; + if ( entry.simple.has(selector) === false ) { continue; } + if ( (bucket = entry.complex.get(selector)) !== undefined ) { + if ( Array.isArray(bucket) ) { + for ( selector of bucket ) { + if ( previousHits.has(selector) === false ) { + complexSelectors.add(selector); + } + } + } else if ( previousHits.has(bucket) === false ) { + complexSelectors.add(bucket); + } + } else { + selector = entry.prefix + selector; + if ( previousHits.has(selector) === false ) { + simpleSelectors.add(selector); + } + } + } while ( sliceBeg < strEnd ); } - if ( !request.selectors ) { - return; + + // Apply exceptions: it is the responsibility of the caller to provide + // the exceptions to be applied. + if ( Array.isArray(request.exceptions) ) { + for ( var exception of request.exceptions ) { + simpleSelectors.delete(exception); + complexSelectors.delete(exception); + } } - //quickProfiler.start('FilterContainer.retrieve()'); + if ( simpleSelectors.size === 0 && complexSelectors.size === 0 ) { + return; + } - var r = { - hide: [] + var out = { + simple: µb.arrayFrom(simpleSelectors), + complex: µb.arrayFrom(complexSelectors), + injected: '' }; - if ( request.firstSurvey ) { - r.highGenerics = { - hideLow: this.highLowGenericHide, - hideLowCount: this.highLowGenericHideCount, - hideMedium: this.highMediumGenericHide, - hideMediumCount: this.highMediumGenericHideCount, - hideHighSimple: this.highHighSimpleGenericHide, - hideHighSimpleCount: this.highHighSimpleGenericHideCount, - hideHighComplex: this.highHighComplexGenericHide, - hideHighComplexCount: this.highHighComplexGenericHideCount - }; + // Cache and inject (if user stylesheets supported) looked-up low generic + // cosmetic filters. + if ( typeof request.hostname === 'string' && request.hostname !== '' ) { + this.addToSelectorCache({ + cost: request.surveyCost || 0, + hostname: request.hostname, + injectedHideFilters: '', + selectors: out.simple.concat(out.complex), + type: 'cosmetic' + }); } - var hideSelectors = r.hide, - selectors = request.selectors, - i = selectors.length, - selector, bucket; - while ( i-- ) { - selector = selectors[i]; - if ( this.lowGenericHide.has(selector) === false ) { continue; } - if ( (bucket = this.lowGenericHideEx.get(selector)) !== undefined ) { - if ( Array.isArray(bucket) ) { - hideSelectors = hideSelectors.concat(bucket); - } else { - hideSelectors.push(bucket); - } - } else { - hideSelectors.push(selector); + // If user stylesheets are supported in the current process, inject the + // cosmetic filters now. + if ( + this.supportsUserStylesheets && + sender instanceof Object && + sender.tab instanceof Object && + typeof sender.frameId === 'number' + ) { + var injected = []; + if ( out.simple.length !== 0 ) { + injected.push(out.simple.join(',\n')); + out.simple = []; } + if ( out.complex.length !== 0 ) { + injected.push(out.complex.join(',\n')); + out.complex = []; + } + out.injected = injected.join(',\n'); + vAPI.insertCSS(sender.tab.id, { + code: out.injected + '\n{display:none!important;}', + cssOrigin: 'user', + frameId: sender.frameId, + runAt: 'document_start' + }); } - r.hide = hideSelectors; - //quickProfiler.stop(); + // Important: always clear used registers before leaving. + this.setRegister0.clear(); + this.setRegister1.clear(); + + //console.timeEnd('cosmeticFilteringEngine.retrieveGenericSelectors'); - return r; + return out; }; /******************************************************************************/ -FilterContainer.prototype.retrieveDomainSelectors = function(request, noCosmeticFiltering) { - if ( !request.locationURL ) { - return; - } +FilterContainer.prototype.retrieveDomainSelectors = function( + request, + sender, + options +) { + if ( !request.locationURL ) { return; } - //quickProfiler.start('FilterContainer.retrieve()'); + //console.time('cosmeticFilteringEngine.retrieveDomainSelectors'); var hostname = this.µburi.hostnameFromURI(request.locationURL), domain = this.µburi.domainFromHostname(hostname) || hostname, pos = domain.indexOf('.'), entity = pos === -1 ? '' : domain.slice(0, pos - domain.length) + '.*', - cacheEntry = this.selectorCache[hostname]; + cacheEntry = this.selectorCache.get(hostname); // https://github.com/chrisaljoudi/uBlock/issues/587 - // r.ready will tell the content script the cosmetic filtering engine is + // out.ready will tell the content script the cosmetic filtering engine is // up and ready. // https://github.com/chrisaljoudi/uBlock/issues/497 // Generic exception filters are to be applied on all pages. - var r = { + var out = { ready: this.frozen, + hostname: hostname, domain: domain, entity: entity, + declarativeFilters: [], + exceptionFilters: [], + hideNodeAttr: this.randomAlphaToken(), + hideNodeStyleSheetInjected: false, + highGenericHideSimple: '', + highGenericHideComplex: '', + injectedHideFilters: '', + networkFilters: '', noDOMSurveying: this.hasGenericHide === false, - cosmeticHide: [], - cosmeticDonthide: [], - netHide: [], + proceduralFilters: [], scripts: undefined }; - if ( !noCosmeticFiltering ) { - var hash, bucket; + if ( options.noCosmeticFiltering !== true ) { + var domainHash = makeHash(domain), + entityHash = entity !== '' ? makeHash(entity) : undefined, + exception, bucket; - // Generic exception cosmetic filters. - r.cosmeticDonthide = this.genericDonthide.slice(); - - // Specific cosmetic filters. - hash = makeHash(domain); - if ( (bucket = this.specificFilters.get(hash)) ) { - bucket.retrieve(hostname, r.cosmeticHide); + // Exception cosmetic filters: prime with generic exception filters. + var exceptionSet = this.setRegister0; + // Genetic exceptions (should be extremely rare). + for ( exception of this.genericDonthideSet ) { + exceptionSet.add(exception); } // Specific exception cosmetic filters. - if ( (bucket = this.specificFilters.get('!' + hash)) ) { - bucket.retrieve(hostname, r.cosmeticDonthide); + if ( (bucket = this.specificFilters.get('!' + domainHash)) ) { + bucket.retrieve(hostname, exceptionSet); + } + if ( (bucket = this.proceduralFilters.get('!' + domainHash)) ) { + bucket.retrieve(hostname, exceptionSet); + } + // Specific entity-based exception cosmetic filters. + if ( entityHash !== undefined ) { + if ( (bucket = this.specificFilters.get('!' + entityHash)) ) { + bucket.retrieve(entity, exceptionSet); + } + if ( (bucket = this.proceduralFilters.get('!' + entityHash)) ) { + bucket.retrieve(entity, exceptionSet); + } + } + // Special bucket for those filters without a valid + // domain name as per PSL. + if ( (bucket = this.specificFilters.get('!' + this.noDomainHash)) ) { + bucket.retrieve(hostname, exceptionSet); + } + if ( (bucket = this.proceduralFilters.get('!' + this.noDomainHash)) ) { + bucket.retrieve(hostname, exceptionSet); + } + if ( exceptionSet.size !== 0 ) { + out.exceptionFilters = µb.arrayFrom(exceptionSet); } + // Declarative cosmetic filters. + // TODO: Should I go one step further and store specific simple and + // specific complex in different collections? This could simplify + // slightly content script code. + var specificSet = this.setRegister1; + // Specific cosmetic filters. + if ( (bucket = this.specificFilters.get(domainHash)) ) { + bucket.retrieve(hostname, specificSet); + } // Specific entity-based cosmetic filters. - if ( entity !== '' ) { - // Specific entity-based cosmetic filters. - hash = makeHash(entity); - if ( (bucket = this.specificFilters.get(hash)) ) { - bucket.retrieve(entity, r.cosmeticHide); + if ( entityHash !== undefined ) { + if ( (bucket = this.specificFilters.get(entityHash)) ) { + bucket.retrieve(entity, specificSet); } - // Specific entity-based exception cosmetic filters. - //if ( (bucket = this.specificFilters.get('!' + hash)) ) { - // bucket.retrieve(entity, r.cosmeticHide); - //} } - // https://github.com/chrisaljoudi/uBlock/issues/188 // Special bucket for those filters without a valid domain name as per PSL if ( (bucket = this.specificFilters.get(this.noDomainHash)) ) { - bucket.retrieve(hostname, r.cosmeticHide); + bucket.retrieve(hostname, specificSet); } - if ( (bucket = this.specificFilters.get('!' + this.noDomainHash)) ) { - bucket.retrieve(hostname, r.cosmeticDonthide); + // Cached cosmetic filters: these are always declarative. + if ( cacheEntry !== undefined ) { + cacheEntry.retrieve('cosmetic', specificSet); + if ( out.noDOMSurveying === false ) { + out.noDOMSurveying = cacheEntry.cosmeticSurveyingMissCount > + cosmeticSurveyingMissCountMax; + } } - // cached cosmetic filters. - if ( cacheEntry ) { - cacheEntry.retrieve('cosmetic', r.cosmeticHide); - if ( r.noDOMSurveying === false ) { - r.noDOMSurveying = cacheEntry.cosmeticSurveyingMissCount > cosmeticSurveyingMissCountMax; + // Procedural cosmetic filters. + var proceduralSet = this.setRegister2; + // Specific cosmetic filters. + if ( (bucket = this.proceduralFilters.get(domainHash)) ) { + bucket.retrieve(hostname, proceduralSet); + } + // Specific entity-based cosmetic filters. + if ( entityHash !== undefined ) { + if ( (bucket = this.proceduralFilters.get(entityHash)) ) { + bucket.retrieve(entity, proceduralSet); + } + } + // https://github.com/chrisaljoudi/uBlock/issues/188 + // Special bucket for those filters without a valid domain name as per PSL + if ( (bucket = this.proceduralFilters.get(this.noDomainHash)) ) { + bucket.retrieve(hostname, proceduralSet); + } + + // Apply exceptions. + for ( exception of exceptionSet ) { + specificSet.delete(exception); + proceduralSet.delete(exception); + } + if ( specificSet.size !== 0 ) { + out.declarativeFilters = µb.arrayFrom(specificSet); + } + if ( proceduralSet.size !== 0 ) { + out.proceduralFilters = µb.arrayFrom(proceduralSet); + } + + // Highly generic cosmetic filters: sent once along with specific ones. + // A most-recent-used cache is used to skip computing the resulting set + // of high generics for a given set of exceptions. + // The resulting set of high generics is stored as a string, ready to + // be used as-is by the content script. The string is stored + // indirectly in the mru cache: this is to prevent duplication of the + // string in memory, which I have observed occurs when the string is + // stored directly as a value in a Map. + if ( options.noGenericCosmeticFiltering !== true ) { + var exceptionHash = out.exceptionFilters.join(); + for ( var type in this.highlyGeneric ) { + var entry = this.highlyGeneric[type]; + var str = entry.mru.lookup(exceptionHash); + if ( str === undefined ) { + str = { s: entry.str }; + var genericSet = entry.dict; + var hit = false; + for ( exception of exceptionSet ) { + if ( (hit = genericSet.has(exception)) ) { break; } + } + if ( hit ) { + genericSet = new Set(entry.dict); + for ( exception of exceptionSet ) { + genericSet.delete(exception); + } + str.s = µb.arrayFrom(genericSet).join(',\n'); + } + entry.mru.add(exceptionHash, str); + } + out[entry.canonical] = str.s; } } + + // Important: always clear used registers before leaving. + this.setRegister0.clear(); + this.setRegister1.clear(); + this.setRegister2.clear(); } // Scriptlet injection. - r.scripts = this.retrieveUserScripts(domain, hostname); + out.scripts = this.retrieveUserScripts(domain, hostname); - // Collapsible blocked resources. if ( cacheEntry ) { - cacheEntry.retrieve('net', r.netHide); + var networkFilters = []; + cacheEntry.retrieve('net', networkFilters); + out.networkFilters = networkFilters.join(',\n'); + } + + // https://github.com/gorhill/uBlock/issues/3160 + // If user stylesheets are supported in the current process, inject the + // cosmetic filters now. + if ( + this.supportsUserStylesheets && + sender instanceof Object && + sender.tab instanceof Object && + typeof sender.frameId === 'number' + ) { + var injectedHideFilters = []; + if ( out.declarativeFilters.length !== 0 ) { + injectedHideFilters.push(out.declarativeFilters.join(',\n')); + out.declarativeFilters = []; + } + if ( out.proceduralFilters.length !== 0 ) { + injectedHideFilters.push('[' + out.hideNodeAttr + ']'); + out.hideNodeStyleSheetInjected = true; + } + if ( out.highGenericHideSimple.length !== 0 ) { + injectedHideFilters.push(out.highGenericHideSimple); + out.highGenericHideSimple = ''; + } + if ( out.highGenericHideComplex.length !== 0 ) { + injectedHideFilters.push(out.highGenericHideComplex); + out.highGenericHideComplex = ''; + } + out.injectedHideFilters = injectedHideFilters.join(',\n'); + var details = { + code: '', + cssOrigin: 'user', + frameId: sender.frameId, + runAt: 'document_start' + }; + if ( out.injectedHideFilters.length !== 0 ) { + details.code = out.injectedHideFilters + '\n{display:none!important;}'; + vAPI.insertCSS(sender.tab.id, details); + } + if ( out.networkFilters.length !== 0 ) { + details.code = out.networkFilters + '\n{display:none!important;}'; + vAPI.insertCSS(sender.tab.id, details); + out.networkFilters = ''; + } } - //quickProfiler.stop(); + //console.timeEnd('cosmeticFilteringEngine.retrieveDomainSelectors'); - return r; + return out; }; /******************************************************************************/ diff --git a/src/js/hnswitches.js b/src/js/hnswitches.js index e16c4d9eaef0a..17954c9619138 100644 --- a/src/js/hnswitches.js +++ b/src/js/hnswitches.js @@ -37,19 +37,12 @@ var HnSwitches = function() { /******************************************************************************/ var switchBitOffsets = { - 'no-strict-blocking': 0, - 'no-popups': 2, - 'no-cosmetic-filtering': 4, - 'no-remote-fonts': 6, - 'no-large-media': 8 -}; - -var fromLegacySwitchNames = { - 'dontBlockDoc': 'no-strict-blocking', - 'doBlockAllPopups': 'no-popups', - 'noStrictBlocking': 'no-strict-blocking', - 'noPopups': 'no-popups', - 'noCosmeticFiltering': 'no-cosmetic-filtering' + 'no-strict-blocking': 0, + 'no-popups': 2, + 'no-cosmetic-filtering': 4, + 'no-remote-fonts': 6, + 'no-large-media': 8, + 'no-csp-reports': 10 }; var switchStateToNameMap = { @@ -315,7 +308,6 @@ HnSwitches.prototype.fromString = function(text) { continue; } switchName = switchName.slice(0, pos); - switchName = fromLegacySwitchNames[switchName] || switchName; if ( switchBitOffsets.hasOwnProperty(switchName) === false ) { continue; } diff --git a/src/js/hntrie.js b/src/js/hntrie.js new file mode 100644 index 0000000000000..96ce32aea868b --- /dev/null +++ b/src/js/hntrie.js @@ -0,0 +1,597 @@ +/******************************************************************************* + + uBlock Origin - a browser extension to block requests. + Copyright (C) 2017 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'; + +/******************************************************************************* + + The original prototype was to develop an idea I had about using jump indices + in a TypedArray for quickly matching hostnames (or more generally strings)[1]. + Once I had a working, un-optimized prototype, I realized I had ended up + with something formally named a "trie": , + hence the name. I have no idea whether the implementation here or one + resembling it has been done elsewhere. + + "HN" in HNTrieBuilder stands for "HostName", because the trie is specialized + to deal with matching hostnames -- which is a bit more complicated than + matching plain strings. + + For example, `www.abc.com` is deemed matching `abc.com`, because the former + is a subdomain of the latter. The opposite is of course not true. + + The resulting read-only trie created as a result of using HNTrieBuilder are + simply just typed arrays filled with integers. The matching algorithm is + just a matter of reading/comparing these integers, and further using them as + indices in the array as a way to move around in the trie. + + There is still place for optimizations. Specifically, I could force the + strings to be properly sorted so that `HNTrie.matches` could bail earlier + when trying to find a matching descendant -- but suspect the gain would be + marginal, if measurable. + + [1] To solve + +*/ + +var HNTrieBuilder = function() { + this.reset(); +}; + +/******************************************************************************* + + A plain javascript array is used to build the trie. It will be casted into + the appropriate read-only TypedArray[1] at vacuum time. + + [1] Depending on the size: Uint8Array, Uint16Array, or Uint32Array. + +*/ + +HNTrieBuilder.prototype.reset = function() { + this.buf = []; + this.bufsz = 0; + this.buf[0] = 0; + this.buf[1] = 0; + this.buf[2] = 0; + return this; +}; + +/******************************************************************************* + + Helpers for convenience. + +*/ + +HNTrieBuilder.fromDomainOpt = function(domainOpt) { + var builder = new HNTrieBuilder(); + builder.fromDomainOpt(domainOpt); + return builder.vacuum(); +}; + +HNTrieBuilder.fromIterable = function(hostnames) { + var builder = new HNTrieBuilder(); + builder.fromIterable(hostnames); + return builder.vacuum(); +}; + +HNTrieBuilder.print = function(trie) { + var buf = trie.buf, + i = 0, cc = [], ic, indent = 0, + forks = []; + for (;;) { + if ( buf[i] !== 0 ) { + forks.push(i, indent); + } + cc.unshift(buf[i+2]); + for ( ic = 0; ic < buf[i+3]; ic++ ) { + cc.unshift(buf[i+4+ic]); + } + console.log('\xB7'.repeat(indent) + String.fromCharCode.apply(null, cc)); + indent += cc.length; + cc = []; + i = buf[i+1]; + if ( i === 0 ) { + if ( forks.length === 0 ) { break; } + indent = forks.pop(); + i = forks.pop(); + i = buf[i]; + } + } +}; + +/******************************************************************************* + + Since this trie is specialized for matching hostnames, the stored strings are + reversed internally, because of hostname comparison logic: + + Correct matching: + index 0123456 + abc.com + | + www.abc.com + index 01234567890 + + Incorrect matching (typically used for plain strings): + index 0123456 + abc.com + | + www.abc.com + index 01234567890 + +*/ + +HNTrieBuilder.prototype.add = function(hn) { + var ichar = hn.length - 1; + if ( ichar === -1 ) { return; } + var c = hn.charCodeAt(ichar), + i = 0, inext; + for (;;) { + if ( this.buf[i+2] !== c ) { // match not found + inext = this.buf[i]; // move to descendant + if ( inext === 0 ) { break; } // no descendant + } else { // match found + if ( c === 0 ) { return; } + inext = this.buf[i+1]; // move to sibling + ichar -= 1; + c = ichar === -1 ? 0 : hn.charCodeAt(ichar); + } + i = inext; + } + // Any new string added will always cause a new descendant to be created. + // The only time this is not the case is when trying to store a string + // which is already in the trie. + inext = this.bufsz; // new descendant cell + this.buf[i] = inext; + this.buf[inext+0] = 0; // jump index to descendant + this.buf[inext+1] = 0; // jump index to sibling + this.buf[inext+2] = c; // character code + this.bufsz += 3; + if ( c === 0 ) { return; } // character zero is always last cell + do { + i = inext; // new branch sprouting made from + ichar -= 1; // all characters left to store + c = ichar === -1 ? 0 : hn.charCodeAt(ichar); + inext = this.bufsz; + this.buf[i+1] = inext; + this.buf[inext+0] = 0; + this.buf[inext+1] = 0; + this.buf[inext+2] = c; + this.bufsz += 3; + } while ( c!== 0 ); +}; + +/******************************************************************************* + + Not using String.split('|') to avoid memory churning. + +*/ + +HNTrieBuilder.prototype.fromDomainOpt = function(hostnames) { + return this.fromIterable(hostnames.split('|')); +}; + +HNTrieBuilder.prototype.fromIterable = function(hostnames) { + var hns = Array.from(hostnames).sort(function(a, b) { + return a.length - b.length; + }); + // https://github.com/gorhill/uBlock/issues/3328 + // Must sort from shortest to longest. + for ( var hn of hns ) { + this.add(hn); + } + return this; +}; + +/******************************************************************************/ + +HNTrieBuilder.prototype.matches = function(needle) { + var ichar = needle.length - 1, + buf = this.buf, i = 0, c; + for (;;) { + c = ichar === -1 ? 0 : needle.charCodeAt(ichar); + while ( buf[i+2] !== c ) { + i = buf[i]; + if ( i === 0 ) { return false; } + } + if ( c === 0 ) { return true; } + i = buf[i+1]; + if ( i === 0 ) { return c === 0x2E; } + ichar -= 1; + } +}; + +/******************************************************************************* + + Before vacuuming, each cell is 3 entry-long: + - Jump index to descendant (if any) + - Jump index to sibling (if any) + - character code + + All strings stored in the un-vacuumed trie are zero-terminated, and the + character zero does occupy a cell like any other character. Let's use _ to + represent character zero for sake of comments. The asterisk will be used to + highlight a node with a descendant. + + Cases, before vacuuming: + + abc.com, abc.org: 16 cells + * + _ -- a -- b -- c -- . -- c -- o -- m + _ -- a -- b -- c -- . -- o -- r -- g + + abc.com, xyz.com: 12 cells + * + _ -- a -- b -- c -- . -- c -- o -- m + _ -- x -- y -- z + + ab.com, b.com: 8 cells + * + _ -- a -- b -- . -- c -- o -- m + _ + + b.com, ab.com: 8 cells + * + _ -- b -- . -- c -- o -- m + _ -- a + + Vacuuming is the process of merging sibling cells with no descendants. Cells + with descendants can't be merged. + + Each time we arrive at the end of a horizontal branch (sibling jump index is + 0), we walk back to the nearest previous node with descendants, and repeat + the process. Since there is no index information on where to come back, a + stack is used to remember cells with descendants (descendant jump index is + non zero) encountered on the way + + After vacuuming, each cell is 4+n entry-long: + - Jump index to descendant (if any) + - Jump index to sibling (if any) + - character code + - length of merged character code(s) + + Cases, after vacuuming: + + abc.com, abc.org: 2 cells + * + [abc.co]m + [abc.or]g + + abc.com, xyz.com: 3 cells + * + [ab]c -- [.co]m + [xy]z + + ab.com, b.com: 3 cells + * + a -- [b.co]m + _ + + b.com, ab.com: 3 cells + * + _ -- [b.co]m + a + + It's possible for a character zero cell to have descendants. + + It's not possible for a character zero cell to have next siblings. + + This will have to be taken into account during both vacuuming and matching. + + Character zero cells with no descendant are discarded during vacuuming. + Character zero cells with a descendant, or character zero cells which are a + decendant are kept into the vacuumed trie. + + A vacuumed trie is very efficient memory- and lookup-wise, but is also + read-only: no string can be added or removed. The read-only trie is really + just a self-sufficient array of integers, and can easily be exported/imported + as a JSON array. It is theoretically possible to "decompile" a trie (vacuumed + or not) into the set of strings originally added to it (in the order they + were added with the current implementation), but so far I do not need this + feature. + + TODO: It's possible to build the vacuumed trie on the fly as items are + added to it. I need to carefully list all possible cases which can arise + at insertion time. The benefits will be: faster creation time (expected), no + longer read-only trie (items can be added at any time). + +*/ + +HNTrieBuilder.prototype.vacuum = function() { + if ( this.bufsz === 0 ) { return null; } + var input = this.buf, + output = [], outsz = 0, + forks = [], + iin = 0, iout; + for (;;) { + iout = outsz; + output[iout+0] = 0; + output[iout+1] = 0; + output[iout+2] = input[iin+2]; // first character + output[iout+3] = 0; + outsz += 4; + if ( input[iin] !== 0 ) { // cell with descendant + forks.push(iout, iin); // defer processing + } + for (;;) { // merge sibling cell(s) + iin = input[iin+1]; // sibling cell + if ( iin === 0 ) { break; } // no more sibling cell + if ( input[iin] !== 0 ) { break; } // cell with a descendant + if ( input[iin+2] === 0 ) { break; } // don't merge \x00 + output[outsz] = input[iin+2]; // add character data + outsz += 1; + } + if ( outsz !== iout + 4 ) { // cells were merged + output[iout+3] = outsz - iout - 4; // so adjust count + } + if ( iin !== 0 && input[iin] !== 0 ) { // can't merge this cell + output[iout+1] = outsz; + continue; + } + if ( forks.length === 0 ) { break; } // no more descendants: bye + iin = forks.pop(); // process next descendant + iout = forks.pop(); + iin = input[iin]; + output[iout] = outsz; + } + var trie; // pick optimal read-only + if ( outsz < 256 ) { // container array. + trie = new this.HNTrie8(output, outsz); + } else if ( outsz < 65536 ) { + trie = new this.HNTrie16(output, outsz); + } else { + trie = new this.HNTrie32(output, outsz); + } + this.reset(); // free working array + return trie; +}; + +/******************************************************************************* + + The following internal classes are the actual output of the vacuum() method. + + They use the minimal amount of data to be able to efficiently lookup strings + in a read-only trie. + + Given that javascript optimizers mind that the type of an argument passed to + a function always stays the same each time the function is called, there need + to be three separate implementation of matches() to allow the javascript + optimizer to do its job. + + The matching code deals only with looking up values in a TypedArray (beside + calls to String.charCodeAt), so I expect this to be fast and good candidate + for optimization by javascript engines. + +*/ + +HNTrieBuilder.prototype.HNTrie8 = function(buf, bufsz) { + this.buf = new Uint8Array(buf.slice(0, bufsz)); +}; + +HNTrieBuilder.prototype.HNTrie8.prototype.matches = function(needle) { + var ichar = needle.length, + i = 0, c1, c2, ccnt, ic, i1, i2; + for (;;) { + ichar -= 1; + c1 = ichar === -1 ? 0 : needle.charCodeAt(ichar); + while ( (c2 = this.buf[i+2]) !== c1 ) { // quick test: first character + if ( c2 === 0 && c1 === 0x2E ) { return true; } + i = this.buf[i]; // next descendant + if ( i === 0 ) { return false; } // no more descendants + } + if ( c1 === 0 ) { return true; } + ccnt = this.buf[i+3]; + if ( ccnt !== 0 ) { // cell is only one character + if ( ccnt > ichar ) { return false; } + ic = ccnt; i1 = ichar-1; i2 = i+4; + while ( ic-- && needle.charCodeAt(i1-ic) === this.buf[i2+ic] ); + if ( ic !== -1 ) { return false; } + ichar -= ccnt; + } + i = this.buf[i+1]; // next sibling + if ( i === 0 ) { + return ichar === 0 || needle.charCodeAt(ichar-1) === 0x2E; + } + } +}; + +HNTrieBuilder.prototype.HNTrie16 = function(buf, bufsz) { + this.buf = new Uint16Array(buf.slice(0, bufsz)); +}; + +HNTrieBuilder.prototype.HNTrie16.prototype.matches = function(needle) { + var ichar = needle.length, + i = 0, c1, c2, ccnt, ic, i1, i2; + for (;;) { + ichar -= 1; + c1 = ichar === -1 ? 0 : needle.charCodeAt(ichar); + while ( (c2 = this.buf[i+2]) !== c1 ) { // quick test: first character + if ( c2 === 0 && c1 === 0x2E ) { return true; } + i = this.buf[i]; // next descendant + if ( i === 0 ) { return false; } // no more descendants + } + if ( c1 === 0 ) { return true; } + ccnt = this.buf[i+3]; + if ( ccnt !== 0 ) { // cell is only one character + if ( ccnt > ichar ) { return false; } + ic = ccnt; i1 = ichar-1; i2 = i+4; + while ( ic-- && needle.charCodeAt(i1-ic) === this.buf[i2+ic] ); + if ( ic !== -1 ) { return false; } + ichar -= ccnt; + } + i = this.buf[i+1]; // next sibling + if ( i === 0 ) { + return ichar === 0 || needle.charCodeAt(ichar-1) === 0x2E; + } + } +}; + +HNTrieBuilder.prototype.HNTrie32 = function(buf, bufsz) { + this.buf = new Uint32Array(buf.slice(0, bufsz)); +}; + +HNTrieBuilder.prototype.HNTrie32.prototype.matches = function(needle) { + var ichar = needle.length, + i = 0, c1, c2, ccnt, ic, i1, i2; + for (;;) { + ichar -= 1; + c1 = ichar === -1 ? 0 : needle.charCodeAt(ichar); + while ( (c2 = this.buf[i+2]) !== c1 ) { // quick test: first character + if ( c2 === 0 && c1 === 0x2E ) { return true; } + i = this.buf[i]; // next descendant + if ( i === 0 ) { return false; } // no more descendants + } + if ( c1 === 0 ) { return true; } + ccnt = this.buf[i+3]; + if ( ccnt !== 0 ) { // cell is only one character + if ( ccnt > ichar ) { return false; } + ic = ccnt; i1 = ichar-1; i2 = i+4; + while ( ic-- && needle.charCodeAt(i1-ic) === this.buf[i2+ic] ); + if ( ic !== -1 ) { return false; } + ichar -= ccnt; + } + i = this.buf[i+1]; // next sibling + if ( i === 0 ) { + return ichar === 0 || needle.charCodeAt(ichar-1) === 0x2E; + } + } +}; + +/******************************************************************************* + + Experimenting: WebAssembly version. + Developed using this simple online tool: https://wasdk.github.io/WasmFiddle/ + + >>> start of C code + unsigned short buffer[0]; + int matches(int id, int cclen) + { + unsigned short* cc0 = &buffer[0]; + unsigned short* cc = cc0 + cclen; + unsigned short* cell0 = &buffer[512+id]; + unsigned short* cell = cell0; + unsigned short* ww; + int c1, c2, ccnt; + for (;;) { + c1 = cc <= cc0 ? 0 : *--cc; + for (;;) { + c2 = cell[2]; + if ( c2 == c1 ) { break; } + if ( c2 == 0 && c1 == 0x2E ) { return 1; } + if ( cell[0] == 0 ) { return 0; } + cell = cell0 + cell[0]; + } + if ( c1 == 0 ) { return 1; } + ccnt = cell[3]; + if ( ccnt != 0 ) { + if ( cc - ccnt < cc0 ) { return 0; } + ww = cell + 4; + while ( ccnt-- ) { + if ( *--cc != *ww++ ) { return 0; } + } + } + if ( cell[1] == 0 ) { + if ( cc == cc0 ) { return 1; } + if ( *--cc == 0x2E ) { return 1; } + return 0; + } + cell = cell0 + cell[1]; + } + } + int getLinearMemoryOffset() { + return (int)&buffer[0]; + } + <<< end of C code + + Observations: + - When growing memory, we must re-create the typed array js-side. The content + of the array is preserved by grow(). + - It's slower than the javascript version... Possible explanations: + - Call overhead: https://github.com/WebAssembly/design/issues/1120 + - Having to copy whole input string in buffer before call. + +var HNTrie16wasm = (function() { + var module; + var instance; + var memory; + var memoryOrigin = 0; + var memoryUsed = 1024; + var cbuffer; + var tbuffer; + var tbufferSize = 0; + var matchesFn; + + var init = function() { + module = new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,139,128,128,128,0,2,96,2,127,127,1,127,96,0,1,127,3,131,128,128,128,0,2,0,1,4,132,128,128,128,0,1,112,0,0,5,131,128,128,128,0,1,0,1,6,129,128,128,128,0,0,7,172,128,128,128,0,3,6,109,101,109,111,114,121,2,0,7,109,97,116,99,104,101,115,0,0,21,103,101,116,76,105,110,101,97,114,77,101,109,111,114,121,79,102,102,115,101,116,0,1,10,217,130,128,128,0,2,202,130,128,128,0,1,5,127,32,1,65,1,116,65,12,106,33,3,32,0,65,1,116,65,140,8,106,34,2,33,0,2,64,2,64,2,64,2,64,2,64,2,64,3,64,65,0,33,5,2,64,32,3,65,12,77,13,0,32,3,65,126,106,34,3,47,1,0,33,5,11,2,64,32,5,32,0,47,1,4,34,1,70,13,0,2,64,32,5,65,46,71,13,0,3,64,32,1,65,255,255,3,113,69,13,5,32,0,47,1,0,34,1,69,13,6,32,2,32,1,65,1,116,106,34,0,47,1,4,34,1,65,46,71,13,0,12,2,11,11,3,64,32,0,47,1,0,34,1,69,13,3,32,5,32,2,32,1,65,1,116,106,34,0,47,1,4,71,13,0,11,11,65,1,33,6,32,5,69,13,5,2,64,2,64,32,0,47,1,6,34,1,69,13,0,32,3,32,1,65,1,116,107,65,12,73,13,8,32,1,65,127,115,33,5,32,0,65,8,106,33,1,3,64,32,5,65,1,106,34,5,69,13,1,32,1,47,1,0,33,4,32,1,65,2,106,33,1,32,4,32,3,65,126,106,34,3,47,1,0,70,13,0,12,2,11,11,32,0,47,1,2,34,1,69,13,5,32,2,32,1,65,1,116,106,33,0,12,1,11,11,65,0,15,11,65,0,15,11,65,1,15,11,65,0,15,11,32,3,65,12,70,13,0,32,3,65,126,106,47,1,0,65,46,70,33,6,11,32,6,15,11,65,0,11,132,128,128,128,0,0,65,12,11])); + instance = new WebAssembly.Instance(module); + memory = instance.exports.memory; + memoryOrigin = instance.exports.getLinearMemoryOffset(); + cbuffer = new Uint16Array(memory.buffer, memoryOrigin, 512); + tbuffer = new Uint16Array(memory.buffer, memoryOrigin + 1024); + memoryUsed = memoryOrigin + 1024; + matchesFn = instance.exports.matches; + }; + + return { + create: function(data) { + if ( module === undefined ) { init(); } + var bytesNeeded = memoryUsed + ((data.length * 2 + 3) & ~3); + if ( bytesNeeded > memory.buffer.byteLength ) { + memory.grow((bytesNeeded - memory.buffer.byteLength + 65535) >>> 16); + cbuffer = new Uint16Array(memory.buffer, memoryOrigin, 512); + tbuffer = new Uint16Array(memory.buffer, memoryOrigin + 1024); + } + for ( var i = 0, j = tbufferSize; i < data.length; i++, j++ ) { + tbuffer[j] = data[i]; + } + var id = tbufferSize; + tbufferSize += data.length; + if ( tbufferSize & 1 ) { tbufferSize += 1; } + memoryUsed += tbufferSize * 2; + return id; + }, + reset: function() { + module = undefined; + instance = undefined; + memory = undefined; + memory.grow(1); + memoryUsed = 1024; + cbuffer = undefined; + tbuffer = undefined; + tbufferSize = 0; + }, + matches: function(id, hn) { + var len = hn.length; + if ( len > 512 ) { + hn = hn.slice(-512); + var pos = hn.indexOf('.'); + if ( pos !== 0 ) { + hn = hn.slice(pos + 1); + } + len = hn.length; + } + var needle = cbuffer, i = len; + while ( i-- ) { + needle[i] = hn.charCodeAt(i); + } + return matchesFn(id, len) === 1; + } + }; +})(); +*/ diff --git a/src/js/i18n.js b/src/js/i18n.js index c681f99959df2..c4ef90cd81a15 100644 --- a/src/js/i18n.js +++ b/src/js/i18n.js @@ -133,9 +133,7 @@ vAPI.i18n.render = function(context) { for ( i = 0; i < n; i++ ) { elem = elems[i]; text = vAPI.i18n(elem.getAttribute('data-i18n')); - if ( !text ) { - continue; - } + if ( !text ) { continue; } // TODO: remove once it's all replaced with if ( text.indexOf('{') !== -1 ) { text = text.replace(/\{\{input:([^}]+)\}\}/g, ''); @@ -148,9 +146,8 @@ vAPI.i18n.render = function(context) { for ( i = 0; i < n; i++ ) { elem = elems[i]; text = vAPI.i18n(elem.getAttribute('title')); - if ( text ) { - elem.setAttribute('title', text); - } + if ( !text ) { continue; } + elem.setAttribute('title', text); } elems = root.querySelectorAll('[placeholder]'); @@ -164,10 +161,13 @@ vAPI.i18n.render = function(context) { n = elems.length; for ( i = 0; i < n; i++ ) { elem = elems[i]; - elem.setAttribute( - 'data-tip', - vAPI.i18n(elem.getAttribute('data-i18n-tip')).replace(/
/g, '\n').replace(/\n{3,}/g, '\n\n') - ); + text = vAPI.i18n(elem.getAttribute('data-i18n-tip')) + .replace(/
/g, '\n') + .replace(/\n{3,}/g, '\n\n'); + elem.setAttribute('data-tip', text); + if ( elem.getAttribute('aria-label') === 'data-tip' ) { + elem.setAttribute('aria-label', text); + } } }; diff --git a/src/js/logger-ui-inspector.js b/src/js/logger-ui-inspector.js index 57f358d36082b..f598ec2db293b 100644 --- a/src/js/logger-ui-inspector.js +++ b/src/js/logger-ui-inspector.js @@ -32,7 +32,11 @@ var showdomButton = uDom.nodeFromId('showdom'); // Don't bother if the browser is not modern enough. -if ( typeof Map === 'undefined' || Map.polyfill || typeof WeakMap === 'undefined' ) { +if ( + typeof Map === 'undefined' || + Map.polyfill || + typeof WeakMap === 'undefined' +) { showdomButton.classList.add('disabled'); return; } @@ -40,13 +44,10 @@ if ( typeof Map === 'undefined' || Map.polyfill || typeof WeakMap === 'undefined /******************************************************************************/ var logger = self.logger; -var messaging = vAPI.messaging; - +var inspectorConnectionId; var inspectedTabId = ''; var inspectedURL = ''; var inspectedHostname = ''; -var pollTimer = null; -var fingerprint = null; var inspector = uDom.nodeFromId('domInspector'); var domTree = uDom.nodeFromId('domTree'); var tabSelector = uDom.nodeFromId('pageSelector'); @@ -55,13 +56,45 @@ var filterToIdMap = new Map(); /******************************************************************************/ +var messaging = vAPI.messaging; + +messaging.addChannelListener('loggerUI', function(msg) { + switch ( msg.what ) { + case 'connectionBroken': + if ( inspectorConnectionId === msg.id ) { + filterToIdMap.clear(); + logger.removeAllChildren(domTree); + inspectorConnectionId = undefined; + } + injectInspector(); + break; + case 'connectionMessage': + if ( msg.payload.what === 'domLayoutFull' ) { + inspectedURL = msg.payload.url; + inspectedHostname = msg.payload.hostname; + renderDOMFull(msg.payload); + } else if ( msg.payload.what === 'domLayoutIncremental' ) { + renderDOMIncremental(msg.payload); + } + break; + case 'connectionRequested': + if ( msg.from !== 'domInspector' ) { return false; } + if ( msg.tabId !== inspectedTabId ) { return false; } + filterToIdMap.clear(); + logger.removeAllChildren(domTree); + inspectorConnectionId = msg.id; + return true; + } +}); + +/******************************************************************************/ + var nodeFromDomEntry = function(entry) { var node, value; var li = document.createElement('li'); li.setAttribute('id', entry.nid); // expander/collapser - node = document.createElement('span'); - li.appendChild(node); + li.appendChild(document.createElement('span')); // selector node = document.createElement('code'); node.textContent = entry.sel; @@ -190,16 +223,14 @@ var renderDOMIncremental = function(response) { // 1 = node added // -1 = node removed var journal = response.journal; - var nodes = response.nodes; + var nodes = new Map(response.nodes); var entry, previous, li, ul; for ( var i = 0, n = journal.length; i < n; i++ ) { entry = journal[i]; // Remove node if ( entry.what === -1 ) { li = document.getElementById(entry.nid); - if ( li === null ) { - continue; - } + if ( li === null ) { continue; } patchIncremental(li, -1); li.parentNode.removeChild(li); continue; @@ -218,7 +249,7 @@ var renderDOMIncremental = function(response) { continue; } ul = previous.parentElement; - li = nodeFromDomEntry(nodes[entry.nid]); + li = nodeFromDomEntry(nodes.get(entry.nid)); ul.insertBefore(li, previous.nextElementSibling); patchIncremental(li, 1); continue; @@ -237,7 +268,7 @@ var renderDOMIncremental = function(response) { li.appendChild(ul); li.classList.add('branch'); } - li = nodeFromDomEntry(nodes[entry.nid]); + li = nodeFromDomEntry(nodes.get(entry.nid)); ul.appendChild(li); patchIncremental(li, 1); continue; @@ -350,7 +381,7 @@ var startDialog = (function() { }; })(); - var onClick = function(ev) { + var onClicked = function(ev) { var target = ev.target; // click outside the dialog proper @@ -367,83 +398,51 @@ var startDialog = (function() { } }; - var onCooked = function(entries) { - if ( Array.isArray(entries) === false ) { - return; + var showCommitted = function() { + messaging.sendTo(inspectorConnectionId, { + what: 'showCommitted', + hide: hideSelectors.join(',\n'), + unhide: unhideSelectors.join(',\n') + }); + }; + + var showInteractive = function() { + messaging.sendTo(inspectorConnectionId, { + what: 'showInteractive', + hide: hideSelectors.join(',\n'), + unhide: unhideSelectors.join(',\n') + }); + }; + + var start = function() { + hideSelectors = []; + textarea.addEventListener('input', onInputChanged); + var node; + for ( node of domTree.querySelectorAll('code.off') ) { + if ( node.classList.contains('filter') === false ) { + hideSelectors.push(selectorFromNode(node)); + } } - hideSelectors = entries; - var taValue = [], i, node; + var taValue = []; var d = new Date(); taValue.push('! ' + d.toLocaleString() + ' ' + inspectedURL); - for ( i = 0; i < entries.length; i++ ) { - taValue.push(inspectedHostname + '##' + entries[i]); + for ( var selector of hideSelectors ) { + taValue.push(inspectedHostname + '##' + selector); } var ids = new Set(), id; - var nodes = domTree.querySelectorAll('code.filter.off'); - for ( i = 0; i < nodes.length; i++ ) { - node = nodes[i]; + for ( node of domTree.querySelectorAll('code.filter.off') ) { id = node.getAttribute('data-filter-id'); - if ( ids.has(id) ) { - continue; - } + if ( ids.has(id) ) { continue; } ids.add(id); unhideSelectors.push(node.textContent); taValue.push(inspectedHostname + '#@#' + node.textContent); } textarea.value = taValue.join('\n'); document.body.appendChild(dialog); - dialog.addEventListener('click', onClick, true); + dialog.addEventListener('click', onClicked, true); showCommitted(); }; - var showCommitted = function() { - messaging.sendTo( - 'loggerUI', - { - what: 'showCommitted', - hide: hideSelectors.join(',\n'), - unhide: unhideSelectors.join(',\n') - }, - inspectedTabId, - 'domInspector' - ); - }; - - var showInteractive = function() { - messaging.sendTo( - 'loggerUI', - { - what: 'showInteractive', - hide: hideSelectors.join(',\n'), - unhide: unhideSelectors.join(',\n') - }, - inspectedTabId, - 'domInspector' - ); - }; - - var start = function() { - textarea.addEventListener('input', onInputChanged); - var node, entries = []; - var nodes = domTree.querySelectorAll('code.off'); - for ( var i = 0; i < nodes.length; i++ ) { - node = nodes[i]; - if ( node.classList.contains('filter') === false ) { - entries.push({ - nid: nidFromNode(node), - selector: selectorFromNode(node) - }); - } - } - messaging.sendTo( - 'loggerUI', - { what: 'cookFilters', entries: entries }, - inspectedTabId, - 'domInspector', - onCooked - ); - }; - var stop = function() { if ( inputTimer !== null ) { clearTimeout(inputTimer); @@ -453,7 +452,7 @@ var startDialog = (function() { hideSelectors = []; unhideSelectors = []; textarea.removeEventListener('input', onInputChanged); - dialog.removeEventListener('click', onClick, true); + dialog.removeEventListener('click', onClicked, true); document.body.removeChild(dialog); }; @@ -462,12 +461,10 @@ var startDialog = (function() { /******************************************************************************/ -var onClick = function(ev) { +var onClicked = function(ev) { ev.stopPropagation(); - if ( inspectedTabId === '' ) { - return; - } + if ( inspectedTabId === '' ) { return; } var target = ev.target; var parent = target.parentElement; @@ -479,30 +476,28 @@ var onClick = function(ev) { parent.classList.contains('branch') && target === parent.firstElementChild ) { - target.parentElement.classList.toggle('show'); + var state = parent.classList.toggle('show'); + if ( !state ) { + for ( var node of parent.querySelectorAll('.branch') ) { + node.classList.remove('show'); + } + } return; } // Not a node or filter - if ( target.localName !== 'code' ) { - return; - } + if ( target.localName !== 'code' ) { return; } // Toggle cosmetic filter if ( target.classList.contains('filter') ) { - messaging.sendTo( - 'loggerUI', - { - what: 'toggleFilter', - original: false, - target: target.classList.toggle('off'), - selector: selectorFromNode(target), - filter: selectorFromFilter(target), - nid: '' - }, - inspectedTabId, - 'domInspector' - ); + messaging.sendTo(inspectorConnectionId, { + what: 'toggleFilter', + original: false, + target: target.classList.toggle('off'), + selector: selectorFromNode(target), + filter: selectorFromFilter(target), + nid: nidFromNode(target) + }); uDom('[data-filter-id="' + target.getAttribute('data-filter-id') + '"]', inspector).toggleClass( 'off', target.classList.contains('off') @@ -510,18 +505,13 @@ var onClick = function(ev) { } // Toggle node else { - messaging.sendTo( - 'loggerUI', - { - what: 'toggleNodes', - original: true, - target: target.classList.toggle('off') === false, - selector: selectorFromNode(target), - nid: nidFromNode(target) - }, - inspectedTabId, - 'domInspector' - ); + messaging.sendTo(inspectorConnectionId, { + what: 'toggleNodes', + original: true, + target: target.classList.toggle('off') === false, + selector: selectorFromNode(target), + nid: nidFromNode(target) + }); } var cantCreate = domTree.querySelector('.off') === null; @@ -537,38 +527,25 @@ var onMouseOver = (function() { var timerHandler = function() { mouseoverTimer = null; - messaging.sendTo( - 'loggerUI', - { - what: 'highlightOne', - selector: selectorFromNode(mouseoverTarget), - nid: nidFromNode(mouseoverTarget), - scrollTo: true - }, - inspectedTabId, - 'domInspector' - ); + messaging.sendTo(inspectorConnectionId, { + what: 'highlightOne', + selector: selectorFromNode(mouseoverTarget), + nid: nidFromNode(mouseoverTarget), + scrollTo: true + }); }; return function(ev) { - if ( inspectedTabId === '' ) { - return; - } + if ( inspectedTabId === '' ) { return; } // Convenience: skip real-time highlighting if shift key is pressed. - if ( ev.shiftKey ) { - return; - } + if ( ev.shiftKey ) { return; } // Find closest `li` var target = ev.target; while ( target !== null ) { - if ( target.localName === 'li' ) { - break; - } + if ( target.localName === 'li' ) { break; } target = target.parentElement; } - if ( target === mouseoverTarget ) { - return; - } + if ( target === mouseoverTarget ) { return; } mouseoverTarget = target; if ( mouseoverTimer === null ) { mouseoverTimer = vAPI.setTimeout(timerHandler, 50); @@ -579,121 +556,33 @@ var onMouseOver = (function() { /******************************************************************************/ var currentTabId = function() { - if ( showdomButton.classList.contains('active') === false ) { - return ''; - } + if ( showdomButton.classList.contains('active') === false ) { return ''; } var tabId = logger.tabIdFromClassName(tabSelector.value) || ''; return tabId !== 'bts' ? tabId : ''; }; /******************************************************************************/ -var fetchDOMAsync = (function() { - var onFetched = function(response) { - if ( !response || currentTabId() !== inspectedTabId ) { - shutdownInspector(); - injectInspectorAsync(250); - return; - } - - switch ( response.status ) { - case 'full': - renderDOMFull(response); - fingerprint = response.fingerprint; - inspectedURL = response.url; - inspectedHostname = response.hostname; - break; - - case 'incremental': - renderDOMIncremental(response); - break; - - case 'nochange': - case 'busy': - break; - - default: - break; - } - - fetchDOMAsync(); - }; - - var onTimeout = function() { - pollTimer = null; - messaging.sendTo( - 'loggerUI', - { - what: 'domLayout', - fingerprint: fingerprint - }, - inspectedTabId, - 'domInspector', - onFetched - ); - }; - - // Poll for DOM layout data every ~2 seconds at most - return function(delay) { - if ( pollTimer === null ) { - pollTimer = vAPI.setTimeout(onTimeout, delay || 2003); - } - }; -})(); - -/******************************************************************************/ - var injectInspector = function() { var tabId = currentTabId(); - // No valid tab, go back - if ( tabId === '' ) { - injectInspectorAsync(); - return; - } + if ( tabId === '' ) { return; } inspectedTabId = tabId; - fingerprint = null; - messaging.send( - 'loggerUI', - { - what: 'scriptlet', - tabId: tabId, - scriptlet: 'dom-inspector' - } - ); - fetchDOMAsync(250); -}; - -/******************************************************************************/ - -var injectInspectorAsync = function(delay) { - if ( pollTimer !== null ) { - return; - } - if ( showdomButton.classList.contains('active') === false ) { - return; - } - pollTimer = vAPI.setTimeout(function() { - pollTimer = null; - injectInspector(); - }, delay || 1001); + messaging.send('loggerUI', { + what: 'scriptlet', + tabId: tabId, + scriptlet: 'dom-inspector' + }); }; /******************************************************************************/ var shutdownInspector = function() { - if ( inspectedTabId !== '' ) { - messaging.sendTo( - 'loggerUI', - { what: 'shutdown' }, - inspectedTabId, - 'domInspector' - ); + if ( inspectorConnectionId !== undefined ) { + messaging.disconnectFrom(inspectorConnectionId); + inspectorConnectionId = undefined; } logger.removeAllChildren(domTree); - if ( pollTimer !== null ) { - clearTimeout(pollTimer); - pollTimer = null; - } + inspector.classList.add('vCompact'); inspectedTabId = ''; }; @@ -702,34 +591,38 @@ var shutdownInspector = function() { var onTabIdChanged = function() { if ( inspectedTabId !== currentTabId() ) { shutdownInspector(); - injectInspectorAsync(250); + injectInspector(); + } +}; + +/******************************************************************************/ + +var toggleVCompactView = function() { + var state = !inspector.classList.toggle('vCompact'); + var branches = document.querySelectorAll('#domInspector li.branch'); + for ( var branch of branches ) { + branch.classList.toggle('show', state); } }; +var toggleHCompactView = function() { + inspector.classList.toggle('hCompact'); +}; + /******************************************************************************/ var toggleHighlightMode = function() { - messaging.sendTo( - 'loggerUI', - { - what: 'highlightMode', - invert: uDom.nodeFromSelector('#domInspector .permatoolbar .highlightMode').classList.toggle('invert') - }, - inspectedTabId, - 'domInspector' - ); + messaging.sendTo(inspectorConnectionId, { + what: 'highlightMode', + invert: uDom.nodeFromSelector('#domInspector .permatoolbar .highlightMode').classList.toggle('invert') + }); }; /******************************************************************************/ var revert = function() { uDom('#domTree .off').removeClass('off'); - messaging.sendTo( - 'loggerUI', - { what: 'resetToggledNodes' }, - inspectedTabId, - 'domInspector' - ); + messaging.sendTo(inspectorConnectionId, { what: 'resetToggledNodes' }); inspector.querySelector('.permatoolbar .revert').classList.add('disabled'); inspector.querySelector('.permatoolbar .commit').classList.add('disabled'); }; @@ -739,8 +632,10 @@ var revert = function() { var toggleOn = function() { window.addEventListener('beforeunload', toggleOff); tabSelector.addEventListener('change', onTabIdChanged); - domTree.addEventListener('click', onClick, true); + domTree.addEventListener('click', onClicked, true); domTree.addEventListener('mouseover', onMouseOver, true); + uDom.nodeFromSelector('#domInspector .vCompactToggler').addEventListener('click', toggleVCompactView); + uDom.nodeFromSelector('#domInspector .hCompactToggler').addEventListener('click', toggleHCompactView); uDom.nodeFromSelector('#domInspector .permatoolbar .highlightMode').addEventListener('click', toggleHighlightMode); uDom.nodeFromSelector('#domInspector .permatoolbar .revert').addEventListener('click', revert); uDom.nodeFromSelector('#domInspector .permatoolbar .commit').addEventListener('click', startDialog); @@ -753,8 +648,10 @@ var toggleOff = function() { shutdownInspector(); window.removeEventListener('beforeunload', toggleOff); tabSelector.removeEventListener('change', onTabIdChanged); - domTree.removeEventListener('click', onClick, true); + domTree.removeEventListener('click', onClicked, true); domTree.removeEventListener('mouseover', onMouseOver, true); + uDom.nodeFromSelector('#domInspector .vCompactToggler').removeEventListener('click', toggleVCompactView); + uDom.nodeFromSelector('#domInspector .hCompactToggler').removeEventListener('click', toggleHCompactView); uDom.nodeFromSelector('#domInspector .permatoolbar .highlightMode').removeEventListener('click', toggleHighlightMode); uDom.nodeFromSelector('#domInspector .permatoolbar .revert').removeEventListener('click', revert); uDom.nodeFromSelector('#domInspector .permatoolbar .commit').removeEventListener('click', startDialog); diff --git a/src/js/logger-ui.js b/src/js/logger-ui.js index c29565061ff10..218f44fb31bb3 100644 --- a/src/js/logger-ui.js +++ b/src/js/logger-ui.js @@ -97,6 +97,7 @@ var staticFilterTypes = { 'css': 'stylesheet', 'frame': 'subdocument', 'ping': 'other', + 'object_subrequest': 'object', 'xhr': 'xmlhttprequest' }; @@ -411,12 +412,8 @@ var synchronizeTabIds = function(newTabIds) { var rowVoided = false; var trs; for ( var tabId in oldTabIds ) { - if ( oldTabIds.hasOwnProperty(tabId) === false ) { - continue; - } - if ( newTabIds.hasOwnProperty(tabId) ) { - continue; - } + if ( oldTabIds.hasOwnProperty(tabId) === false ) { continue; } + if ( newTabIds.hasOwnProperty(tabId) ) { continue; } // Mark or remove voided rows trs = uDom('.tab_' + tabId); if ( autoDeleteVoidRows ) { @@ -439,9 +436,7 @@ var synchronizeTabIds = function(newTabIds) { var option; for ( var i = 0, j = 2; i < tabIds.length; i++ ) { tabId = tabIds[i]; - if ( tabId === noTabId ) { - continue; - } + if ( tabId === noTabId ) { continue; } option = select.options[j]; if ( !option ) { option = document.createElement('option'); @@ -1514,8 +1509,8 @@ var cleanBuffer = function() { /******************************************************************************/ -var toggleCompactView = function() { - uDom.nodeFromId('netInspector').classList.toggle('compactView'); +var toggleVCompactView = function() { + uDom.nodeFromId('netInspector').classList.toggle('vCompact'); }; /******************************************************************************/ @@ -1645,7 +1640,7 @@ uDom('#pageSelector').on('change', pageSelectorChanged); uDom('#refresh').on('click', reloadTab); uDom('#showdom').on('click', toggleInspectors); -uDom('#compactViewToggler').on('click', toggleCompactView); +uDom('#netInspector .vCompactToggler').on('click', toggleVCompactView); uDom('#clean').on('click', cleanBuffer); uDom('#clear').on('click', clearBuffer); uDom('#maxEntries').on('change', onMaxEntriesChanged); diff --git a/src/js/logger.js b/src/js/logger.js index 700521ab5eada..37da162a75d33 100644 --- a/src/js/logger.js +++ b/src/js/logger.js @@ -1,7 +1,7 @@ /******************************************************************************* uBlock - a browser extension to block requests. - Copyright (C) 2015 Raymond Hill + Copyright (C) 2015-2017 Raymond Hill This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,161 +26,67 @@ µBlock.logger = (function() { -/******************************************************************************/ -/******************************************************************************/ - -var LogEntry = function(args) { - this.init(args); -}; - -/******************************************************************************/ - -LogEntry.prototype.init = function(args) { - this.tstamp = Date.now(); - this.tab = args[0] || ''; - this.cat = args[1] || ''; - this.d0 = args[2]; - this.d1 = args[3]; - this.d2 = args[4]; - this.d3 = args[5]; - this.d4 = args[6]; -}; - -/******************************************************************************/ -/******************************************************************************/ - -var LogBuffer = function() { - this.lastReadTime = 0; - this.size = 50; - this.buffer = new Array(this.size); - this.readPtr = 0; - this.writePtr = 0; -}; - -/******************************************************************************/ - -LogBuffer.prototype.clearBuffer = function(beg, end) { - for ( var i = beg; i < end; i++ ) { - this.buffer[i] = null; - } -}; - -/******************************************************************************/ - -LogBuffer.prototype.writeOne = function(args) { - // Reusing log entry = less memory churning - var entry = this.buffer[this.writePtr]; - if ( entry instanceof LogEntry === false ) { - this.buffer[this.writePtr] = new LogEntry(args); - } else { - entry.init(args); - } - this.writePtr += 1; - if ( this.writePtr === this.size ) { - this.writePtr = 0; - } - // Grow the buffer between 1.5x-2x the current size - if ( this.writePtr === this.readPtr ) { - var toMove = this.buffer.slice(0, this.writePtr); - // https://github.com/gorhill/uBlock/issues/391 - // "The slice() method returns a shallow copy of a portion of an - // "array into a new array object." - // "shallow" => since we reuse entries, we need to remove the copied - // entries to prevent single instance of LogEntry being used in - // more than one slot. - this.clearBuffer(0, this.writePtr); - var minSize = Math.ceil(this.size * 1.5); - this.size += toMove.length; - if ( this.size < minSize ) { - this.buffer = this.buffer.concat(toMove, new Array(minSize - this.size)); - this.writePtr = this.size; - } else { - this.buffer = this.buffer.concat(toMove); - this.writePtr = 0; + var LogEntry = function(args) { + this.init(args); + }; + + LogEntry.prototype.init = function(args) { + this.tstamp = Date.now(); + this.tab = args[0] || ''; + this.cat = args[1] || ''; + this.d0 = args[2]; + this.d1 = args[3]; + this.d2 = args[4]; + this.d3 = args[5]; + this.d4 = args[6]; + }; + + var buffer = null; + var lastReadTime = 0; + var writePtr = 0; + + // After 60 seconds without being read, a buffer will be considered + // unused, and thus removed from memory. + var logBufferObsoleteAfter = 60 * 1000; + + var janitor = function() { + if ( + buffer !== null && + lastReadTime < (Date.now() - logBufferObsoleteAfter) + ) { + buffer = null; + writePtr = 0; + vAPI.messaging.broadcast({ what: 'loggerDisabled' }); } - this.size = this.buffer.length; - } -}; - -/******************************************************************************/ - -LogBuffer.prototype.readAll = function() { - var out; - if ( this.readPtr < this.writePtr ) { - out = this.buffer.slice(this.readPtr, this.writePtr); - } else if ( this.writePtr < this.readPtr ) { - out = this.buffer.slice(this.readPtr).concat(this.buffer.slice(0, this.writePtr)); - } else { - out = []; - } - this.readPtr = this.writePtr; - this.lastReadTime = Date.now(); - return out; -}; - -/******************************************************************************/ -/******************************************************************************/ - -// Tab id to log buffer instances -var logBuffer = null; - -// After 60 seconds without being read, a buffer will be considered unused, and -// thus removed from memory. -var logBufferObsoleteAfter = 60 * 1000; - -/******************************************************************************/ - -var janitor = function() { - if ( - logBuffer !== null && - logBuffer.lastReadTime < (Date.now() - logBufferObsoleteAfter) - ) { - api.writeOne = writeOneNoop; - logBuffer = null; - } - if ( logBuffer !== null ) { - vAPI.setTimeout(janitor, logBufferObsoleteAfter); - } -}; - -/******************************************************************************/ - -var writeOneNoop = function() { -}; - -var writeOne = function() { - logBuffer.writeOne(arguments); -}; - -/******************************************************************************/ - -var readAll = function() { - if ( logBuffer === null ) { - api.writeOne = writeOne; - logBuffer = new LogBuffer(); - vAPI.setTimeout(janitor, logBufferObsoleteAfter); - } - return logBuffer.readAll(); -}; - -/******************************************************************************/ - -var isEnabled = function() { - return logBuffer !== null; -}; - -/******************************************************************************/ - -var api = { - writeOne: writeOneNoop, - readAll: readAll, - isEnabled: isEnabled -}; - -return api; - -/******************************************************************************/ -/******************************************************************************/ + if ( buffer !== null ) { + vAPI.setTimeout(janitor, logBufferObsoleteAfter); + } + }; + + return { + writeOne: function() { + if ( buffer === null ) { return; } + if ( writePtr === buffer.length ) { + buffer.push(new LogEntry(arguments)); + } else { + buffer[writePtr].init(arguments); + } + writePtr += 1; + }, + readAll: function() { + if ( buffer === null ) { + buffer = []; + vAPI.setTimeout(janitor, logBufferObsoleteAfter); + } + var out = buffer.slice(0, writePtr); + writePtr = 0; + lastReadTime = Date.now(); + return out; + }, + isEnabled: function() { + return buffer !== null; + } + }; })(); diff --git a/src/js/messaging.js b/src/js/messaging.js index f79a18ac8773d..29c783bd46275 100644 --- a/src/js/messaging.js +++ b/src/js/messaging.js @@ -88,7 +88,10 @@ var onMessage = function(request, sender, callback) { break; } - var tabId = sender && sender.tab ? sender.tab.id : 0; + // The concatenation with the empty string ensure that the resulting value + // is a string. This is important since tab id values are assumed to be + // of string type. + var tabId = sender && sender.tab ? '' + sender.tab.id : 0; // Sync var response; @@ -104,8 +107,6 @@ var onMessage = function(request, sender, callback) { case 'cosmeticFiltersInjected': µb.cosmeticFilteringEngine.addToSelectorCache(request); - /* falls through */ - case 'cosmeticFiltersActivated': // Net-based cosmetic filters are of no interest for logging purpose. if ( µb.logger.isEnabled() && request.type !== 'net' ) { µb.logCosmeticFilters(tabId); @@ -137,7 +138,7 @@ var onMessage = function(request, sender, callback) { case 'launchElementPicker': // Launched from some auxiliary pages, clear context menu coords. - µb.mouseX = µb.mouseY = -1; + µb.mouseEventRegister.x = µb.mouseEventRegister.y = -1; µb.elementPickerExec(request.tabId, request.targetURL, request.zap); break; @@ -146,9 +147,10 @@ var onMessage = function(request, sender, callback) { break; case 'mouseClick': - µb.mouseX = request.x; - µb.mouseY = request.y; - µb.mouseURL = request.url; + µb.mouseEventRegister.tabId = tabId; + µb.mouseEventRegister.x = request.x; + µb.mouseEventRegister.y = request.y; + µb.mouseEventRegister.url = request.url; break; case 'reloadTab': @@ -452,56 +454,6 @@ vAPI.messaging.listen('popupPanel', onMessage); /******************************************************************************/ -var µb = µBlock; - -/******************************************************************************/ - -var tagNameToRequestTypeMap = { - 'embed': 'object', - 'iframe': 'sub_frame', - 'img': 'image', - 'object': 'object' -}; - -/******************************************************************************/ - -// Evaluate many requests. - -// https://github.com/gorhill/uBlock/issues/1782 -// Treat `data:` URIs as 1st-party resources. - -var filterRequests = function(pageStore, details) { - var requests = details.requests; - if ( µb.userSettings.collapseBlocked === false ) { - return requests; - } - - //console.debug('messaging.js/contentscript-end.js: processing %d requests', requests.length); - - var hostnameFromURI = µb.URI.hostnameFromURI, - redirectEngine = µb.redirectEngine, - punycodeURL = vAPI.punycodeURL; - - // Create evaluation context - var context = pageStore.createContextFromFrameHostname(details.pageHostname), - request, - i = requests.length; - while ( i-- ) { - request = requests[i]; - context.requestURL = punycodeURL(request.url); - context.requestHostname = hostnameFromURI(context.requestURL); - context.requestType = tagNameToRequestTypeMap[request.tag]; - if ( pageStore.filterRequest(context) !== 1 ) { continue; } - // Redirected? (We do not hide redirected resources.) - request.collapse = redirectEngine.matches(context) !== true; - } - - context.dispose(); - return requests; -}; - -/******************************************************************************/ - var onMessage = function(request, sender, callback) { // Async switch ( request.what ) { @@ -510,42 +462,55 @@ var onMessage = function(request, sender, callback) { } // Sync - var response; + var µb = µBlock, + response, + tabId, + pageStore; - var pageStore; if ( sender && sender.tab ) { - pageStore = µb.pageStoreFromTabId(sender.tab.id); + tabId = sender.tab.id; + pageStore = µb.pageStoreFromTabId(tabId); } switch ( request.what ) { + case 'getCollapsibleBlockedRequests': + response = { + id: request.id, + hash: request.hash, + netSelectorCacheCountMax: + µb.cosmeticFilteringEngine.netSelectorCacheCountMax + }; + if ( + µb.userSettings.collapseBlocked && + pageStore && + pageStore.getNetFilteringSwitch() + ) { + pageStore.getBlockedResources(request, response); + } + break; + case 'retrieveContentScriptParameters': if ( pageStore && pageStore.getNetFilteringSwitch() ) { response = { - loggerEnabled: µb.logger.isEnabled(), collapseBlocked: µb.userSettings.collapseBlocked, - noCosmeticFiltering: µb.cosmeticFilteringEngine.acceptedCount === 0 || pageStore.noCosmeticFiltering === true, - noGenericCosmeticFiltering: pageStore.noGenericCosmeticFiltering === true + noCosmeticFiltering: pageStore.noCosmeticFiltering === true, + noGenericCosmeticFiltering: + pageStore.noGenericCosmeticFiltering === true }; - response.specificCosmeticFilters = µb.cosmeticFilteringEngine.retrieveDomainSelectors( - request, - response.noCosmeticFiltering - ); + response.specificCosmeticFilters = + µb.cosmeticFilteringEngine + .retrieveDomainSelectors(request, sender, response); + if ( request.isRootFrame && µb.logger.isEnabled() ) { + µb.logCosmeticFilters(tabId); + } } break; case 'retrieveGenericCosmeticSelectors': if ( pageStore && pageStore.getGenericCosmeticFilteringSwitch() ) { response = { - result: µb.cosmeticFilteringEngine.retrieveGenericSelectors(request) - }; - } - break; - - case 'filterRequests': - if ( pageStore && pageStore.getNetFilteringSwitch() ) { - response = { - result: filterRequests(pageStore, request), - netSelectorCacheCountMax: µb.cosmeticFilteringEngine.netSelectorCacheCountMax + result: µb.cosmeticFilteringEngine + .retrieveGenericSelectors(request, sender) }; } break; @@ -604,15 +569,14 @@ var onMessage = function(request, sender, callback) { callback({ frameContent: this.responseText.replace(reStrings, replacer), target: µb.epickerTarget, - clientX: µb.mouseX, - clientY: µb.mouseY, + clientX: µb.mouseEventRegister.x, + clientY: µb.mouseEventRegister.y, zap: µb.epickerZap, eprom: µb.epickerEprom }); µb.epickerTarget = ''; - µb.mouseX = -1; - µb.mouseY = -1; + µb.mouseEventRegister.x = µb.mouseEventRegister.y = -1; }; xhr.send(); return; diff --git a/src/js/pagestore.js b/src/js/pagestore.js index 2d5f85a220d11..b0b3c5abbf9e9 100644 --- a/src/js/pagestore.js +++ b/src/js/pagestore.js @@ -1,7 +1,7 @@ /******************************************************************************* uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 Raymond Hill + Copyright (C) 2014-2017 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 @@ -43,56 +43,19 @@ var µb = µBlock; /******************************************************************************/ // To mitigate memory churning -var netFilteringResultCacheEntryJunkyard = []; -var netFilteringResultCacheEntryJunkyardMax = 200; +var netFilteringCacheJunkyard = [], + netFilteringCacheJunkyardMax = 10; /******************************************************************************/ -var NetFilteringResultCacheEntry = function(result, type, logData) { - this.init(result, type, logData); -}; - -/******************************************************************************/ - -NetFilteringResultCacheEntry.prototype.init = function(result, type, logData) { - this.result = result; - this.type = type; - this.time = Date.now(); - this.logData = logData; - return this; -}; - -/******************************************************************************/ - -NetFilteringResultCacheEntry.prototype.dispose = function() { - this.result = this.type = ''; - this.logData = undefined; - if ( netFilteringResultCacheEntryJunkyard.length < netFilteringResultCacheEntryJunkyardMax ) { - netFilteringResultCacheEntryJunkyard.push(this); - } -}; - -/******************************************************************************/ - -NetFilteringResultCacheEntry.factory = function(result, type, logData) { - if ( netFilteringResultCacheEntryJunkyard.length ) { - return netFilteringResultCacheEntryJunkyard.pop().init(result, type, logData); - } - return new NetFilteringResultCacheEntry(result, type, logData); +var NetFilteringResultCache = function() { + this.boundPruneAsyncCallback = this.pruneAsyncCallback.bind(this); + this.init(); }; -/******************************************************************************/ /******************************************************************************/ -// To mitigate memory churning -var netFilteringCacheJunkyard = []; -var netFilteringCacheJunkyardMax = 10; - -/******************************************************************************/ - -var NetFilteringResultCache = function() { - this.init(); -}; +NetFilteringResultCache.prototype.shelfLife = 15 * 1000; /******************************************************************************/ @@ -109,18 +72,16 @@ NetFilteringResultCache.factory = function() { /******************************************************************************/ NetFilteringResultCache.prototype.init = function() { - this.urls = Object.create(null); - this.count = 0; - this.shelfLife = 15 * 1000; + this.blocked = new Map(); + this.results = new Map(); + this.hash = 0; this.timer = null; - this.boundPruneAsyncCallback = this.pruneAsyncCallback.bind(this); }; /******************************************************************************/ NetFilteringResultCache.prototype.dispose = function() { this.empty(); - this.boundPruneAsyncCallback = null; if ( netFilteringCacheJunkyard.length < netFilteringCacheJunkyardMax ) { netFilteringCacheJunkyard.push(this); } @@ -129,33 +90,42 @@ NetFilteringResultCache.prototype.dispose = function() { /******************************************************************************/ -NetFilteringResultCache.prototype.add = function(context, result, logData) { - var url = context.requestURL, - type = context.requestType, - key = type + ' ' + url, - entry = this.urls[key]; - if ( entry !== undefined ) { - entry.result = result; - entry.type = type; - entry.time = Date.now(); - entry.logData = logData; - return; +NetFilteringResultCache.prototype.rememberResult = function(context, result, logData) { + if ( this.results.size === 0 ) { + this.pruneAsync(); } - this.urls[key] = NetFilteringResultCacheEntry.factory(result, type, logData); - if ( this.count === 0 ) { + var key = context.pageHostname + ' ' + context.requestType + ' ' + context.requestURL; + this.results.set(key, { + result: result, + logData: logData, + tstamp: Date.now() + }); + if ( result !== 1 ) { return; } + var now = Date.now(); + this.blocked.set(key, now); + this.hash = now; +}; + +/******************************************************************************/ + +NetFilteringResultCache.prototype.rememberBlock = function(details) { + if ( this.blocked.size === 0 ) { this.pruneAsync(); } - this.count += 1; + var now = Date.now(); + this.blocked.set( + details.pageHostname + ' ' + details.requestType + ' ' + details.requestURL, + now + ); + this.hash = now; }; /******************************************************************************/ NetFilteringResultCache.prototype.empty = function() { - for ( var key in this.urls ) { - this.urls[key].dispose(); - } - this.urls = Object.create(null); - this.count = 0; + this.blocked.clear(); + this.results.clear(); + this.hash = 0; if ( this.timer !== null ) { clearTimeout(this.timer); this.timer = null; @@ -164,51 +134,54 @@ NetFilteringResultCache.prototype.empty = function() { /******************************************************************************/ -NetFilteringResultCache.prototype.compareEntries = function(a, b) { - return this.urls[b].time - this.urls[a].time; +NetFilteringResultCache.prototype.pruneAsync = function() { + if ( this.timer === null ) { + this.timer = vAPI.setTimeout(this.boundPruneAsyncCallback, this.shelfLife * 2); + } }; -/******************************************************************************/ - -NetFilteringResultCache.prototype.prune = function() { - var keys = Object.keys(this.urls).sort(this.compareEntries.bind(this)); - var obsolete = Date.now() - this.shelfLife; - var key, entry; - var i = keys.length; - while ( i-- ) { - key = keys[i]; - entry = this.urls[key]; - if ( entry.time > obsolete ) { - break; +NetFilteringResultCache.prototype.pruneAsyncCallback = function() { + this.timer = null; + var obsolete = Date.now() - this.shelfLife, + entry; + for ( entry of this.blocked ) { + if ( entry[1] <= obsolete ) { + this.results.delete(entry[0]); + this.blocked.delete(entry[0]); } - entry.dispose(); - delete this.urls[key]; } - this.count -= keys.length - i - 1; - if ( this.count > 0 ) { + for ( entry of this.results ) { + if ( entry[1].tstamp <= obsolete ) { + this.results.delete(entry[0]); + } + } + if ( this.blocked.size !== 0 || this.results.size !== 0 ) { this.pruneAsync(); } }; -// https://www.youtube.com/watch?v=hcVpbsDyOhM - /******************************************************************************/ -NetFilteringResultCache.prototype.pruneAsync = function() { - if ( this.timer === null ) { - this.timer = vAPI.setTimeout(this.boundPruneAsyncCallback, this.shelfLife * 2); - } -}; - -NetFilteringResultCache.prototype.pruneAsyncCallback = function() { - this.timer = null; - this.prune(); +NetFilteringResultCache.prototype.lookupResult = function(context) { + return this.results.get( + context.pageHostname + ' ' + + context.requestType + ' ' + + context.requestURL + ); }; /******************************************************************************/ -NetFilteringResultCache.prototype.lookup = function(context) { - return this.urls[context.requestType + ' ' + context.requestURL] || undefined; +NetFilteringResultCache.prototype.lookupAllBlocked = function(hostname) { + var result = [], + pos; + for ( var entry of this.blocked ) { + pos = entry[0].indexOf(' '); + if ( entry[0].slice(0, pos) === hostname ) { + result[result.length] = entry[0].slice(pos + 1); + } + } + return result; }; /******************************************************************************/ @@ -267,8 +240,8 @@ var pageStoreJunkyardMax = 10; /******************************************************************************/ -var PageStore = function(tabId) { - this.init(tabId); +var PageStore = function(tabId, context) { + this.init(tabId, context); this.journal = []; this.journalTimer = null; this.journalLastCommitted = this.journalLastUncommitted = undefined; @@ -277,19 +250,23 @@ var PageStore = function(tabId) { /******************************************************************************/ -PageStore.factory = function(tabId) { +PageStore.factory = function(tabId, context) { var entry = pageStoreJunkyard.pop(); if ( entry === undefined ) { - entry = new PageStore(tabId); + entry = new PageStore(tabId, context); } else { - entry.init(tabId); + entry.init(tabId, context); } return entry; }; /******************************************************************************/ -PageStore.prototype.init = function(tabId) { +// https://github.com/gorhill/uBlock/issues/3201 +// The context is used to determine whether we report behavior change to the +// logger. + +PageStore.prototype.init = function(tabId, context) { var tabContext = µb.tabContextManager.mustLookup(tabId); this.tabId = tabId; @@ -319,8 +296,15 @@ PageStore.prototype.init = function(tabId) { this.netFilteringCache = NetFilteringResultCache.factory(); this.internalRedirectionCount = 0; - this.noCosmeticFiltering = µb.hnSwitches.evaluateZ('no-cosmetic-filtering', tabContext.rootHostname) === true; - if ( this.noCosmeticFiltering && µb.logger.isEnabled() ) { + this.noCosmeticFiltering = µb.hnSwitches.evaluateZ( + 'no-cosmetic-filtering', + tabContext.rootHostname + ) === true; + if ( + this.noCosmeticFiltering && + µb.logger.isEnabled() && + context === 'tabCommitted' + ) { µb.logger.writeOne( tabId, 'cosmetic', @@ -341,7 +325,11 @@ PageStore.prototype.init = function(tabId) { 'generichide' ); this.noGenericCosmeticFiltering = result === 2; - if ( result !== 0 && µb.logger.isEnabled() ) { + if ( + result !== 0 && + µb.logger.isEnabled() && + context === 'tabCommitted' + ) { µb.logger.writeOne( tabId, 'net', @@ -387,7 +375,7 @@ PageStore.prototype.reuse = function(context) { } this.disposeFrameStores(); this.netFilteringCache = this.netFilteringCache.dispose(); - this.init(this.tabId); + this.init(this.tabId, context); return this; }; @@ -512,10 +500,10 @@ PageStore.prototype.injectLargeMediaElementScriptlet = function() { µb.contextMenu.update(this.tabId); }; -PageStore.prototype.temporarilyAllowLargeMediaElements = function() { +PageStore.prototype.temporarilyAllowLargeMediaElements = function(state) { this.largeMediaCount = 0; µb.contextMenu.update(this.tabId); - this.allowLargeMediaElementsUntil = Date.now() + 86400000; + this.allowLargeMediaElementsUntil = state ? Date.now() + 86400000 : 0; µb.scriptlets.injectDeep(this.tabId, 'load-large-media-all'); }; @@ -610,24 +598,28 @@ PageStore.prototype.journalProcess = function(fromTimer) { PageStore.prototype.filterRequest = function(context) { this.logData = undefined; + if ( this.getNetFilteringSwitch() === false ) { + return 0; + } + var requestType = context.requestType; - // We want to short-term cache filtering results of collapsible types, - // because they are likely to be reused, from network request handler and - // from content script handler. - if ( 'image media object sub_frame'.indexOf(requestType) === -1 ) { - return this.filterRequestNoCache(context); + if ( requestType === 'csp_report' && this.filterCSPReport(context) === 1 ) { + return 1; } - if ( this.getNetFilteringSwitch() === false ) { - this.netFilteringCache.add(context, 0); - return 0; + if ( requestType.endsWith('font') && this.filterFont(context) === 1 ) { + return 1; } - var entry = this.netFilteringCache.lookup(context); - if ( entry !== undefined ) { - this.logData = entry.logData; - return entry.result; + var cacheableResult = this.cacheableResults[requestType] === true; + + if ( cacheableResult ) { + var entry = this.netFilteringCache.lookupResult(context); + if ( entry !== undefined ) { + this.logData = entry.logData; + return entry.result; + } } // Dynamic URL filtering. @@ -638,13 +630,13 @@ PageStore.prototype.filterRequest = function(context) { // Dynamic hostname/type filtering. if ( result === 0 && µb.userSettings.advancedUserEnabled ) { - result = µb.sessionFirewall.evaluateCellZY( context.rootHostname, context.requestHostname, requestType); + result = µb.sessionFirewall.evaluateCellZY(context.rootHostname, context.requestHostname, requestType); if ( result !== 0 && result !== 3 && µb.logger.isEnabled() ) { this.logData = µb.sessionFirewall.toLogData(); - } + } } - // Static filtering: lowest filtering precedence. + // Static filtering has lowest precedence. if ( result === 0 || result === 3 ) { result = µb.staticNetFilteringEngine.matchString(context); if ( result !== 0 && µb.logger.isEnabled() ) { @@ -652,11 +644,69 @@ PageStore.prototype.filterRequest = function(context) { } } - this.netFilteringCache.add(context, result, this.logData); + if ( cacheableResult ) { + this.netFilteringCache.rememberResult(context, result, this.logData); + } else if ( result === 1 && this.collapsibleResources[requestType] === true ) { + this.netFilteringCache.rememberBlock(context, true); + } return result; }; +PageStore.prototype.cacheableResults = { + sub_frame: true +}; + +PageStore.prototype.collapsibleResources = { + image: true, + media: true, + object: true, + sub_frame: true +}; + +/******************************************************************************/ + +PageStore.prototype.filterCSPReport = function(context) { + if ( µb.hnSwitches.evaluateZ('no-csp-reports', context.requestHostname) ) { + if ( µb.logger.isEnabled() ) { + this.logData = µb.hnSwitches.toLogData(); + } + return 1; + } + // https://github.com/gorhill/uBlock/issues/3140 + // Special handling of CSP reports if and only if these can't be filtered + // natively. + if ( + vAPI.net.nativeCSPReportFiltering !== true && + this.internalRedirectionCount !== 0 + ) { + if ( µb.logger.isEnabled() ) { + this.logData = { + result: 1, + source: 'global', + raw: 'no-spurious-csp-report' + }; + } + return 1; + } + return 0; +}; + +/******************************************************************************/ + +PageStore.prototype.filterFont = function(context) { + if ( context.requestType === 'font' ) { + this.remoteFontCount += 1; + } + if ( µb.hnSwitches.evaluateZ('no-remote-fonts', context.rootHostname) !== false ) { + if ( µb.logger.isEnabled() ) { + this.logData = µb.hnSwitches.toLogData(); + } + return 1; + } + return 0; +}; + /******************************************************************************/ // The caller is responsible to check whether filtering is enabled or not. @@ -689,67 +739,33 @@ PageStore.prototype.filterLargeMediaElement = function(size) { return 1; }; -/******************************************************************************/ - -PageStore.prototype.filterRequestNoCache = function(context) { - this.logData = undefined; - - if ( this.getNetFilteringSwitch() === false ) { - return 0; - } - - var requestType = context.requestType; - - if ( requestType === 'csp_report' ) { - if ( this.internalRedirectionCount !== 0 ) { - if ( µb.logger.isEnabled() ) { - this.logData = { result: 1, source: 'global', raw: 'no-spurious-csp-report' }; - } - return 1; - } - } - - if ( requestType === 'font' ) { - this.remoteFontCount += 1; - if ( µb.hnSwitches.evaluateZ('no-remote-fonts', context.rootHostname) !== false ) { - if ( µb.logger.isEnabled() ) { - this.logData = µb.hnSwitches.toLogData(); - } - return 1; - } - } - - var result = 0; - - // Dynamic URL filtering. - if ( result === 0 ) { - result = µb.sessionURLFiltering.evaluateZ(context.rootHostname, context.requestURL, requestType); - if ( result !== 0 && µb.logger.isEnabled() ) { - this.logData = µb.sessionURLFiltering.toLogData(); - } - } +// https://www.youtube.com/watch?v=drW8p_dTLD4 - // Dynamic hostname/type filtering. - if ( result === 0 && µb.userSettings.advancedUserEnabled ) { - result = µb.sessionFirewall.evaluateCellZY(context.rootHostname, context.requestHostname, requestType); - if ( result !== 0 && result !== 3 && µb.logger.isEnabled() ) { - this.logData = µb.sessionFirewall.toLogData(); - } - } +/******************************************************************************/ - // Static filtering has lowest precedence. - if ( result === 0 || result === 3 ) { - result = µb.staticNetFilteringEngine.matchString(context); - if ( result !== 0 && µb.logger.isEnabled() ) { - this.logData = µb.staticNetFilteringEngine.toLogData(); +PageStore.prototype.getBlockedResources = function(request, response) { + var µburi = µb.URI, + normalURL = µb.normalizePageURL(this.tabId, request.frameURL), + frameHostname = µburi.hostnameFromURI(normalURL), + resources = request.resources; + // Force some resources to go through the filtering engine in order to + // populate the blocked-resources cache. This is required because for + // some resources it's not possible to detect whether they were blocked + // content script-side (i.e. `iframes` -- unlike `img`). + if ( Array.isArray(resources) && resources.length !== 0 ) { + var context = this.createContextFromFrameHostname(frameHostname); + for ( var resource of resources ) { + context.requestType = resource.type; + context.requestHostname = µburi.hostnameFromURI(resource.url); + context.requestURL = resource.url; + this.filterRequest(context); } } - - return result; + if ( this.netFilteringCache.hash === response.hash ) { return; } + response.hash = this.netFilteringCache.hash; + response.blockedResources = this.netFilteringCache.lookupAllBlocked(frameHostname); }; -// https://www.youtube.com/watch?v=drW8p_dTLD4 - /******************************************************************************/ return { diff --git a/src/js/popup.js b/src/js/popup.js index 41f6983438380..457a6c502b386 100644 --- a/src/js/popup.js +++ b/src/js/popup.js @@ -46,7 +46,15 @@ if ( /[\?&]fullsize=1/.test(window.location.search) ) { } // Mobile device? -if ( /[\?&]mobile=1/.test(window.location.search) ) { +// https://github.com/gorhill/uBlock/issues/3032 +// - If at least one of the window's viewport dimension is larger than the +// corresponding device's screen dimension, assume uBO's popup panel sits in +// its own tab. +if ( + /[\?&]mobile=1/.test(window.location.search) || + window.innerWidth >= window.screen.availWidth || + window.innerHeight >= window.screen.availHeight +) { document.body.classList.add('mobile'); } @@ -393,25 +401,26 @@ var renderPrivacyExposure = function() { // Assume everything has to be done incrementally. var renderPopup = function() { + var elem, text; + if ( popupData.tabTitle ) { document.title = popupData.appName + ' - ' + popupData.tabTitle; } - uDom('body') - .toggleClass('advancedUser', popupData.advancedUserEnabled) - .toggleClass( - 'off', - (popupData.pageURL === '') || - (!popupData.netFilteringSwitch) || - (popupData.pageHostname === 'behind-the-scene' && !popupData.advancedUserEnabled) - ); + elem = document.body; + elem.classList.toggle('advancedUser', popupData.advancedUserEnabled); + elem.classList.toggle( + 'off', + popupData.pageURL === '' || + !popupData.netFilteringSwitch || + popupData.pageHostname === 'behind-the-scene' && !popupData.advancedUserEnabled + ); // If you think the `=== true` is pointless, you are mistaken uDom.nodeFromId('gotoPick').classList.toggle('enabled', popupData.canElementPicker === true); uDom.nodeFromId('gotoZap').classList.toggle('enabled', popupData.canElementPicker === true); - var text, - blocked = popupData.pageBlockedRequestCount, + var blocked = popupData.pageBlockedRequestCount, total = popupData.pageAllowedRequestCount + blocked; if ( total === 0 ) { text = formatNumber(0); @@ -478,18 +487,82 @@ var renderPopup = function() { } uDom.nodeFromId('panes').classList.toggle('dfEnabled', dfPaneVisible); - uDom('#firewallContainer') - .toggleClass('minimized', popupData.firewallPaneMinimized) - .toggleClass('colorBlind', popupData.colorBlindFriendly); + + elem = uDom.nodeFromId('firewallContainer'); + elem.classList.toggle('minimized', popupData.firewallPaneMinimized); + elem.classList.toggle('colorBlind', popupData.colorBlindFriendly); // Build dynamic filtering pane only if in use if ( dfPaneVisible ) { buildAllFirewallRows(); } + + renderTooltips(); }; /******************************************************************************/ +// https://github.com/gorhill/uBlock/issues/2889 +// Use tooltip for ARIA purpose. + +var renderTooltips = function(selector) { + var elem, text; + for ( var entry of tooltipTargetSelectors ) { + if ( selector !== undefined && entry[0] !== selector ) { continue; } + text = vAPI.i18n( + entry[1].i18n + + (uDom.nodeFromSelector(entry[1].state) === null ? '1' : '2') + ); + elem = uDom.nodeFromSelector(entry[0]); + elem.setAttribute('aria-label', text); + elem.setAttribute('data-tip', text); + if ( selector !== undefined ) { + uDom.nodeFromId('tooltip').textContent = + elem.getAttribute('data-tip'); + } + } +}; + +var tooltipTargetSelectors = new Map([ + [ + '#switch', + { + state: 'body.off', + i18n: 'popupPowerSwitchInfo', + } + ], + [ + '#no-popups', + { + state: '#no-popups.on', + i18n: 'popupTipNoPopups' + } + ], + [ + '#no-large-media', + { + state: '#no-large-media.on', + i18n: 'popupTipNoLargeMedia' + } + ], + [ + '#no-cosmetic-filtering', + { + state: '#no-cosmetic-filtering.on', + i18n: 'popupTipNoCosmeticFiltering' + } + ], + [ + '#no-remote-fonts', + { + state: '#no-remote-fonts.on', + i18n: 'popupTipNoRemoteFonts' + } + ] +]); + +/******************************************************************************/ + // All rendering code which need to be executed only once. var renderOnce = function() { @@ -515,18 +588,24 @@ var renderOnce = function() { // scrollbar if ever its height is more than what is available. // For small displays: we use the whole viewport. - var rpane = uDom.nodeFromSelector('#panes > div:first-of-type'), + var panes = uDom.nodeFromId('panes'), + rpane = uDom.nodeFromSelector('#panes > div:first-of-type'), lpane = uDom.nodeFromSelector('#panes > div:last-of-type'); var fillViewport = function() { - lpane.style.setProperty( - 'height', - Math.max( - window.innerHeight - uDom.nodeFromSelector('#appinfo').offsetHeight, - rpane.offsetHeight - ) + 'px' + var newHeight = Math.max( + window.innerHeight - uDom.nodeFromSelector('#appinfo').offsetHeight, + rpane.offsetHeight ); - lpane.style.setProperty('width', (window.innerWidth - rpane.offsetWidth) + 'px'); + if ( newHeight !== lpane.offsetHeight ) { + lpane.style.setProperty('height', newHeight + 'px'); + } + // https://github.com/gorhill/uBlock/issues/3038 + // - Resize the firewall pane while minding the space between the panes. + var newWidth = window.innerWidth - panes.offsetWidth + lpane.offsetWidth; + if ( newWidth !== lpane.offsetWidth ) { + lpane.style.setProperty('width', newWidth + 'px'); + } }; // https://github.com/gorhill/uBlock/issues/2274 @@ -566,10 +645,11 @@ messaging.addChannelListener('popup', onPopupMessage); /******************************************************************************/ var toggleNetFilteringSwitch = function(ev) { - if ( !popupData || !popupData.pageURL ) { - return; - } - if ( popupData.pageHostname === 'behind-the-scene' && !popupData.advancedUserEnabled ) { + if ( !popupData || !popupData.pageURL ) { return; } + if ( + popupData.pageHostname === 'behind-the-scene' && + !popupData.advancedUserEnabled + ) { return; } messaging.send( @@ -582,7 +662,7 @@ var toggleNetFilteringSwitch = function(ev) { tabId: popupData.tabId } ); - + renderTooltips('#switch'); hashFromPopupData(); }; @@ -618,7 +698,7 @@ var gotoPick = function() { /******************************************************************************/ var gotoURL = function(ev) { - if ( this.hasAttribute('href') === false) { + if ( this.hasAttribute('href') === false ) { return; } @@ -848,9 +928,7 @@ var revertFirewallRules = function() { var toggleHostnameSwitch = function(ev) { var target = ev.currentTarget; var switchName = target.getAttribute('id'); - if ( !switchName ) { - return; - } + if ( !switchName ) { return; } target.classList.toggle('on'); messaging.send( 'popupPanel', @@ -862,6 +940,7 @@ var toggleHostnameSwitch = function(ev) { tabId: popupData.tabId } ); + renderTooltips('#' + switchName); hashFromPopupData(); }; diff --git a/src/js/profiler.js b/src/js/profiler.js deleted file mode 100644 index 7b5a634dff4ce..0000000000000 --- a/src/js/profiler.js +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - - µBlock - a browser extension to block requests. - Copyright (C) 2014 Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -/* exported quickProfiler */ - -/******************************************************************************/ - -var quickProfiler = (function() { - 'use strict'; - - var timer = window.performance || Date; - var time = 0; - var count = 0; - var tstart = 0; - var lastlog = timer.now(); - var prompt = ''; - var reset = function() { - time = 0; - count = 0; - tstart = 0; - }; - var avg = function() { - return count > 0 ? time / count : 0; - }; - var start = function(s) { - prompt = s || ''; - tstart = timer.now(); - }; - var stop = function(period) { - if ( period === undefined ) { - period = 10000; - } - var now = timer.now(); - count += 1; - time += (now - tstart); - if ( (now - lastlog) >= period ) { - console.log('µBlock> %s: %s ms (%d samples)', prompt, avg().toFixed(3), count); - lastlog = now; - } - }; - return { - reset: reset, - start: start, - stop: stop - }; -})(); - -/******************************************************************************/ diff --git a/src/js/redirect-engine.js b/src/js/redirect-engine.js index c7e0edff812da..70912195a5801 100644 --- a/src/js/redirect-engine.js +++ b/src/js/redirect-engine.js @@ -338,11 +338,11 @@ RedirectEngine.prototype.toSelfie = function() { } var µb = µBlock; return { - resources: µb.mapToArray(this.resources), + resources: µb.arrayFrom(this.resources), rules: rules, - ruleTypes: µb.setToArray(this.ruleTypes), - ruleSources: µb.setToArray(this.ruleSources), - ruleDestinations: µb.setToArray(this.ruleDestinations) + ruleTypes: µb.arrayFrom(this.ruleTypes), + ruleSources: µb.arrayFrom(this.ruleSources), + ruleDestinations: µb.arrayFrom(this.ruleDestinations) }; }; @@ -359,11 +359,10 @@ RedirectEngine.prototype.fromSelfie = function(selfie) { } // Rules. - var µb = µBlock; - this.rules = µb.mapFromArray(selfie.rules); - this.ruleTypes = µb.setFromArray(selfie.ruleTypes); - this.ruleSources = µb.setFromArray(selfie.ruleSources); - this.ruleDestinations = µb.setFromArray(selfie.ruleDestinations); + this.rules = new Map(selfie.rules); + this.ruleTypes = new Set(selfie.ruleTypes); + this.ruleSources = new Set(selfie.ruleSources); + this.ruleDestinations = new Set(selfie.ruleDestinations); return true; }; diff --git a/src/js/reverselookup-worker.js b/src/js/reverselookup-worker.js index e8dedb9156ba7..bb3a01a3b78e9 100644 --- a/src/js/reverselookup-worker.js +++ b/src/js/reverselookup-worker.js @@ -98,14 +98,13 @@ var fromNetFilter = function(details) { var fromCosmeticFilter = function(details) { var match = /^#@?#/.exec(details.rawFilter), prefix = match[0], - filter = details.rawFilter.slice(prefix.length); + selector = details.rawFilter.slice(prefix.length); - var reFilter = new RegExp( - '[^\\n]*\\\\*"' + - reEscapeCosmetic(filter) + - '\\\\*"[^\\n]*', - 'g' - ); + // The longer the needle, the lower the number of false positives. + var needles = selector.match(/\w+/g).sort(function(a, b) { + return b.length - a.length; + }); + var reNeedle = new RegExp(needles[0], 'g'); var reHostname = new RegExp( '^' + @@ -139,7 +138,7 @@ var fromCosmeticFilter = function(details) { } var response = Object.create(null), - assetKey, entry, content, found, fargs; + assetKey, entry, content, found, beg, end, fargs; for ( assetKey in listEntries ) { entry = listEntries[assetKey]; @@ -149,30 +148,67 @@ var fromCosmeticFilter = function(details) { filterClassSeparator.length ); found = undefined; - while ( (match = reFilter.exec(content)) !== null ) { - fargs = JSON.parse(match[0]); + while ( (match = reNeedle.exec(content)) !== null ) { + beg = content.lastIndexOf('\n', match.index); + if ( beg === -1 ) { beg = 0; } + end = content.indexOf('\n', reNeedle.lastIndex); + if ( end === -1 ) { end = content.length; } + fargs = JSON.parse(content.slice(beg, end)); switch ( fargs[0] ) { - case 0: - case 2: + case 0: // id-based + if ( + fargs[1] === selector.slice(1) && + selector.charAt(0) === '#' + ) { + found = prefix + selector; + } + break; + case 1: // id-based + if ( + fargs[2] === selector.slice(1) && + selector.charAt(0) === '#' + ) { + found = prefix + selector; + } + break; + case 2: // class-based + if ( + fargs[1] === selector.slice(1) && + selector.charAt(0) === '.' + ) { + found = prefix + selector; + } + break; + case 3: + if ( + fargs[2] === selector.slice(1) && + selector.charAt(0) === '.' + ) { + found = prefix + selector; + } + break; case 4: case 5: case 7: - found = prefix + filter; - break; - case 1: - case 3: - if ( fargs[2] === filter ) { - found = prefix + filter; + if ( fargs[1] === selector ) { + found = prefix + selector; } break; case 6: case 8: + case 9: + if ( + fargs[0] === 8 && fargs[3] !== selector || + fargs[0] === 9 && JSON.parse(fargs[3]).raw !== selector + ) { + break; + } if ( fargs[2] === '' || reHostname.test(fargs[2]) === true || reEntity !== undefined && reEntity.test(fargs[2]) === true ) { - found = fargs[2] + prefix + filter; + found = fargs[2] + prefix + selector; } break; } @@ -195,15 +231,6 @@ var fromCosmeticFilter = function(details) { }); }; -// https://github.com/gorhill/uBlock/issues/2666 -// Raw filters in compiled filter lists may have been JSON-stringified one or -// multiple times. - -var reEscapeCosmetic = function(s) { - return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - .replace(/"/g, '\\\\*"'); -}; - /******************************************************************************/ onmessage = function(e) { // jshint ignore:line diff --git a/src/js/scriptlets/cosmetic-logger.js b/src/js/scriptlets/cosmetic-logger.js index bbbd637f74a85..bbfafa43ec11c 100644 --- a/src/js/scriptlets/cosmetic-logger.js +++ b/src/js/scriptlets/cosmetic-logger.js @@ -27,62 +27,227 @@ /******************************************************************************/ -if ( typeof vAPI !== 'object' || !vAPI.domFilterer ) { +if ( + typeof vAPI !== 'object' || + vAPI.domFilterer instanceof Object === false || + vAPI.domWatcher instanceof Object === false +) { return; } -var loggedSelectors = vAPI.loggedSelectors || {}, - matchedSelectors = []; - - -var evaluateSelector = function(selector) { +var reHasCSSCombinators = /[ >+~]/, + reHasPseudoClass = /:+(?:after|before)$/, + sanitizedSelectors = new Map(), + matchProp = vAPI.matchesProp, + simple = { dict: new Set(), str: undefined }, + complex = { dict: new Set(), str: undefined }, + procedural = { dict: new Map() }, + jobQueue = []; + +var DeclarativeSimpleJob = function(node) { + this.node = node; +}; +DeclarativeSimpleJob.create = function(node) { + return new DeclarativeSimpleJob(node); +}; +DeclarativeSimpleJob.prototype.lookup = function(out) { + if ( simple.dict.size === 0 ) { return; } + if ( simple.str === undefined ) { + simple.str = Array.from(simple.dict).join(',\n'); + } if ( - loggedSelectors.hasOwnProperty(selector) === false && - document.querySelector(selector) !== null + (this.node === document || this.node[matchProp](simple.str) === false) && + (this.node.querySelector(simple.str) === null) ) { - loggedSelectors[selector] = true; - matchedSelectors.push(selector); + return; + } + for ( var selector of simple.dict ) { + if ( + this.node !== document && this.node[matchProp](selector) || + this.node.querySelector(selector) !== null + ) { + out.push(sanitizedSelectors.get(selector) || selector); + simple.dict.delete(selector); + simple.str = undefined; + if ( simple.dict.size === 0 ) { return; } + } } }; -// Simple CSS selector-based cosmetic filters. -vAPI.domFilterer.simpleHideSelectors.entries.forEach(evaluateSelector); +var DeclarativeComplexJob = function() { +}; +DeclarativeComplexJob.instance = null; +DeclarativeComplexJob.create = function() { + if ( DeclarativeComplexJob.instance === null ) { + DeclarativeComplexJob.instance = new DeclarativeComplexJob(); + } + return DeclarativeComplexJob.instance; +}; +DeclarativeComplexJob.prototype.lookup = function(out) { + if ( complex.dict.size === 0 ) { return; } + if ( complex.str === undefined ) { + complex.str = Array.from(complex.dict).join(',\n'); + } + if ( document.querySelector(complex.str) === null ) { return; } + for ( var selector of complex.dict ) { + if ( document.querySelector(selector) !== null ) { + out.push(sanitizedSelectors.get(selector) || selector); + complex.dict.delete(selector); + complex.str = undefined; + if ( complex.dict.size === 0 ) { return; } + } + } +}; -// Complex CSS selector-based cosmetic filters. -vAPI.domFilterer.complexHideSelectors.entries.forEach(evaluateSelector); +var ProceduralJob = function() { +}; +ProceduralJob.instance = null; +ProceduralJob.create = function() { + if ( ProceduralJob.instance === null ) { + ProceduralJob.instance = new ProceduralJob(); + } + return ProceduralJob.instance; +}; +ProceduralJob.prototype.lookup = function(out) { + for ( var entry of procedural.dict ) { + if ( entry[1].test() ) { + procedural.dict.delete(entry[0]); + out.push(entry[1].raw); + if ( procedural.dict.size === 0 ) { return; } + } + } +}; -// Non-querySelector-able filters. -vAPI.domFilterer.nqsSelectors.forEach(function(filter) { - if ( loggedSelectors.hasOwnProperty(filter) === false ) { - loggedSelectors[filter] = true; - matchedSelectors.push(filter); +var jobQueueTimer = new vAPI.SafeAnimationFrame(function processJobQueue() { + //console.time('dom logger/scanning for matches'); + jobQueueTimer.clear(); + var toLog = [], + t0 = Date.now(), + job; + while ( (job = jobQueue.shift()) ) { + job.lookup(toLog); + if ( (Date.now() - t0) > 10 ) { break; } + } + if ( toLog.length !== 0 ) { + vAPI.messaging.send( + 'scriptlets', + { + what: 'logCosmeticFilteringData', + frameURL: window.location.href, + frameHostname: window.location.hostname, + matchedSelectors: toLog + } + ); } + if ( simple.dict.size === 0 && complex.dict.size === 0 ) { + jobQueue = []; + } + if ( jobQueue.length !== 0 ) { + jobQueueTimer.start(100); + } + //console.timeEnd('dom logger/scanning for matches'); }); -// Procedural cosmetic filters. -vAPI.domFilterer.proceduralSelectors.entries.forEach(function(pfilter) { - if ( - loggedSelectors.hasOwnProperty(pfilter.raw) === false && - pfilter.exec().length !== 0 - ) { - loggedSelectors[pfilter.raw] = true; - matchedSelectors.push(pfilter.raw); +var handlers = { + onFiltersetChanged: function(changes) { + //console.time('dom logger/filterset changed'); + var selector, sanitized, entry, + simpleSizeBefore = simple.dict.size, + complexSizeBefore = complex.dict.size, + logNow = []; + for ( entry of (changes.declarative || []) ) { + for ( selector of entry[0].split(',\n') ) { + if ( entry[1] === 'display:none!important;' ) { + if ( reHasPseudoClass.test(selector) ) { + sanitized = selector.replace(reHasPseudoClass, ''); + sanitizedSelectors.set(sanitized, selector); + selector = sanitized; + } + if ( reHasCSSCombinators.test(selector) ) { + complex.dict.add(selector); + complex.str = undefined; + } else { + simple.dict.add(selector); + simple.str = undefined; + } + } else { + logNow.push(selector + ':style(' + entry[1] + ')'); + } + } + } + if ( simple.dict.size !== simpleSizeBefore ) { + jobQueue.push(DeclarativeSimpleJob.create(document)); + } + if ( complex.dict.size !== complexSizeBefore ) { + complex.str = Array.from(complex.dict).join(',\n'); + jobQueue.push(DeclarativeComplexJob.create()); + } + if ( logNow.length !== 0 ) { + vAPI.messaging.send( + 'scriptlets', + { + what: 'logCosmeticFilteringData', + frameURL: window.location.href, + frameHostname: window.location.hostname, + matchedSelectors: logNow + } + ); + } + if ( Array.isArray(changes.procedural) ) { + for ( selector of changes.procedural ) { + procedural.dict.set(selector.raw, selector); + } + if ( changes.procedural.size !== 0 ) { + jobQueue.push(ProceduralJob.create()); + } + } + if ( jobQueue.length !== 0 ) { + jobQueueTimer.start(1); + } + //console.timeEnd('dom logger/filterset changed'); + }, + + onDOMCreated: function() { + handlers.onFiltersetChanged(vAPI.domFilterer.getAllSelectors()); + vAPI.domFilterer.addListener(handlers); + }, + + onDOMChanged: function(addedNodes) { + if ( simple.dict.size === 0 && complex.dict.size === 0 ) { return; } + // This is to guard against runaway job queue. I suspect this could + // occur on slower devices. + if ( jobQueue.length <= 300 ) { + if ( simple.dict.size !== 0 ) { + for ( var node of addedNodes ) { + jobQueue.push(DeclarativeSimpleJob.create(node)); + } + } + if ( complex.dict.size !== 0 ) { + jobQueue.push(DeclarativeComplexJob.create()); + } + if ( procedural.dict.size !== 0 ) { + jobQueue.push(ProceduralJob.create()); + } + } + if ( jobQueue.length !== 0 ) { + jobQueueTimer.start(100); + } } -}); +}; + +/******************************************************************************/ -vAPI.loggedSelectors = loggedSelectors; +var onMessage = function(msg) { + if ( msg.what === 'loggerDisabled' ) { + jobQueueTimer.clear(); + vAPI.domFilterer.removeListener(handlers); + vAPI.domWatcher.removeListener(handlers); + vAPI.messaging.removeChannelListener('domLogger', onMessage); + } +}; +vAPI.messaging.addChannelListener('domLogger', onMessage); -if ( matchedSelectors.length ) { - vAPI.messaging.send( - 'scriptlets', - { - what: 'logCosmeticFilteringData', - frameURL: window.location.href, - frameHostname: window.location.hostname, - matchedSelectors: matchedSelectors - } - ); -} +vAPI.domWatcher.addListener(handlers); /******************************************************************************/ diff --git a/src/js/scriptlets/cosmetic-off.js b/src/js/scriptlets/cosmetic-off.js index cd92eb78042eb..a3ab578bc9c95 100644 --- a/src/js/scriptlets/cosmetic-off.js +++ b/src/js/scriptlets/cosmetic-off.js @@ -1,7 +1,7 @@ /******************************************************************************* uBlock Origin - a browser extension to block requests. - Copyright (C) 2015-2016 Raymond Hill + Copyright (C) 2015-2017 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 @@ -23,20 +23,6 @@ /******************************************************************************/ -(function() { - if ( typeof vAPI !== 'object' || !vAPI.domFilterer ) { - return; - } - - var elems = []; - try { - elems = document.querySelectorAll('[' + vAPI.domFilterer.hiddenId + ']'); - } catch (e) { - } - var i = elems.length; - while ( i-- ) { - vAPI.domFilterer.showNode(elems[i]); - } - - vAPI.domFilterer.toggleOff(); -})(); +if ( typeof vAPI === 'object' && vAPI.domFilterer ) { + vAPI.domFilterer.toggle(false); +} diff --git a/src/js/scriptlets/cosmetic-on.js b/src/js/scriptlets/cosmetic-on.js index d3a6de8309547..c7136a6f96dc0 100644 --- a/src/js/scriptlets/cosmetic-on.js +++ b/src/js/scriptlets/cosmetic-on.js @@ -1,7 +1,7 @@ /******************************************************************************* uBlock Origin - a browser extension to block requests. - Copyright (C) 2015-2016 Raymond Hill + Copyright (C) 2015-2017 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 @@ -23,20 +23,6 @@ /******************************************************************************/ -(function() { - if ( typeof vAPI !== 'object' || !vAPI.domFilterer ) { - return; - } - - var elems = []; - try { - elems = document.querySelectorAll('[' + vAPI.domFilterer.hiddenId + ']'); - } catch (e) { - } - var i = elems.length; - while ( i-- ) { - vAPI.domFilterer.unshowNode(elems[i]); - } - - vAPI.domFilterer.toggleOn(); -})(); +if ( typeof vAPI === 'object' && vAPI.domFilterer ) { + vAPI.domFilterer.toggle(true); +} diff --git a/src/js/scriptlets/cosmetic-survey.js b/src/js/scriptlets/cosmetic-survey.js index d3956ca703ac0..c94099dbb489c 100644 --- a/src/js/scriptlets/cosmetic-survey.js +++ b/src/js/scriptlets/cosmetic-survey.js @@ -1,7 +1,7 @@ /******************************************************************************* uBlock Origin - a browser extension to block requests. - Copyright (C) 2015-2016 Raymond Hill + Copyright (C) 2015-2017 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 @@ -24,24 +24,14 @@ /******************************************************************************/ (function() { - if ( typeof vAPI !== 'object' || !vAPI.domFilterer ) { - return; - } - - var xpr = document.evaluate( - 'count(//*[@' + vAPI.domFilterer.hiddenId + '])', - document, - null, - XPathResult.NUMBER_TYPE, - null - ); + if ( typeof vAPI !== 'object' || !vAPI.domFilterer ) { return; } vAPI.messaging.send( 'scriptlets', { what: 'cosmeticallyFilteredElementCount', pageURL: window.location.href, - filteredElementCount: xpr && xpr.numberValue || 0 + filteredElementCount: vAPI.domFilterer.getFilteredElementCount() } ); })(); diff --git a/src/js/scriptlets/dom-inspector.js b/src/js/scriptlets/dom-inspector.js index ce8a4632daccc..ec02f8f072f13 100644 --- a/src/js/scriptlets/dom-inspector.js +++ b/src/js/scriptlets/dom-inspector.js @@ -1,7 +1,7 @@ /******************************************************************************* uBlock Origin - a browser extension to block requests. - Copyright (C) 2015-2016 Raymond Hill + Copyright (C) 2015-2017 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 @@ -137,40 +137,34 @@ var cssEscape = (function(/*root*/) { /******************************************************************************/ /******************************************************************************/ +var loggerConnectionId; + // Highlighter-related var svgRoot = null; var pickerRoot = null; -var highlightedElementLists = [ [], [], [] ]; var nodeToIdMap = new WeakMap(); // No need to iterate -var nodeToCosmeticFilterMap = new WeakMap(); -var toggledNodes = new Map(); - -/******************************************************************************/ -// Some kind of fingerprint for the DOM, without incurring too much overhead. +var blueNodes = []; +var roRedNodes = new Map(); // node => current cosmetic filter +var rwRedNodes = new Set(); // node => new cosmetic filter (toggle node) +//var roGreenNodes = new Map(); // node => current exception cosmetic filter (can't toggle) +var rwGreenNodes = new Set(); // node => new exception cosmetic filter (toggle filter) -var domFingerprint = function() { - return sessionId; -}; +var reHasCSSCombinators = /[ >+~]/; /******************************************************************************/ var domLayout = (function() { - var skipTagNames = { - 'br': true, - 'link': true, - 'meta': true, - 'script': true, - 'style': true - }; - - var resourceAttrNames = { - 'a': 'href', - 'iframe': 'src', - 'img': 'src', - 'object': 'data' - }; + var skipTagNames = new Set([ + 'br', 'head', 'link', 'meta', 'script', 'style', 'title' + ]); + var resourceAttrNames = new Map([ + [ 'a', 'href' ], + [ 'iframe', 'src' ], + [ 'img', 'src' ], + [ 'object', 'data' ] + ]); var idGenerator = 0; @@ -201,11 +195,15 @@ var domLayout = (function() { } } // Tag-specific attributes - if ( resourceAttrNames.hasOwnProperty(tag) ) { - attr = resourceAttrNames[tag]; + attr = resourceAttrNames.get(tag); + if ( attr !== undefined ) { str = node.getAttribute(attr) || ''; str = str.trim(); - pos = str.indexOf('#'); + if ( str.startsWith('data:') ) { + pos = 5; + } else { + pos = str.search(/[#?]/); + } if ( pos !== -1 ) { str = str.slice(0, pos); sw = '^'; @@ -224,7 +222,7 @@ var domLayout = (function() { this.lvl = 0; this.sel = 'body'; this.cnt = 0; - this.filter = nodeToCosmeticFilterMap.get(document.body); + this.filter = roRedNodes.get(document.body); }; var DomNode = function(node, level) { @@ -232,18 +230,14 @@ var domLayout = (function() { this.lvl = level; this.sel = selectorFromNode(node); this.cnt = 0; - this.filter = nodeToCosmeticFilterMap.get(node); + this.filter = roRedNodes.get(node); }; var domNodeFactory = function(level, node) { var localName = node.localName; - if ( skipTagNames.hasOwnProperty(localName) ) { - return null; - } + if ( skipTagNames.has(localName) ) { return null; } // skip uBlock's own nodes - if ( node.classList.contains(sessionId) ) { - return null; - } + if ( node.classList.contains(sessionId) ) { return null; } if ( level === 0 && localName === 'body' ) { return new DomRoot(); } @@ -255,7 +249,7 @@ var domLayout = (function() { var getLayoutData = function() { var layout = []; var stack = []; - var node = document.body; + var node = document.documentElement; var domNode; var lvl = 0; @@ -319,37 +313,31 @@ var domLayout = (function() { return layout; }; - // Track and report mutations to the DOM + // Track and report mutations of the DOM var mutationObserver = null; - var mutationTimer = null; + var mutationTimer; var addedNodelists = []; var removedNodelist = []; - var journalEntries = []; - var journalNodes = Object.create(null); var previousElementSiblingId = function(node) { var sibling = node; for (;;) { sibling = sibling.previousElementSibling; - if ( sibling === null ) { - return null; - } - if ( skipTagNames.hasOwnProperty(sibling.localName) ) { - continue; - } + if ( sibling === null ) { return null; } + if ( skipTagNames.has(sibling.localName) ) { continue; } return nodeToIdMap.get(sibling); } }; - var journalFromBranch = function(root, added) { + var journalFromBranch = function(root, newNodes, newNodeToIdMap) { var domNode; var node = root.firstElementChild; while ( node !== null ) { domNode = domNodeFactory(undefined, node); if ( domNode !== null ) { - journalNodes[domNode.nid] = domNode; - added.push(node); + newNodeToIdMap.set(domNode.nid, domNode); + newNodes.push(node); } // down if ( node.firstElementChild !== null ) { @@ -363,9 +351,7 @@ var domLayout = (function() { } // up then right for (;;) { - if ( node.parentElement === root ) { - return; - } + if ( node.parentElement === root ) { return; } node = node.parentElement; if ( node.nextElementSibling !== null ) { node = node.nextElementSibling; @@ -376,51 +362,34 @@ var domLayout = (function() { }; var journalFromMutations = function() { - mutationTimer = null; - if ( mutationObserver === null ) { - addedNodelists = []; - removedNodelist = []; - return; - } - - var i, m, nodelist, j, n, node, domNode, nid; + var nodelist, node, domNode, nid; + mutationTimer = undefined; // This is used to temporarily hold all added nodes, before resolving // their node id and relative position. - var added = []; - - for ( i = 0, m = addedNodelists.length; i < m; i++ ) { - nodelist = addedNodelists[i]; - for ( j = 0, n = nodelist.length; j < n; j++ ) { - node = nodelist[j]; - if ( node.nodeType !== 1 ) { - continue; - } - // I don't think this can ever happen - if ( node.parentElement === null ) { - continue; - } + var newNodes = []; + var journalEntries = []; + var newNodeToIdMap = new Map(); + + for ( nodelist of addedNodelists ) { + for ( node of nodelist ) { + if ( node.nodeType !== 1 ) { continue; } + if ( node.parentElement === null ) { continue; } cosmeticFilterMapper.incremental(node); domNode = domNodeFactory(undefined, node); if ( domNode !== null ) { - journalNodes[domNode.nid] = domNode; - added.push(node); + newNodeToIdMap.set(domNode.nid, domNode); + newNodes.push(node); } - journalFromBranch(node, added); + journalFromBranch(node, newNodes, newNodeToIdMap); } } addedNodelists = []; - for ( i = 0, m = removedNodelist.length; i < m; i++ ) { - nodelist = removedNodelist[i]; - for ( j = 0, n = nodelist.length; j < n; j++ ) { - node = nodelist[j]; - if ( node.nodeType !== 1 ) { - continue; - } + for ( nodelist of removedNodelist ) { + for ( node of nodelist ) { + if ( node.nodeType !== 1 ) { continue; } nid = nodeToIdMap.get(node); - if ( nid === undefined ) { - continue; - } + if ( nid === undefined ) { continue; } journalEntries.push({ what: -1, nid: nid @@ -428,8 +397,7 @@ var domLayout = (function() { } } removedNodelist = []; - for ( i = 0, n = added.length; i < n; i++ ) { - node = added[i]; + for ( node of newNodes ) { journalEntries.push({ what: 1, nid: nodeToIdMap.get(node), @@ -437,12 +405,20 @@ var domLayout = (function() { l: previousElementSiblingId(node) }); } + + if ( journalEntries.length === 0 ) { return; } + + vAPI.messaging.sendTo(loggerConnectionId, { + what: 'domLayoutIncremental', + url: window.location.href, + hostname: window.location.hostname, + journal: journalEntries, + nodes: Array.from(newNodeToIdMap) + }); }; var onMutationObserved = function(mutationRecords) { - var record; - for ( var i = 0, n = mutationRecords.length; i < n; i++ ) { - record = mutationRecords[i]; + for ( var record of mutationRecords ) { if ( record.addedNodes.length !== 0 ) { addedNodelists.push(record.addedNodes); } @@ -450,55 +426,27 @@ var domLayout = (function() { removedNodelist.push(record.removedNodes); } } - if ( mutationTimer === null ) { + if ( mutationTimer === undefined ) { mutationTimer = vAPI.setTimeout(journalFromMutations, 1000); } }; // API - var getLayout = function(fingerprint) { - if ( fingerprint !== domFingerprint() ) { - reset(); - } + var getLayout = function() { + cosmeticFilterMapper.reset(); + mutationObserver = new MutationObserver(onMutationObserved); + mutationObserver.observe(document.body, { + childList: true, + subtree: true + }); - var response = { - what: 'domLayout', - fingerprint: domFingerprint(), + return { + what: 'domLayoutFull', url: window.location.href, - hostname: window.location.hostname + hostname: window.location.hostname, + layout: patchLayoutData(getLayoutData()) }; - - if ( document.readyState !== 'complete' ) { - response.status = 'busy'; - return response; - } - - // No mutation observer means we need to send full layout - if ( mutationObserver === null ) { - cosmeticFilterMapper.reset(); - mutationObserver = new MutationObserver(onMutationObserved); - mutationObserver.observe(document.body, { - childList: true, - subtree: true - }); - response.status = 'full'; - response.layout = patchLayoutData(getLayoutData()); - return response; - } - - // Incremental layout - if ( journalEntries.length !== 0 ) { - response.status = 'incremental'; - response.journal = journalEntries; - response.nodes = journalNodes; - journalEntries = []; - journalNodes = Object.create(null); - return response; - } - - response.status = 'nochange'; - return response; }; var reset = function() { @@ -506,9 +454,9 @@ var domLayout = (function() { }; var shutdown = function() { - if ( mutationTimer !== null ) { + if ( mutationTimer !== undefined ) { clearTimeout(mutationTimer); - mutationTimer = null; + mutationTimer = undefined; } if ( mutationObserver !== null ) { mutationObserver.disconnect(); @@ -516,8 +464,6 @@ var domLayout = (function() { } addedNodelists = []; removedNodelist = []; - journalEntries = []; - journalNodes = Object.create(null); nodeToIdMap = new WeakMap(); }; @@ -545,136 +491,6 @@ try { /******************************************************************************/ -var cosmeticFilterFromEntries = function(entries) { - var out = []; - var entry, i = entries.length; - while ( i-- ) { - entry = entries[i]; - out.push(cosmeticFilterFromTarget(entry.nid, entry.selector)); - } - return out; -}; - -/******************************************************************************/ - -// Extract the best possible cosmetic filter, i.e. as specific as possible. - -var cosmeticFilterFromNode = function(elem) { - var tagName = elem.localName; - var prefix = ''; - var suffix = []; - var v, i; - - // Id - v = typeof elem.id === 'string' && cssEscape(elem.id); - if ( v ) { - suffix.push('#', v); - } - - // Class(es) - if ( suffix.length === 0 ) { - v = elem.classList; - if ( v ) { - i = v.length || 0; - while ( i-- ) { - suffix.push('.' + cssEscape(v.item(i))); - } - } - } - - // Tag name - if ( suffix.length === 0 ) { - prefix = tagName; - } - - // Attributes (depends on tag name) - var attributes = [], attr; - switch ( tagName ) { - case 'a': - v = elem.getAttribute('href'); - if ( v ) { - v = v.replace(/\?.*$/, ''); - if ( v.length ) { - attributes.push({ k: 'href', v: v }); - } - } - break; - case 'img': - v = elem.getAttribute('alt'); - if ( v && v.length !== 0 ) { - attributes.push({ k: 'alt', v: v }); - } - break; - default: - break; - } - while ( (attr = attributes.pop()) ) { - if ( attr.v.length === 0 ) { - continue; - } - suffix.push('[', attr.k, '="', cssEscape(attr.v, true), '"]'); - } - - var selector = prefix + suffix.join(''); - - // https://github.com/chrisaljoudi/uBlock/issues/637 - // If the selector is still ambiguous at this point, further narrow using - // `nth-of-type`. It is preferable to use `nth-of-type` as opposed to - // `nth-child`, as `nth-of-type` is less volatile. - var parent = elem.parentElement; - if ( elementsFromSelector(cssScope + selector, parent).length > 1 ) { - i = 1; - while ( elem.previousElementSibling !== null ) { - elem = elem.previousElementSibling; - if ( elem.localName !== tagName ) { - continue; - } - i++; - } - selector += ':nth-of-type(' + i + ')'; - } - - return selector; -}; - -/******************************************************************************/ - -var cosmeticFilterFromTarget = function(nid, coarseSelector) { - var elems = elementsFromSelector(coarseSelector); - var target = null; - var i = elems.length; - while ( i-- ) { - if ( nodeToIdMap.get(elems[i]) === nid ) { - target = elems[i]; - break; - } - } - if ( target === null ) { - return coarseSelector; - } - // Find the most concise selector from the target node - var segments = [], segment; - var node = target; - while ( node !== document.body ) { - segment = cosmeticFilterFromNode(node); - segments.unshift(segment); - if ( segment.charAt(0) === '#' ) { - break; - } - node = node.parentElement; - } - var fineSelector = segments.join(' > '); - if ( fineSelector.charAt(0) === '#' ) { - return fineSelector; - } - if ( fineSelector.charAt(0) === '.' && elementsFromSelector(fineSelector).length === 1 ) { - return fineSelector; - } - return 'body > ' + fineSelector; -}; - -/******************************************************************************/ - var cosmeticFilterMapper = (function() { // https://github.com/gorhill/uBlock/issues/546 var matchesFnName; @@ -687,65 +503,58 @@ var cosmeticFilterMapper = (function() { } var nodesFromStyleTag = function(rootNode) { - var filterMap = nodeToCosmeticFilterMap, - selectors, selector, - nodes, node, - i, j; - - // CSS-based selectors: simple one. - selectors = vAPI.domFilterer.simpleHideSelectors.entries; - i = selectors.length; - while ( i-- ) { - selector = selectors[i]; - if ( filterMap.has(rootNode) === false && rootNode[matchesFnName](selector) ) { - filterMap.set(rootNode, selector); - } - nodes = rootNode.querySelectorAll(selector); - j = nodes.length; - while ( j-- ) { - node = nodes[j]; - if ( filterMap.has(node) === false ) { - filterMap.set(node, selector); - } - } - } + var filterMap = roRedNodes, + entry, selector, canonical, nodes, node; - // CSS-based selectors: complex one (must query from doc root). - selectors = vAPI.domFilterer.complexHideSelectors.entries; - i = selectors.length; - while ( i-- ) { - selector = selectors[i]; - nodes = document.querySelectorAll(selector); - j = nodes.length; - while ( j-- ) { - node = nodes[j]; - if ( filterMap.has(node) === false ) { - filterMap.set(node, selector); + var details = vAPI.domFilterer.getAllSelectors(); + + // Declarative selectors. + for ( entry of (details.declarative || []) ) { + for ( selector of entry[0].split(',\n') ) { + canonical = selector; + if ( entry[1] !== 'display:none!important;' ) { + canonical += ':style(' + entry[1] + ')'; + } + if ( reHasCSSCombinators.test(selector) ) { + nodes = document.querySelectorAll(selector); + } else { + if ( + filterMap.has(rootNode) === false && + rootNode[matchesFnName](selector) + ) { + filterMap.set(rootNode, canonical); + } + nodes = rootNode.querySelectorAll(selector); + } + for ( node of nodes ) { + if ( filterMap.has(node) === false ) { + filterMap.set(node, canonical); + } } } } - // Non-CSS selectors. - var runJobCallback = function(node, pfilter) { - if ( filterMap.has(node) === false ) { - filterMap.set(node, pfilter.raw); + // Procedural selectors. + for ( entry of (details.procedural || []) ) { + nodes = entry.exec(); + for ( node of nodes ) { + // Upgrade declarative selector to procedural one + filterMap.set(node, entry.raw); } - }; - vAPI.domFilterer.proceduralSelectors.forEachNode(runJobCallback); + } }; var incremental = function(rootNode) { - vAPI.domFilterer.userCSS.toggle(false); nodesFromStyleTag(rootNode); }; var reset = function() { - nodeToCosmeticFilterMap = new WeakMap(); + roRedNodes = new Map(); incremental(document.documentElement); }; var shutdown = function() { - vAPI.domFilterer.userCSS.toggle(true); + vAPI.domFilterer.toggle(true); }; return { @@ -821,126 +630,122 @@ var getSvgRootChildren = function() { } }; -var highlightElements = function(scrollTo) { - var wv = pickerRoot.contentWindow.innerWidth; - var hv = pickerRoot.contentWindow.innerHeight; - var ocean = ['M0 0h' + wv + 'v' + hv + 'h-' + wv, 'z'], islands; - var elems, elem, rect, poly; +var highlightElements = function() { + var islands; + var elem, rect, poly; var xl, xr, yt, yb, w, h, ws; - var xlu = Number.MAX_VALUE, xru = 0, ytu = Number.MAX_VALUE, ybu = 0; - var lists = highlightedElementLists; var svgRootChildren = getSvgRootChildren(); - for ( var i = 0; i < lists.length; i++ ) { - elems = lists[i]; - islands = []; - for ( var j = 0; j < elems.length; j++ ) { - elem = elems[j]; - if ( elem === pickerRoot ) { - continue; - } - if ( typeof elem.getBoundingClientRect !== 'function' ) { - continue; - } - - rect = elem.getBoundingClientRect(); - xl = rect.left; - xr = rect.right; - w = rect.width; - yt = rect.top; - yb = rect.bottom; - h = rect.height; - - ws = w.toFixed(1); - poly = 'M' + xl.toFixed(1) + ' ' + yt.toFixed(1) + - 'h' + ws + - 'v' + h.toFixed(1) + - 'h-' + ws + - 'z'; - ocean.push(poly); - islands.push(poly); - - if ( !scrollTo ) { - continue; - } - - if ( xl < xlu ) { xlu = xl; } - if ( xr > xru ) { xru = xr; } - if ( yt < ytu ) { ytu = yt; } - if ( yb > ybu ) { ybu = yb; } - } - svgRootChildren[i+1].setAttribute('d', islands.join('') || 'M0 0'); - } - - svgRoot.firstElementChild.setAttribute('d', ocean.join('')); - - if ( !scrollTo ) { - return; - } - - // Highlighted area completely within viewport - if ( xlu >= 0 && xru <= wv && ytu >= 0 && ybu <= hv ) { - return; - } - - var dx = 0, dy = 0; - - if ( xru > wv ) { - dx = xru - wv; - xlu -= dx; - } - if ( xlu < 0 ) { - dx += xlu; - } - if ( ybu > hv ) { - dy = ybu - hv; - ytu -= dy; - } - if ( ytu < 0 ) { - dy += ytu; - } - - if ( dx !== 0 || dy !== 0 ) { - window.scrollBy(dx, dy); - } + islands = []; + for ( elem of rwRedNodes.keys() ) { + if ( elem === pickerRoot ) { continue; } + if ( rwGreenNodes.has(elem) ) { continue; } + if ( typeof elem.getBoundingClientRect !== 'function' ) { continue; } + rect = elem.getBoundingClientRect(); + xl = rect.left; + xr = rect.right; + w = rect.width; + yt = rect.top; + yb = rect.bottom; + h = rect.height; + ws = w.toFixed(1); + poly = 'M' + xl.toFixed(1) + ' ' + yt.toFixed(1) + + 'h' + ws + + 'v' + h.toFixed(1) + + 'h-' + ws + + 'z'; + islands.push(poly); + } + svgRootChildren[0].setAttribute('d', islands.join('') || 'M0 0'); + + islands = []; + for ( elem of rwGreenNodes ) { + if ( typeof elem.getBoundingClientRect !== 'function' ) { continue; } + rect = elem.getBoundingClientRect(); + xl = rect.left; + xr = rect.right; + w = rect.width; + yt = rect.top; + yb = rect.bottom; + h = rect.height; + ws = w.toFixed(1); + poly = 'M' + xl.toFixed(1) + ' ' + yt.toFixed(1) + + 'h' + ws + + 'v' + h.toFixed(1) + + 'h-' + ws + + 'z'; + islands.push(poly); + } + svgRootChildren[1].setAttribute('d', islands.join('') || 'M0 0'); + + islands = []; + for ( elem of roRedNodes.keys() ) { + if ( elem === pickerRoot ) { continue; } + if ( rwGreenNodes.has(elem) ) { continue; } + if ( typeof elem.getBoundingClientRect !== 'function' ) { continue; } + rect = elem.getBoundingClientRect(); + xl = rect.left; + xr = rect.right; + w = rect.width; + yt = rect.top; + yb = rect.bottom; + h = rect.height; + ws = w.toFixed(1); + poly = 'M' + xl.toFixed(1) + ' ' + yt.toFixed(1) + + 'h' + ws + + 'v' + h.toFixed(1) + + 'h-' + ws + + 'z'; + islands.push(poly); + } + svgRootChildren[2].setAttribute('d', islands.join('') || 'M0 0'); + + islands = []; + for ( elem of blueNodes ) { + if ( elem === pickerRoot ) { continue; } + if ( typeof elem.getBoundingClientRect !== 'function' ) { continue; } + rect = elem.getBoundingClientRect(); + xl = rect.left; + xr = rect.right; + w = rect.width; + yt = rect.top; + yb = rect.bottom; + h = rect.height; + ws = w.toFixed(1); + poly = 'M' + xl.toFixed(1) + ' ' + yt.toFixed(1) + + 'h' + ws + + 'v' + h.toFixed(1) + + 'h-' + ws + + 'z'; + islands.push(poly); + } + svgRootChildren[3].setAttribute('d', islands.join('') || 'M0 0'); }; /******************************************************************************/ -var onScrolled = function() { - highlightElements(); -}; - -/******************************************************************************/ - -var resetToggledNodes = function() { - for ( var entry of toggledNodes ) { - if ( entry[1].show ) { - showNode(entry[0], entry[1].v1, entry[1].v2); - } else { - hideNode(entry[0]); +var onScrolled = (function() { + var buffered = false; + var timerHandler = function() { + buffered = false; + highlightElements(); + }; + return function() { + if ( buffered === false ) { + window.requestAnimationFrame(timerHandler); + buffered = true; } - } - toggledNodes.clear(); -}; - -/******************************************************************************/ - -var forgetToggledNodes = function() { - toggledNodes.clear(); -}; + }; +})(); /******************************************************************************/ var selectNodes = function(selector, nid) { var nodes = elementsFromSelector(selector); - if ( nid === '' ) { - return nodes; - } - var i = nodes.length; - while ( i-- ) { - if ( nodeToIdMap.get(nodes[i]) === nid ) { - return [nodes[i]]; + if ( nid === '' ) { return nodes; } + for ( var node of nodes ) { + if ( nodeToIdMap.get(node) === nid ) { + return [ node ]; } } return []; @@ -948,154 +753,127 @@ var selectNodes = function(selector, nid) { /******************************************************************************/ -var shutdown = function() { - cosmeticFilterMapper.shutdown(); - resetToggledNodes(); - domLayout.shutdown(); - vAPI.messaging.removeAllChannelListeners('domInspector'); - window.removeEventListener('scroll', onScrolled, true); - document.documentElement.removeChild(pickerRoot); - pickerRoot = svgRoot = null; - highlightedElementLists = [ [], [], [] ]; +var nodesFromFilter = function(selector) { + var out = []; + for ( var entry of roRedNodes ) { + if ( entry[1] === selector ) { + out.push(entry[0]); + } + } + return out; }; /******************************************************************************/ -// original, target = what to do -// any, any = restore saved display property -// any, hidden = set display to `none`, remember original state -// hidden, any = remove display property, don't remember original state -// hidden, hidden = set display to `none` - -var toggleNodes = function(nodes, originalState, targetState) { - var i = nodes.length; - if ( i === 0 ) { - return; - } - var node, details; - while ( i-- ) { - node = nodes[i]; - // originally visible node - if ( originalState ) { - // unhide visible node - if ( targetState ) { - details = toggledNodes.get(node) || {}; - showNode(node, details.v1, details.v2); - toggledNodes.delete(node); - } - // hide visible node - else { - toggledNodes.set(node, { - show: true, - v1: node.style.getPropertyValue('display') || '', - v2: node.style.getPropertyPriority('display') || '' - }); - hideNode(node); - } +var toggleExceptions = function(nodes, targetState) { + for ( var node of nodes ) { + if ( targetState ) { + rwGreenNodes.add(node); + } else { + rwGreenNodes.delete(node); } - // originally hidden node - else { - // show hidden node - if ( targetState ) { - toggledNodes.set(node, { show: false }); - showNode(node, 'initial', 'important'); - } - // hide hidden node - else { - hideNode(node); - toggledNodes.delete(node); - } + } +}; + +var toggleFilter = function(nodes, targetState) { + for ( var node of nodes ) { + if ( targetState ) { + rwRedNodes.delete(node); + } else { + rwRedNodes.add(node); } } }; +var resetToggledNodes = function() { + rwGreenNodes.clear(); + rwRedNodes.clear(); +}; + // https://www.youtube.com/watch?v=L5jRewnxSBY /******************************************************************************/ -var showNode = function(node, v1, v2) { - vAPI.domFilterer.showNode(node); - if ( !v1 ) { - node.style.removeProperty('display'); +var start = function() { + var onReady = function(ev) { + if ( ev ) { + document.removeEventListener(ev.type, onReady); + } + vAPI.messaging.sendTo(loggerConnectionId, domLayout.get()); + vAPI.domFilterer.toggle(false, highlightElements); + }; + if ( document.readyState === 'loading' ) { + document.addEventListener('DOMContentLoaded', onReady); } else { - node.style.setProperty('display', v1, v2); + onReady(); } }; /******************************************************************************/ -var hideNode = function(node) { - vAPI.domFilterer.unshowNode(node); +var shutdown = function() { + cosmeticFilterMapper.shutdown(); + domLayout.shutdown(); + vAPI.messaging.disconnectFrom(loggerConnectionId); + window.removeEventListener('scroll', onScrolled, true); + document.documentElement.removeChild(pickerRoot); + pickerRoot = svgRoot = null; }; /******************************************************************************/ /******************************************************************************/ var onMessage = function(request) { - var response; + var response, + nodes; switch ( request.what ) { case 'commitFilters': - resetToggledNodes(); - toggleNodes(selectNodes(request.hide, ''), true, false); - toggleNodes(selectNodes(request.unhide, ''), false, true); - forgetToggledNodes(); - highlightedElementLists = [ [], [], [] ]; highlightElements(); break; - case 'cookFilters': - response = cosmeticFilterFromEntries(request.entries); - break; - case 'domLayout': - response = domLayout.get(request.fingerprint); + response = domLayout.get(); + highlightElements(); break; case 'highlightMode': - svgRoot.classList.toggle('invert', request.invert); + //svgRoot.classList.toggle('invert', request.invert); break; case 'highlightOne': - highlightedElementLists[0] = selectNodes(request.selector, request.nid); - highlightElements(request.scrollTo); + blueNodes = selectNodes(request.selector, request.nid); + highlightElements(); break; case 'resetToggledNodes': resetToggledNodes(); + highlightElements(); break; case 'showCommitted': - resetToggledNodes(); - highlightedElementLists[0] = []; - highlightedElementLists[1] = selectNodes(request.hide, ''); - highlightedElementLists[2] = selectNodes(request.unhide, ''); - toggleNodes(highlightedElementLists[2], false, true); - highlightElements(true); + blueNodes = []; + // TODO: show only the new filters and exceptions. + highlightElements(); break; case 'showInteractive': - resetToggledNodes(); - toggleNodes(selectNodes(request.hide, ''), true, false); - toggleNodes(selectNodes(request.unhide, ''), false, true); - highlightedElementLists = [ [], [], [] ]; + blueNodes = []; highlightElements(); break; case 'toggleFilter': - highlightedElementLists[0] = selectNodes(request.filter, request.nid); - toggleNodes(highlightedElementLists[0], request.original, request.target); - highlightElements(true); + nodes = selectNodes(request.selector, request.nid); + if ( nodes.length !== 0 ) { nodes[0].scrollIntoView(); } + toggleExceptions(nodesFromFilter(request.filter), request.target); + highlightElements(); break; case 'toggleNodes': - highlightedElementLists[0] = selectNodes(request.selector, request.nid); - toggleNodes(highlightedElementLists[0], request.original, request.target); - highlightElements(true); - break; - - case 'shutdown': - shutdown(); + nodes = selectNodes(request.selector, request.nid); + if ( nodes.length !== 0 ) { nodes[0].scrollIntoView(); } + toggleFilter(nodes, request.target); + highlightElements(); break; default: @@ -1105,42 +883,35 @@ var onMessage = function(request) { return response; }; +var messagingHandler = function(msg) { + switch ( msg.what ) { + case 'connectionAccepted': + loggerConnectionId = msg.id; + start(); + break; + case 'connectionBroken': + shutdown(); + break; + case 'connectionMessage': + onMessage(msg.payload); + break; + } +}; + /******************************************************************************/ // Install DOM inspector widget -pickerRoot = document.createElement('iframe'); -pickerRoot.classList.add(sessionId); -pickerRoot.classList.add('dom-inspector'); -pickerRoot.style.cssText = [ - 'background: transparent', - 'border: 0', - 'border-radius: 0', - 'box-shadow: none', - 'display: block', - 'height: 100%', - 'left: 0', - 'margin: 0', - 'opacity: 1', - 'position: fixed', - 'outline: 0', - 'padding: 0', - 'top: 0', - 'visibility: visible', - 'width: 100%', - 'z-index: 2147483647', - '' -].join(' !important;\n'); - -pickerRoot.onload = function() { - pickerRoot.onload = null; +var bootstrap = function(ev) { + if ( ev ) { + pickerRoot.removeEventListener(ev.type, bootstrap); + } var pickerDoc = this.contentDocument; var style = pickerDoc.createElement('style'); style.textContent = [ 'body {', 'background-color: transparent;', - 'cursor: not-allowed;', '}', 'svg {', 'height: 100%;', @@ -1149,22 +920,22 @@ pickerRoot.onload = function() { 'top: 0;', 'width: 100%;', '}', - 'svg > path:first-child {', - 'fill: rgba(0,0,0,0.75);', - 'fill-rule: evenodd;', + 'svg > path:nth-of-type(1) {', + 'fill: rgba(255,0,0,0.2);', + 'stroke: #F00;', '}', 'svg > path:nth-of-type(2) {', - 'fill: rgba(0,0,255,0.1);', - 'stroke: #FFF;', - 'stroke-width: 0.5px;', + 'fill: rgba(0,255,0,0.2);', + 'stroke: #0F0;', '}', 'svg > path:nth-of-type(3) {', 'fill: rgba(255,0,0,0.2);', 'stroke: #F00;', '}', 'svg > path:nth-of-type(4) {', - 'fill: rgba(0,255,0,0.2);', - 'stroke: #0F0;', + 'fill: rgba(0,0,255,0.1);', + 'stroke: #FFF;', + 'stroke-width: 0.5px;', '}', '' ].join('\n'); @@ -1179,12 +950,34 @@ pickerRoot.onload = function() { window.addEventListener('scroll', onScrolled, true); - highlightElements(); - cosmeticFilterMapper.reset(); - - vAPI.messaging.addChannelListener('domInspector', onMessage); + vAPI.messaging.connectTo('domInspector', 'loggerUI', messagingHandler); }; +pickerRoot = document.createElement('iframe'); +pickerRoot.classList.add(sessionId); +pickerRoot.classList.add('dom-inspector'); +pickerRoot.style.cssText = [ + 'background: transparent', + 'border: 0', + 'border-radius: 0', + 'box-shadow: none', + 'display: block', + 'height: 100%', + 'left: 0', + 'margin: 0', + 'opacity: 1', + 'position: fixed', + 'outline: 0', + 'padding: 0', + 'pointer-events:none;', + 'top: 0', + 'visibility: visible', + 'width: 100%', + 'z-index: 2147483647', + '' +].join(' !important;\n'); + +pickerRoot.addEventListener('load', bootstrap); document.documentElement.appendChild(pickerRoot); /******************************************************************************/ diff --git a/src/js/scriptlets/element-picker.js b/src/js/scriptlets/element-picker.js index 8af6c4f6d0dbe..c24ad44f8698b 100644 --- a/src/js/scriptlets/element-picker.js +++ b/src/js/scriptlets/element-picker.js @@ -1,7 +1,7 @@ /******************************************************************************* uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 Raymond Hill + Copyright (C) 2014-2017 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 @@ -118,12 +118,11 @@ /******************************************************************************/ -if ( typeof vAPI !== 'object' ) { - return; -} - -// don't run in frames -if ( window.top !== window ) { +if ( + window.top !== window || + typeof vAPI !== 'object' || + vAPI.domFilterer instanceof Object === false +) { return; } @@ -131,8 +130,8 @@ var pickerRoot = document.getElementById(vAPI.sessionId); if ( pickerRoot ) { return; } + var pickerBody = null; -var pickerStyle = null; var svgOcean = null; var svgIslands = null; var svgRoot = null; @@ -769,7 +768,7 @@ var filterToDOMInterface = (function() { var elems; if ( o.style ) { elems = document.querySelectorAll(o.style[0]); - lastAction = o.style.join(' '); + lastAction = o.style[0] + ' {' + o.style[1] + '}'; } else if ( o.tasks ) { elems = vAPI.domFilterer.createProceduralFilter(o).exec(); } @@ -1093,7 +1092,15 @@ var filterChoiceFromEvent = function(ev) { /******************************************************************************/ var onDialogClicked = function(ev) { - if ( ev.target === null ) { + if ( ev.isTrusted === false ) { return; } + + // If the dialog is hidden, clicking on it force it to become visible. + if ( dialog.classList.contains('hide') ) { + dialog.classList.add('show'); + dialog.classList.remove('hide'); + } + + else if ( ev.target === null ) { /* do nothing */ } @@ -1162,6 +1169,11 @@ var showDialog = function(options) { options = options || {}; + // Typically the dialog will be forced to be visible when using a + // touch-aware device. + dialog.classList.toggle('show', options.show === true); + dialog.classList.remove('hide'); + // Create lists of candidate filters var populate = function(src, des) { var root = dialog.querySelector(des); @@ -1263,43 +1275,81 @@ var onSvgHovered = (function() { }; })(); -/******************************************************************************/ +/******************************************************************************* + + Swipe right: + If picker not paused: quit picker + If picker paused and dialog visible: hide dialog + If picker paused and dialog not visible: quit picker + + Swipe left: + If picker paused and dialog not visible: show dialog + +*/ var onSvgTouchStartStop = (function() { var startX, startY; return function onTouch(ev) { - ev.preventDefault(); if ( ev.type === 'touchstart' ) { - startX = ev.touches[0].pageX; - startY = ev.touches[0].pageY; + startX = ev.touches[0].screenX; + startY = ev.touches[0].screenY; return; } if ( startX === undefined ) { return; } - var stopX = ev.changedTouches[0].pageX, - stopY = ev.changedTouches[0].pageY, + if ( ev.cancelable === false ) { return; } + var stopX = ev.changedTouches[0].screenX, + stopY = ev.changedTouches[0].screenY, + angle = Math.abs(Math.atan2(stopY - startY, stopX - startX)), distance = Math.sqrt( Math.pow(stopX - startX, 2), Math.pow(stopY - startY, 2) ); - // Swipe = exit element zapper/picker. - if ( distance > 32 ) { - stopPicker(); + // Interpret touch events as a click events if swipe is not valid. + if ( distance < 32 ) { + onSvgClicked({ + type: 'touch', + target: ev.target, + clientX: ev.changedTouches[0].pageX, + clientY: ev.changedTouches[0].pageY, + isTrusted: ev.isTrusted + }); + ev.preventDefault(); return; } - // Interpret touch event as a click. - onSvgClicked({ - type: 'click', - target: ev.target, - clientX: startX, - clientY: startY - }); + if ( distance < 64 ) { return; } + var angleUpperBound = Math.PI * 0.25 * 0.5, + swipeRight = angle < angleUpperBound; + if ( swipeRight === false && angle < Math.PI - angleUpperBound ) { + return; + } + ev.preventDefault(); + // Swipe left. + if ( swipeRight === false ) { + if ( pickerBody.classList.contains('paused') ) { + dialog.classList.remove('hide'); + dialog.classList.add('show'); + } + return; + } + // Swipe right. + if ( + pickerBody.classList.contains('paused') && + dialog.classList.contains('show') + ) { + dialog.classList.remove('show'); + dialog.classList.add('hide'); + return; + } + stopPicker(); }; })(); /******************************************************************************/ var onSvgClicked = function(ev) { + if ( ev.isTrusted === false ) { return; } + // If zap mode, highlight element under mouse, this makes the zapper usable // on touch screens. if ( pickerBody.classList.contains('zap') ) { @@ -1330,7 +1380,7 @@ var onSvgClicked = function(ev) { if ( filtersFrom(ev.clientX, ev.clientY) === 0 ) { return; } - showDialog(); + showDialog({ show: ev.type === 'touch' }); }; /******************************************************************************/ @@ -1397,14 +1447,15 @@ var stopPicker = function() { candidateElements = []; bestCandidateFilter = null; - if ( pickerRoot === null ) { - return; - } + if ( pickerRoot === null ) { return; } // https://github.com/gorhill/uBlock/issues/2060 - if ( vAPI.userCSS ) { - vAPI.userCSS.remove(pickerStyle.textContent); + if ( vAPI.domFilterer instanceof Object ) { + vAPI.userStylesheet.remove(pickerCSS1); + vAPI.userStylesheet.remove(pickerCSS2); + vAPI.userStylesheet.apply(); } + vAPI.domFilterer.unexcludeNode(pickerRoot); window.removeEventListener('scroll', onScrolled, true); pickerRoot.contentWindow.removeEventListener('keydown', onKeyPressed, true); @@ -1414,9 +1465,8 @@ var stopPicker = function() { svgRoot.removeEventListener('click', onSvgClicked); svgRoot.removeEventListener('touchstart', onSvgTouchStartStop); svgRoot.removeEventListener('touchend', onSvgTouchStartStop); - pickerStyle.parentNode.removeChild(pickerStyle); pickerRoot.parentNode.removeChild(pickerRoot); - pickerRoot.onload = null; + pickerRoot.removeEventListener('load', stopPicker); pickerRoot = pickerBody = dialog = @@ -1429,7 +1479,7 @@ var stopPicker = function() { /******************************************************************************/ var startPicker = function(details) { - pickerRoot.onload = stopPicker; + pickerRoot.addEventListener('load', stopPicker); var frameDoc = pickerRoot.contentDocument; var parsedDom = (new DOMParser()).parseFromString( @@ -1534,9 +1584,22 @@ var startPicker = function(details) { /******************************************************************************/ +var bootstrapPicker = function() { + pickerRoot.removeEventListener('load', bootstrapPicker); + vAPI.shutdown.add(stopPicker); + vAPI.messaging.send( + 'elementPicker', + { what: 'elementPickerArguments' }, + startPicker + ); +}; + +/******************************************************************************/ + pickerRoot = document.createElement('iframe'); pickerRoot.id = vAPI.sessionId; -pickerRoot.style.cssText = [ + +var pickerCSSStyle = [ 'background: transparent', 'border: 0', 'border-radius: 0', @@ -1546,6 +1609,7 @@ pickerRoot.style.cssText = [ 'left: 0', 'margin: 0', 'max-height: none', + 'max-width: none', 'opacity: 1', 'outline: 0', 'padding: 0', @@ -1556,43 +1620,32 @@ pickerRoot.style.cssText = [ 'z-index: 2147483647', '' ].join(' !important;'); +pickerRoot.style.cssText = pickerCSSStyle; -// https://github.com/gorhill/uBlock/issues/1529 -// In addition to inline styles, harden the element picker styles by using -// a dedicated style tag. -pickerStyle = document.createElement('style'); -pickerStyle.textContent = [ +var pickerCSS1 = [ '#' + pickerRoot.id + ' {', - pickerRoot.style.cssText, - '}', + pickerCSSStyle, + '}' +].join('\n'); +var pickerCSS2 = [ '[' + pickerRoot.id + '-clickblind] {', 'pointer-events: none !important;', - '}', - '' + '}' ].join('\n'); -document.documentElement.appendChild(pickerStyle); -// https://github.com/gorhill/uBlock/issues/2060 -if ( vAPI.domFilterer ) { - pickerRoot[vAPI.domFilterer.getExcludeId()] = true; -} -if ( vAPI.userCSS ) { - vAPI.userCSS.add(pickerStyle.textContent); -} +// https://github.com/gorhill/uBlock/issues/1529 +// In addition to inline styles, harden the element picker styles by using +// dedicated CSS rules. +vAPI.userStylesheet.add(pickerCSS1); +vAPI.userStylesheet.add(pickerCSS2); +vAPI.userStylesheet.apply(); -pickerRoot.onload = function() { - vAPI.shutdown.add(stopPicker); - vAPI.messaging.send( - 'elementPicker', - { what: 'elementPickerArguments' }, - startPicker - ); -}; +// https://github.com/gorhill/uBlock/issues/2060 +vAPI.domFilterer.excludeNode(pickerRoot); +pickerRoot.addEventListener('load', bootstrapPicker); document.documentElement.appendChild(pickerRoot); -// https://www.youtube.com/watch?v=sociXdKnyr8 - /******************************************************************************/ })(); diff --git a/src/js/start.js b/src/js/start.js index 4fabbbac234e0..f28280cf735a0 100644 --- a/src/js/start.js +++ b/src/js/start.js @@ -29,8 +29,6 @@ µBlock.restart = (function() { -//quickProfiler.start('start.js'); - /******************************************************************************/ var µb = µBlock; @@ -85,8 +83,6 @@ var onAllReady = function() { ]); } - //quickProfiler.stop(0); - µb.contextMenu.update(null); µb.firstInstall = false; @@ -127,7 +123,10 @@ var onVersionReady = function(lastVersion) { /******************************************************************************/ var onSelfieReady = function(selfie) { - if ( selfie === null || selfie.magic !== µb.systemSettings.selfieMagic ) { + if ( + selfie instanceof Object === false || + selfie.magic !== µb.systemSettings.selfieMagic + ) { return false; } if ( publicSuffixList.fromSelfie(selfie.publicSuffixList) !== true ) { @@ -221,13 +220,13 @@ var onFirstFetchReady = function(fetched) { onNetWhitelistReady(fetched.netWhitelist); onVersionReady(fetched.version); - // If we have a selfie, skip loading PSL, filters - if ( onSelfieReady(fetched.selfie) ) { - onAllReady(); - return; - } - - µb.loadPublicSuffixList(onPSLReady); + // If we have a selfie, skip loading PSL, filter lists + vAPI.cacheStorage.get('selfie', function(bin) { + if ( bin instanceof Object && onSelfieReady(bin.selfie) ) { + return onAllReady(); + } + µb.loadPublicSuffixList(onPSLReady); + }); }; /******************************************************************************/ @@ -266,7 +265,6 @@ var onSelectedFilterListsLoaded = function() { 'lastBackupFile': '', 'lastBackupTime': 0, 'netWhitelist': µb.netWhitelistDefault, - 'selfie': null, 'selfieMagic': '', 'version': '0.0.0.0' }; diff --git a/src/js/static-net-filtering.js b/src/js/static-net-filtering.js index 03c027317ff02..c32281520299c 100644 --- a/src/js/static-net-filtering.js +++ b/src/js/static-net-filtering.js @@ -20,7 +20,7 @@ */ /* jshint bitwise: false */ -/* global punycode */ +/* global punycode, HNTrieBuilder */ 'use strict'; @@ -58,6 +58,7 @@ var typeNameToTypeValue = { 'stylesheet': 1 << 4, 'image': 2 << 4, 'object': 3 << 4, + 'object_subrequest': 3 << 4, 'script': 4 << 4, 'xmlhttprequest': 5 << 4, 'sub_frame': 6 << 4, @@ -69,10 +70,12 @@ var typeNameToTypeValue = { 'popunder': 12 << 4, 'main_frame': 13 << 4, // start of 1st-party-only behavorial filtering 'generichide': 14 << 4, - 'inline-script': 15 << 4, - 'data': 16 << 4, // special: a generic data holder - 'redirect': 17 << 4, - 'webrtc': 18 << 4 + 'inline-font': 15 << 4, + 'inline-script': 16 << 4, + 'data': 17 << 4, // special: a generic data holder + 'redirect': 18 << 4, + 'webrtc': 19 << 4, + 'unsupported': 20 << 4 }; var otherTypeBitValue = typeNameToTypeValue.other; @@ -91,18 +94,14 @@ var typeValueToTypeName = { 12: 'popunder', 13: 'document', 14: 'generichide', - 15: 'inline-script', - 16: 'data', - 17: 'redirect', - 18: 'webrtc' + 15: 'inline-font', + 16: 'inline-script', + 17: 'data', + 18: 'redirect', + 19: 'webrtc', + 20: 'unsupported' }; -// All network request types to bitmap -// bring origin to 0 (from 4 -- see typeNameToTypeValue) -// left-shift 1 by the above-calculated value -// subtract 1 to set all type bits -var allNetRequestTypesBitmap = (1 << (otherTypeBitValue >>> 4)) - 1; - var BlockAnyTypeAnyParty = BlockAction | AnyType | AnyParty; var BlockAnyType = BlockAction | AnyType; var BlockAnyParty = BlockAction | AnyParty; @@ -200,7 +199,11 @@ var rawToRegexStr = function(s, anchor) { .replace(me.escape3, '') .replace(me.escape4, '[^ ]*?'); if ( anchor & 0x4 ) { - reStr = '[0-9a-z.-]*?' + reStr; + reStr = ( + reStr.startsWith('\\.') ? + rawToRegexStr.reTextHostnameAnchor2 : + rawToRegexStr.reTextHostnameAnchor1 + ) + reStr; } else if ( anchor & 0x2 ) { reStr = '^' + reStr; } @@ -213,6 +216,8 @@ rawToRegexStr.escape1 = /[.+?${}()|[\]\\]/g; rawToRegexStr.escape2 = /\^/g; rawToRegexStr.escape3 = /^\*|\*$/g; rawToRegexStr.escape4 = /\*/g; +rawToRegexStr.reTextHostnameAnchor1 = '^[a-z-]+://(?:[^/?#]+\\.)?'; +rawToRegexStr.reTextHostnameAnchor2 = '^[a-z-]+://(?:[^/?#]+)?'; var filterFingerprinter = µb.CompiledLineWriter.fingerprint; @@ -232,9 +237,9 @@ var toLogDataInternal = function(categoryBits, tokenHash, filter) { } else if ( categoryBits & 0x004 ) { opts.push('first-party'); } - var type = (categoryBits >>> 4) & 0x1F; - if ( type !== 0 && type !== 16 /* data */ ) { - opts.push(typeValueToTypeName[type]); + var type = categoryBits & 0x1F0; + if ( type !== 0 && type !== typeNameToTypeValue.data ) { + opts.push(typeValueToTypeName[type >>> 4]); } if ( logData.opts !== undefined ) { opts.push(logData.opts); @@ -449,7 +454,7 @@ FilterPlainHostname.prototype.match = function() { FilterPlainHostname.prototype.logData = function() { return { raw: '||' + this.s + '^', - regex: rawToRegexStr(this.s, 0x4), + regex: rawToRegexStr(this.s + '^'), compiled: this.compile() }; }; @@ -534,6 +539,38 @@ registerFilterClass(FilterPlainRightAnchored); /******************************************************************************/ +var FilterExactMatch = function(s) { + this.s = s; +}; + +FilterExactMatch.prototype.match = function(url) { + return url === this.s; +}; + +FilterExactMatch.prototype.logData = function() { + return { + raw: '|' + this.s + '|', + regex: rawToRegexStr(this.s, 0x3), + compiled: this.compile() + }; +}; + +FilterExactMatch.prototype.compile = function() { + return [ this.fid, this.s ]; +}; + +FilterExactMatch.compile = function(details) { + return [ FilterExactMatch.fid, details.f ]; +}; + +FilterExactMatch.load = function(args) { + return new FilterExactMatch(args[1]); +}; + +registerFilterClass(FilterExactMatch); + +/******************************************************************************/ + var FilterPlainHnAnchored = function(s) { this.s = s; }; @@ -623,14 +660,13 @@ FilterGenericHnAnchored.prototype.match = function(url) { if ( this.re === null ) { this.re = new RegExp(rawToRegexStr(this.s, this.anchor)); } - var matchStart = url.search(this.re); - return matchStart !== -1 && isHnAnchored(url, matchStart); + return this.re.test(url); }; FilterGenericHnAnchored.prototype.logData = function() { var out = { raw: '||' + this.s, - regex: this.re.source, + regex: rawToRegexStr(this.s, this.anchor & ~0x4), compiled: this.compile() }; return out; @@ -851,9 +887,9 @@ FilterOriginHitSet.prototype = Object.create(FilterOrigin.prototype, { matchOrigin: { value: function() { if ( this.oneOf === null ) { - this.oneOf = new RegExp('(?:^|\\.)(?:' + this.domainOpt.replace(/\./g, '\\.') + ')$'); + this.oneOf = HNTrieBuilder.fromDomainOpt(this.domainOpt); } - return this.oneOf.test(pageHostnameRegister); + return this.oneOf.matches(pageHostnameRegister); } }, }); @@ -883,9 +919,9 @@ FilterOriginMissSet.prototype = Object.create(FilterOrigin.prototype, { matchOrigin: { value: function() { if ( this.noneOf === null ) { - this.noneOf = new RegExp('(?:^|\\.)(?:' + this.domainOpt.replace(/~/g, '').replace(/\./g, '\\.') + ')$'); + this.noneOf = HNTrieBuilder.fromDomainOpt(this.domainOpt.replace(/~/g, '')); } - return this.noneOf.test(pageHostnameRegister) === false; + return this.noneOf.matches(pageHostnameRegister) === false; } }, }); @@ -925,8 +961,8 @@ FilterOriginMixedSet.prototype = Object.create(FilterOrigin.prototype, { oneOf.push(hostname); } } - this.oneOf = new RegExp('(?:^|\\.)(?:' + oneOf.join('|') + ')$'); - this.noneOf = new RegExp('(?:^|\\.)(?:' + noneOf.join('|') + ')$'); + this.oneOf = HNTrieBuilder.fromIterable(oneOf); + this.noneOf = HNTrieBuilder.fromIterable(noneOf); } }, toDomainOpt: { @@ -938,7 +974,8 @@ FilterOriginMixedSet.prototype = Object.create(FilterOrigin.prototype, { value: function() { if ( this.oneOf === null ) { this.init(); } var needle = pageHostnameRegister; - return this.oneOf.test(needle) && this.noneOf.test(needle) === false; + return this.oneOf.matches(needle) && + this.noneOf.matches(needle) === false; } }, }); @@ -1102,12 +1139,12 @@ FilterHostnameDict.prototype.logData = function() { }; FilterHostnameDict.prototype.compile = function() { - return [ this.fid, µb.setToArray(this.dict) ]; + return [ this.fid, µb.arrayFrom(this.dict) ]; }; FilterHostnameDict.load = function(args) { var f = new FilterHostnameDict(); - f.dict = µb.setFromArray(args[1]); + f.dict = new Set(args[1]); return f; }; @@ -1325,6 +1362,12 @@ var FilterParser = function() { this.reBadCSP = /(?:^|;)\s*report-(?:to|uri)\b/; this.domainOpt = ''; this.noTokenHash = µb.urlTokenizer.tokenHashFromString('*'); + this.unsupportedTypeBit = this.bitFromType('unsupported'); + // All network request types to bitmap + // bring origin to 0 (from 4 -- see typeNameToTypeValue) + // left-shift 1 by the above-calculated value + // subtract 1 to set all type bits + this.allNetRequestTypeBits = (1 << (otherTypeBitValue >>> 4)) - 1; this.reset(); }; @@ -1339,13 +1382,15 @@ FilterParser.prototype.toNormalizedType = { 'document': 'main_frame', 'elemhide': 'generichide', 'font': 'font', + 'genericblock': 'unsupported', 'generichide': 'generichide', 'image': 'image', + 'inline-font': 'inline-font', 'inline-script': 'inline-script', 'media': 'media', 'object': 'object', - 'other': 'other', 'object-subrequest': 'object', + 'other': 'other', 'ping': 'other', 'popunder': 'popunder', 'popup': 'popup', @@ -1353,7 +1398,7 @@ FilterParser.prototype.toNormalizedType = { 'stylesheet': 'stylesheet', 'subdocument': 'sub_frame', 'xmlhttprequest': 'xmlhttprequest', - 'webrtc': 'webrtc', + 'webrtc': 'unsupported', 'websocket': 'websocket' }; @@ -1405,16 +1450,16 @@ FilterParser.prototype.parseTypeOption = function(raw, not) { } // Non-discrete network types can't be negated. - if ( (typeBit & allNetRequestTypesBitmap) === 0 ) { + if ( (typeBit & this.allNetRequestTypeBits) === 0 ) { return; } // Negated type: set all valid network request type bits to 1 if ( - (typeBit & allNetRequestTypesBitmap) !== 0 && - (this.types & allNetRequestTypesBitmap) === 0 + (typeBit & this.allNetRequestTypeBits) !== 0 && + (this.types & this.allNetRequestTypeBits) === 0 ) { - this.types |= allNetRequestTypesBitmap; + this.types |= this.allNetRequestTypeBits; } this.types &= ~typeBit; }; @@ -1680,12 +1725,22 @@ FilterParser.prototype.parse = function(raw) { pos = s.lastIndexOf('$'); if ( pos !== -1 ) { // https://github.com/gorhill/uBlock/issues/952 - // Discard Adguard-specific `$$` filters. + // Discard Adguard-specific `$$` filters. if ( s.indexOf('$$') !== -1 ) { this.unsupported = true; return this; } this.parseOptions(s.slice(pos + 1)); + // https://github.com/gorhill/uBlock/issues/2283 + // Abort if type is only for unsupported types, otherwise + // toggle off `unsupported` bit. + if ( this.types & this.unsupportedTypeBit ) { + this.types &= ~(this.unsupportedTypeBit | this.allNetRequestTypeBits); + if ( this.types === 0 ) { + this.unsupported = true; + return this; + } + } s = s.slice(0, pos); } } @@ -1756,12 +1811,18 @@ FilterParser.prototype.parse = function(raw) { // https://github.com/gorhill/uBlock/issues/1669#issuecomment-224822448 // remove pointless leading *. + // https://github.com/gorhill/uBlock/issues/3034 + // - We can remove anchoring if we need to match all at the start. if ( s.startsWith('*') ) { s = s.replace(/^\*+([^%0-9a-z])/, '$1'); + this.anchor &= ~0x6; } // remove pointless trailing * + // https://github.com/gorhill/uBlock/issues/3034 + // - We can remove anchoring if we need to match all at the end. if ( s.endsWith('*') ) { s = s.replace(/([^%0-9a-z])\*+$/, '$1'); + this.anchor &= ~0x1; } // nothing left? @@ -1947,8 +2008,8 @@ FilterContainer.prototype.freeze = function() { this.fdataLast = null; this.filterLast = null; this.frozen = true; - //console.log(JSON.stringify(Array.from(filterClassHistogram))); - //this.tokenHistogram = new Map(Array.from(this.tokenHistogram).sort(function(a, b) { + //console.log(JSON.stringify(µb.arrayFrom(filterClassHistogram))); + //this.tokenHistogram = new Map(µb.arrayFrom(this.tokenHistogram).sort(function(a, b) { // return a[0].localeCompare(b[0]) || (b[1] - a[1]); //})); }; @@ -2098,6 +2159,8 @@ FilterContainer.prototype.compile = function(raw, writer) { fdata = FilterPlainLeftAnchored.compile(parsed); } else if ( parsed.anchor === 0x1 ) { fdata = FilterPlainRightAnchored.compile(parsed); + } else if ( parsed.anchor === 0x3 ) { + fdata = FilterExactMatch.compile(parsed); } else if ( parsed.tokenBeg === 0 ) { fdata = FilterPlainPrefix0.compile(parsed); } else if ( parsed.tokenBeg === 1 ) { @@ -2201,6 +2264,7 @@ FilterContainer.prototype.fromCompiledContent = function(reader) { filterPairId = FilterPair.fid, filterBucketId = FilterBucket.fid, filterDataHolderId = FilterDataHolder.fid, + redirectTypeValue = typeNameToTypeValue.redirect, args, bits, bucket, entry, tokenHash, fdata, fingerprint; @@ -2215,7 +2279,7 @@ FilterContainer.prototype.fromCompiledContent = function(reader) { // Special cases: delegate to more specialized engines. // Redirect engine. - if ( (bits >>> 4) === 17 ) { + if ( (bits & 0x1F0) === redirectTypeValue ) { µb.redirectEngine.fromCompiledRule(args[1]); continue; } diff --git a/src/js/storage.js b/src/js/storage.js index 9d32ac351dd0b..a9a5d93746e24 100644 --- a/src/js/storage.js +++ b/src/js/storage.js @@ -211,7 +211,7 @@ this.removeFilterList(oldKeys[i]); } } - newKeys = this.setToArray(newSet); + newKeys = this.arrayFrom(newSet); var bin = { selectedFilterLists: newKeys, remoteBlacklists: this.oldDataFromNewListKeys(newKeys) @@ -295,7 +295,7 @@ return haystack.replace( new RegExp( '(^|\\n)' + - needle.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + + µb.escapeRegex(needle) + '(\\n|$)', 'g'), '\n' ).trim(); @@ -342,10 +342,10 @@ } selectedListKeySet.add(assetKey); } - externalLists = this.setToArray(importedSet).sort().join('\n'); + externalLists = this.arrayFrom(importedSet).sort().join('\n'); } - var result = this.setToArray(selectedListKeySet); + var result = this.arrayFrom(selectedListKeySet); if ( externalLists !== this.userSettings.externalLists ) { this.userSettings.externalLists = externalLists; vAPI.storage.set({ externalLists: externalLists }); @@ -371,7 +371,7 @@ } out.add(location); } - return this.setToArray(out); + return this.arrayFrom(out); }; /******************************************************************************/ @@ -439,7 +439,7 @@ selectedListKeys.push(key); continue; } - if ( this.matchCurrentLanguage(list.lang) ) { + if ( this.listMatchesEnvironment(list) ) { selectedListKeys.push(key); list.off = false; } @@ -597,8 +597,6 @@ } this.loadingFilterLists = true; - //quickProfiler.start('µBlock.loadFilterLists()'); - var µb = this, filterlistsCount = 0, loadedListKeys = []; @@ -613,8 +611,6 @@ µb.redirectEngine.freeze(); vAPI.storage.set({ 'availableFilterLists': µb.availableFilterLists }); - //quickProfiler.stop(0); - vAPI.messaging.broadcast({ what: 'staticFilteringDataChanged', parseCosmeticFilters: µb.userSettings.parseAllABPHideFilters, @@ -1073,6 +1069,33 @@ /******************************************************************************/ +// https://github.com/gorhill/uBlock/issues/2344 +// Support mutliple locales per filter list. + +// https://github.com/gorhill/uBlock/issues/3210 +// Support ability to auto-enable a filter list based on user agent. + +µBlock.listMatchesEnvironment = function(details) { + var re; + // Matches language? + if ( typeof details.lang === 'string' ) { + re = this.listMatchesEnvironment.reLang; + if ( re === undefined ) { + re = new RegExp('\\b' + self.navigator.language.slice(0, 2) + '\\b'); + this.listMatchesEnvironment.reLang = re; + } + if ( re.test(details.lang) ) { return true; } + } + // Matches user agent? + if ( typeof details.ua === 'string' ) { + re = new RegExp('\\b' + this.escapeRegex(details.ua) + '\\b', 'i'); + if ( re.test(self.navigator.userAgent) ) { return true; } + } + return false; +}; + +/******************************************************************************/ + µBlock.scheduleAssetUpdater = (function() { var timer, next = 0; return function(updateDelay) { @@ -1200,7 +1223,7 @@ if ( details.entry.content === 'filters' ) { if ( details.entry.off !== true || - this.matchCurrentLanguage(details.entry.lang) + this.listMatchesEnvironment(details.entry) ) { this.saveSelectedFilterLists([ details.assetKey ], true); } diff --git a/src/js/tab.js b/src/js/tab.js index 1454cc16d898c..30a67161320cb 100644 --- a/src/js/tab.js +++ b/src/js/tab.js @@ -1,7 +1,7 @@ /******************************************************************************* uBlock Origin - a browser extension to block requests. - Copyright (C) 2014-2016 Raymond Hill + Copyright (C) 2014-2017 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 @@ -140,7 +140,13 @@ housekeep itself. var PopupCandidate = function(targetTabId, openerTabId) { this.targetTabId = targetTabId; - this.openerTabId = openerTabId; + this.opener = { + tabId: openerTabId, + popunder: false, + trustedURL: openerTabId === µb.mouseEventRegister.tabId ? + µb.mouseEventRegister.url : + '' + }; this.selfDestructionTimer = null; this.launchSelfDestruction(); }; @@ -160,13 +166,20 @@ housekeep itself. }; var popupCandidateTest = function(targetTabId) { - var candidates = popupCandidates, entry; + var candidates = popupCandidates, + entry; for ( var tabId in candidates ) { entry = candidates[tabId]; - if ( targetTabId !== tabId && targetTabId !== entry.openerTabId ) { + if ( targetTabId !== tabId && targetTabId !== entry.opener.tabId ) { continue; } - if ( vAPI.tabs.onPopupUpdated(tabId, entry.openerTabId) === true ) { + // https://github.com/gorhill/uBlock/issues/3129 + // If the trigger is a change in the opener's URL, mark the entry + // as candidate for popunder filtering. + if ( targetTabId === entry.opener.tabId ) { + entry.opener.popunder = true; + } + if ( vAPI.tabs.onPopupUpdated(tabId, entry.opener) === true ) { entry.destroy(); } else { entry.launchSelfDestruction(); @@ -321,11 +334,16 @@ housekeep itself. // tab, there is no longer any ambiguity about which root URL is really // sitting in which tab. TabContext.prototype.commit = function(url) { - if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { - return; + if ( vAPI.isBehindTheSceneTabId(this.tabId) ) { return; } + if ( this.stack.length !== 0 ) { + var top = this.stack[this.stack.length - 1]; + if ( top.url === url && top.committed ) { + return false; + } } this.stack = [new StackEntry(url, true)]; this.update(); + return true; }; TabContext.prototype.getNetFilteringSwitch = function() { @@ -398,8 +416,7 @@ housekeep itself. var entry = tabContexts[tabId]; if ( entry === undefined ) { entry = push(tabId, url); - } else { - entry.commit(url); + } else if ( entry.commit(url) ) { popupCandidateTest(tabId); } return entry; @@ -486,7 +503,6 @@ vAPI.tabs.onUpdated = function(tabId, changeInfo, tab) { if ( !changeInfo.url ) { return; } - µb.tabContextManager.commit(tabId, changeInfo.url); µb.bindTabToPageStats(tabId, 'tabUpdated'); }; @@ -531,27 +547,26 @@ vAPI.tabs.onPopupUpdated = (function() { logData; // https://github.com/gorhill/uBlock/commit/1d448b85b2931412508aa01bf899e0b6f0033626#commitcomment-14944764 - // See if two URLs are different, disregarding scheme -- because the scheme - // can be unilaterally changed by the browser. + // See if two URLs are different, disregarding scheme -- because the + // scheme can be unilaterally changed by the browser. + // https://github.com/gorhill/uBlock/issues/1378 + // Maybe no link element was clicked. + // https://github.com/gorhill/uBlock/issues/3287 + // Do not bail out if the target URL has no hostname. var areDifferentURLs = function(a, b) { - // https://github.com/gorhill/uBlock/issues/1378 - // Maybe no link element was clicked. - if ( b === '' ) { - return true; - } + if ( b === '' ) { return true; } + if ( b.startsWith('about:') ) { return false; } var pos = a.indexOf('://'); - if ( pos === -1 ) { - return false; - } + if ( pos === -1 ) { return false; } a = a.slice(pos); pos = b.indexOf('://'); - if ( pos === -1 ) { - return false; + if ( pos !== -1 ) { + b = b.slice(pos); } - return b.slice(pos) !== a; + return b !== a; }; - var popupMatch = function(openerURL, targetURL, clickedURL, popupType) { + var popupMatch = function(openerURL, targetURL, popupType) { var openerHostname = µb.URI.hostnameFromURI(openerURL), openerDomain = µb.URI.domainFromHostname(openerHostname), result; @@ -583,23 +598,29 @@ vAPI.tabs.onPopupUpdated = (function() { // URL. if ( openerHostname !== '' && targetURL !== 'about:blank' ) { // Check per-site switch first - if ( µb.hnSwitches.evaluateZ('no-popups', openerHostname) === true ) { - if ( - typeof clickedURL === 'string' && - areDifferentURLs(targetURL, clickedURL) - ) { - logData = { - source: 'switch', - raw: 'no-popups: ' + µb.hnSwitches.z + ' true' - }; - return 1; - } + // https://github.com/gorhill/uBlock/issues/3060 + // - The no-popups switch must apply only to popups, not to + // popunders. + if ( + popupType === 'popup' && + µb.hnSwitches.evaluateZ('no-popups', openerHostname) + ) { + logData = { + raw: 'no-popups: ' + µb.hnSwitches.z + ' true', + result: 1, + source: 'switch' + }; + return 1; } // https://github.com/gorhill/uBlock/issues/581 - // Take into account popup-specific rules in dynamic URL filtering, OR - // generic allow rules. - result = µb.sessionURLFiltering.evaluateZ(openerHostname, targetURL, popupType); + // Take into account popup-specific rules in dynamic URL + // filtering, OR generic allow rules. + result = µb.sessionURLFiltering.evaluateZ( + openerHostname, + targetURL, + popupType + ); if ( result === 1 && µb.sessionURLFiltering.type === popupType || result === 2 @@ -609,10 +630,14 @@ vAPI.tabs.onPopupUpdated = (function() { } // https://github.com/gorhill/uBlock/issues/581 - // Take into account `allow` rules in dynamic filtering: `block` rules - // are ignored, as block rules are not meant to block specific types - // like `popup` (just like with static filters). - result = µb.sessionFirewall.evaluateCellZY(openerHostname, context.requestHostname, popupType); + // Take into account `allow` rules in dynamic filtering: `block` + // rules are ignored, as block rules are not meant to block + // specific types like `popup` (just like with static filters). + result = µb.sessionFirewall.evaluateCellZY( + openerHostname, + context.requestHostname, + popupType + ); if ( result === 2 ) { logData = µb.sessionFirewall.toLogData(); return 2; @@ -648,7 +673,7 @@ vAPI.tabs.onPopupUpdated = (function() { if ( logData.token === µb.staticNetFilteringEngine.dotTokenHash ) { return result; } - var re = new RegExp(logData.regex), + var re = new RegExp(logData.regex, 'i'), matches = re.exec(popunderURL); if ( matches === null ) { return 0; } var beg = matches.index, @@ -667,7 +692,7 @@ vAPI.tabs.onPopupUpdated = (function() { }; var popunderMatch = function(openerURL, targetURL) { - var result = popupMatch(targetURL, openerURL, null, 'popunder'); + var result = popupMatch(targetURL, openerURL, 'popunder'); if ( result === 1 ) { return result; } @@ -685,7 +710,7 @@ vAPI.tabs.onPopupUpdated = (function() { result = mapPopunderResult( popunderURL, popunderHostname, - popupMatch(targetURL, popunderURL, null, 'popup') + popupMatch(targetURL, popunderURL, 'popup') ); if ( result !== 0 ) { return result; @@ -699,12 +724,13 @@ vAPI.tabs.onPopupUpdated = (function() { return mapPopunderResult( popunderURL, popunderHostname, - popupMatch(targetURL, popunderURL, null, 'popup') + popupMatch(targetURL, popunderURL, 'popup') ); }; - return function(targetTabId, openerTabId) { + return function(targetTabId, openerDetails) { // Opener details. + var openerTabId = openerDetails.tabId; var tabContext = µb.tabContextManager.lookup(openerTabId); if ( tabContext === null ) { return; } var openerURL = tabContext.rawURL; @@ -738,10 +764,15 @@ vAPI.tabs.onPopupUpdated = (function() { // Popup test. var popupType = 'popup', - result = popupMatch(openerURL, targetURL, µb.mouseURL, 'popup'); + result = 0; + // https://github.com/gorhill/uBlock/issues/2919 + // - If the target tab matches a clicked link, assume it's legit. + if ( areDifferentURLs(targetURL, openerDetails.trustedURL) ) { + result = popupMatch(openerURL, targetURL, 'popup'); + } // Popunder test. - if ( result === 0 ) { + if ( result === 0 && openerDetails.popunder ) { result = popunderMatch(openerURL, targetURL); if ( result === 1 ) { popupType = 'popunder'; @@ -817,7 +848,7 @@ vAPI.tabs.registerListeners(); if ( !pageStore ) { this.updateTitle(tabId); this.pageStoresToken = Date.now(); - return (this.pageStores[tabId] = this.PageStore.factory(tabId)); + return (this.pageStores[tabId] = this.PageStore.factory(tabId, context)); } // https://github.com/chrisaljoudi/uBlock/issues/516 @@ -903,7 +934,7 @@ vAPI.tabs.registerListeners(); if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; } - tabIdToTimer[tabId] = vAPI.setTimeout(updateBadge.bind(this, tabId), 666); + tabIdToTimer[tabId] = vAPI.setTimeout(updateBadge.bind(this, tabId), 701); }; })(); diff --git a/src/js/traffic.js b/src/js/traffic.js index 6b840ee271684..eaea84158b4a6 100644 --- a/src/js/traffic.js +++ b/src/js/traffic.js @@ -41,8 +41,16 @@ var exports = {}; // which blocks everything until all is ready. // This would allow to avoid the permanent special test at the top of // the main onBeforeRequest just to implement this. +// https://github.com/gorhill/uBlock/issues/3130 +// Don't block root frame. + var onBeforeReady = null; +µBlock.onStartCompletedQueue.push(function(callback) { + vAPI.onLoadAllCompleted(); + callback(); +}); + if ( µBlock.hiddenSettings.suspendTabsUntilReady ) { onBeforeReady = (function() { var suspendedTabs = new Set(); @@ -53,17 +61,16 @@ if ( µBlock.hiddenSettings.suspendTabsUntilReady ) { } callback(); }); - return function(tabId) { - if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; } - suspendedTabs.add(tabId); - return true; + return function(details) { + if ( + details.type !== 'main_frame' && + vAPI.isBehindTheSceneTabId(details.tabId) === false + ) { + suspendedTabs.add(details.tabId); + return true; + } }; })(); -} else { - µBlock.onStartCompletedQueue.push(function(callback) { - vAPI.onLoadAllCompleted(); - callback(); - }); } /******************************************************************************/ @@ -71,8 +78,7 @@ if ( µBlock.hiddenSettings.suspendTabsUntilReady ) { // Intercept and filter web requests. var onBeforeRequest = function(details) { - var tabId = details.tabId; - if ( onBeforeReady !== null && onBeforeReady(tabId) ) { + if ( onBeforeReady !== null && onBeforeReady(details) ) { return { cancel: true }; } @@ -86,6 +92,7 @@ var onBeforeRequest = function(details) { } // Special treatment: behind-the-scene requests + var tabId = details.tabId; if ( vAPI.isBehindTheSceneTabId(tabId) ) { return onBeforeBehindTheSceneRequest(details); } @@ -302,23 +309,20 @@ var onBeforeRootFrameRequest = function(details) { /******************************************************************************/ +// https://github.com/gorhill/uBlock/issues/3208 +// Mind case insensitivity. + var toBlockDocResult = function(url, hostname, logData) { - if ( typeof logData.regex !== 'string' ) { return; } - var re = new RegExp(logData.regex), + if ( typeof logData.regex !== 'string' ) { return false; } + var re = new RegExp(logData.regex, 'i'), match = re.exec(url.toLowerCase()); - if ( match === null ) { return ''; } + if ( match === null ) { return false; } // https://github.com/chrisaljoudi/uBlock/issues/1128 // https://github.com/chrisaljoudi/uBlock/issues/1212 // Relax the rule: verify that the match is completely before the path part - if ( - (match.index + match[0].length) <= - (url.indexOf(hostname) + hostname.length + 1) - ) { - return true; - } - - return false; + return (match.index + match[0].length) <= + (url.indexOf(hostname) + hostname.length + 1); }; /******************************************************************************/ @@ -353,9 +357,12 @@ var onBeforeBehindTheSceneRequest = function(details) { // Blocking behind-the-scene requests can break a lot of stuff: prevent // browser updates, prevent extension updates, prevent extensions from // working properly, etc. - // So we filter if and only if the "advanced user" mode is selected - if ( µb.userSettings.advancedUserEnabled ) { - result = pageStore.filterRequestNoCache(context); + // So we filter if and only if the "advanced user" mode is selected. + // https://github.com/gorhill/uBlock/issues/3150 + // Ability to globally block CSP reports MUST also apply to + // behind-the-scene network requests. + if ( µb.userSettings.advancedUserEnabled || requestType === 'csp_report' ) { + result = pageStore.filterRequest(context); } pageStore.journalAddRequest(context.requestHostname, result); @@ -382,6 +389,96 @@ var onBeforeBehindTheSceneRequest = function(details) { /******************************************************************************/ +// https://github.com/gorhill/uBlock/issues/3140 + +var onBeforeMaybeSpuriousCSPReport = function(details) { + var tabId = details.tabId; + + // Ignore behind-the-scene requests. + if ( vAPI.isBehindTheSceneTabId(tabId) ) { return; } + + // Lookup the page store associated with this tab id. + var µb = µBlock, + pageStore = µb.pageStoreFromTabId(tabId); + if ( pageStore === null ) { return; } + + // If uBO is disabled for the page, it can't possibly causes CSP reports + // to be triggered. + if ( pageStore.getNetFilteringSwitch() === false ) { return; } + + // A resource was redirected to a neutered one? + // TODO: mind injected scripts/styles as well. + if ( pageStore.internalRedirectionCount === 0 ) { return; } + + var textDecoder = onBeforeMaybeSpuriousCSPReport.textDecoder; + if ( + textDecoder === undefined && + typeof self.TextDecoder === 'function' + ) { + textDecoder = + onBeforeMaybeSpuriousCSPReport.textDecoder = new TextDecoder(); + } + + // Find out whether the CSP report is a potentially spurious CSP report. + // If from this point on we are unable to parse the CSP report data, the + // safest assumption to protect users is to assume the CSP report is + // spurious. + if ( + textDecoder !== undefined && + details.method === 'POST' + ) { + var raw = details.requestBody && details.requestBody.raw; + if ( + Array.isArray(raw) && + raw.length !== 0 && + raw[0] instanceof Object && + raw[0].bytes instanceof ArrayBuffer + ) { + var data; + try { + data = JSON.parse(textDecoder.decode(raw[0].bytes)); + } catch (ex) { + } + if ( data instanceof Object ) { + var report = data['csp-report']; + if ( report instanceof Object ) { + var blocked = report['blocked-uri'] || report['blockedURI'], + validBlocked = typeof blocked === 'string', + source = report['source-file'] || report['sourceFile'], + validSource = typeof source === 'string'; + if ( + (validBlocked || validSource) && + (!validBlocked || !blocked.startsWith('data')) && + (!validSource || !source.startsWith('data')) + ) { + return; + } + } + } + } + } + + // Potentially spurious CSP report. + if ( µb.logger.isEnabled() ) { + var hostname = µb.URI.hostnameFromURI(details.url); + µb.logger.writeOne( + tabId, + 'net', + { result: 1, source: 'global', raw: 'no-spurious-csp-report' }, + 'csp_report', + details.url, + hostname, + hostname + ); + } + + return { cancel: true }; +}; + +onBeforeMaybeSpuriousCSPReport.textDecoder = undefined; + +/******************************************************************************/ + // To handle: // - inline script tags // - websockets @@ -410,15 +507,24 @@ var onHeadersReceived = function(details) { return foilLargeMediaElement(pageStore, details); } - // https://github.com/gorhill/uBO-Extra/issues/19 - // Turns out scripts must also be considered as potential embedded - // contexts (as workers) and as such we may need to inject content - // security policy directives. - if ( requestType === 'main_frame' || requestType === 'sub_frame' ) { + // https://github.com/gorhill/uBlock/issues/2813 + // Disable the blocking of large media elements if the document is itself + // a media element: the resource was not prevented from loading so no + // point to further block large media elements for the current document. + if ( requestType === 'main_frame' ) { + if ( reMediaContentTypes.test(headerValueFromName('content-type', details.responseHeaders)) ) { + pageStore.allowLargeMediaElementsUntil = Date.now() + 86400000; + } + return injectCSP(pageStore, details); + } + + if ( requestType === 'sub_frame' ) { return injectCSP(pageStore, details); } }; +var reMediaContentTypes = /^(?:audio|image|video)\//; + /******************************************************************************/ var injectCSP = function(pageStore, details) { @@ -434,20 +540,17 @@ var injectCSP = function(pageStore, details) { if ( details.type !== 'main_frame' ) { context.pageHostname = context.pageDomain = context.requestHostname; } + context.requestURL = requestURL; // Start collecting policies >>>>>>>> // ======== built-in policies + var builtinDirectives = []; + context.requestType = 'inline-script'; - context.requestURL = requestURL; - if ( pageStore.filterRequestNoCache(context) === 1 ) { - cspSubsets[0] = "script-src 'unsafe-eval' * blob: data:"; - // https://bugs.chromium.org/p/chromium/issues/detail?id=669086 - // TODO: remove when most users are beyond Chromium v56 - if ( vAPI.chromiumVersion < 57 ) { - cspSubsets[0] += '; frame-src *'; - } + if ( pageStore.filterRequest(context) === 1 ) { + builtinDirectives.push("script-src 'unsafe-eval' * blob: data:"); } if ( loggerEnabled === true ) { logger.writeOne( @@ -461,6 +564,28 @@ var injectCSP = function(pageStore, details) { ); } + // https://github.com/gorhill/uBlock/issues/1539 + // - Use a CSP to also forbid inline fonts if remote fonts are blocked. + context.requestType = 'inline-font'; + if ( pageStore.filterRequest(context) === 1 ) { + builtinDirectives.push('font-src *'); + if ( loggerEnabled === true ) { + logger.writeOne( + tabId, + 'net', + pageStore.logData, + 'inline-font', + requestURL, + context.rootHostname, + context.pageHostname + ); + } + } + + if ( builtinDirectives.length !== 0 ) { + cspSubsets[0] = builtinDirectives.join('; '); + } + // ======== filter-based policies // Static filtering. @@ -603,6 +728,11 @@ var headerIndexFromName = function(headerName, headers) { return -1; }; +var headerValueFromName = function(headerName, headers) { + var i = headerIndexFromName(headerName, headers); + return i !== -1 ? headers[i].value : ''; +}; + /******************************************************************************/ vAPI.net.onBeforeRequest = { @@ -614,6 +744,10 @@ vAPI.net.onBeforeRequest = { callback: onBeforeRequest }; +vAPI.net.onBeforeMaybeSpuriousCSPReport = { + callback: onBeforeMaybeSpuriousCSPReport +}; + vAPI.net.onHeadersReceived = { urls: [ 'http://*/*', diff --git a/src/js/ublock.js b/src/js/ublock.js index 924802da72d56..9896a43c64af0 100644 --- a/src/js/ublock.js +++ b/src/js/ublock.js @@ -304,6 +304,7 @@ var reInvalidHostname = /[^a-z0-9.\-\[\]:]/, us.noCosmeticFiltering = this.hnSwitches.evaluate('no-cosmetic-filtering', '*') === 1; us.noLargeMedia = this.hnSwitches.evaluate('no-large-media', '*') === 1; us.noRemoteFonts = this.hnSwitches.evaluate('no-remote-fonts', '*') === 1; + us.noCSPReports = this.hnSwitches.evaluate('no-csp-reports', '*') === 1; return us; } @@ -371,6 +372,11 @@ var reInvalidHostname = /[^a-z0-9.\-\[\]:]/, this.saveHostnameSwitches(); } break; + case 'noCSPReports': + if ( this.hnSwitches.toggle('no-csp-reports', '*', value ? 1 : 0) ) { + this.saveHostnameSwitches(); + } + break; case 'prefetchingDisabled': if ( this.privacySettingsSupported ) { vAPI.browserSettings.set({ 'prefetching': !value }); @@ -493,11 +499,9 @@ var reInvalidHostname = /[^a-z0-9.\-\[\]:]/, ); break; case 'no-large-media': - if ( details.state === false ) { - var pageStore = this.pageStoreFromTabId(details.tabId); - if ( pageStore !== null ) { - pageStore.temporarilyAllowLargeMediaElements(); - } + var pageStore = this.pageStoreFromTabId(details.tabId); + if ( pageStore !== null ) { + pageStore.temporarilyAllowLargeMediaElements(!details.state); } break; } @@ -529,7 +533,7 @@ var reInvalidHostname = /[^a-z0-9.\-\[\]:]/, /******************************************************************************/ µBlock.scriptlets = (function() { - var pendingEntries = Object.create(null); + var pendingEntries = new Map(); var Entry = function(tabId, scriptlet, callback) { this.tabId = tabId; @@ -541,8 +545,9 @@ var reInvalidHostname = /[^a-z0-9.\-\[\]:]/, Entry.prototype.service = function(response) { if ( this.timer !== null ) { clearTimeout(this.timer); + this.timer = null; } - delete pendingEntries[makeKey(this.tabId, this.scriptlet)]; + pendingEntries.delete(makeKey(this.tabId, this.scriptlet)); this.callback(response); }; @@ -552,10 +557,8 @@ var reInvalidHostname = /[^a-z0-9.\-\[\]:]/, var report = function(tabId, scriptlet, response) { var key = makeKey(tabId, scriptlet); - var entry = pendingEntries[key]; - if ( entry === undefined ) { - return; - } + var entry = pendingEntries.get(key); + if ( entry === undefined ) { return; } entry.service(response); }; @@ -565,20 +568,25 @@ var reInvalidHostname = /[^a-z0-9.\-\[\]:]/, callback(); return; } - var key = makeKey(tabId, scriptlet); - if ( pendingEntries[key] !== undefined ) { - callback(); + var key = makeKey(tabId, scriptlet), + entry = pendingEntries.get(key); + if ( entry !== undefined ) { + if ( callback !== entry.callback ) { + callback(); + } return; } - pendingEntries[key] = new Entry(tabId, scriptlet, callback); + pendingEntries.set(key, new Entry(tabId, scriptlet, callback)); } - vAPI.tabs.injectScript(tabId, { file: 'js/scriptlets/' + scriptlet + '.js' }); + vAPI.tabs.injectScript(tabId, { + file: '/js/scriptlets/' + scriptlet + '.js' + }); }; // TODO: think about a callback mechanism. var injectDeep = function(tabId, scriptlet) { vAPI.tabs.injectScript(tabId, { - file: 'js/scriptlets/' + scriptlet + '.js', + file: '/js/scriptlets/' + scriptlet + '.js', allFrames: true }); }; diff --git a/src/js/uritools.js b/src/js/uritools.js index 57c4f5177b872..f624d891edf13 100644 --- a/src/js/uritools.js +++ b/src/js/uritools.js @@ -37,6 +37,8 @@ Naming convention from https://en.wikipedia.org/wiki/URI_scheme#Examples /******************************************************************************/ +var punycode = self.punycode; + // Favorite regex tool: http://regex101.com/ // Ref: @@ -52,6 +54,7 @@ var reAuthorityFromURI = /^(?:[^:\/?#]+:)?(\/\/[^\/?#]+)/; var reOriginFromURI = /^(?:[^:\/?#]+:)?(?:\/\/[^\/?#]+)/; var reCommonHostnameFromURL = /^https?:\/\/([0-9a-z_][0-9a-z._-]*[0-9a-z])\//; var rePathFromURI = /^(?:[^:\/?#]+:)?(?:\/\/[^\/?#]*)?([^?#]*)/; +var reMustNormalizeHostname = /[^0-9a-z._-]/; // These are to parse authority field, not parsed by above official regex // IPv6 is seen as an exception: a non-compatible IPv6 is first tried, and @@ -61,11 +64,11 @@ var rePathFromURI = /^(?:[^:\/?#]+:)?(?:\/\/[^\/?#]*)?([^?#]*)/; // https://github.com/gorhill/httpswitchboard/issues/211 // "While a hostname may not contain other characters, such as the // "underscore character (_), other DNS names may contain the underscore" -var reHostPortFromAuthority = /^(?:[^@]*@)?([0-9a-z._-]*)(:\d*)?$/i; +var reHostPortFromAuthority = /^(?:[^@]*@)?([^:]*)(:\d*)?$/; var reIPv6PortFromAuthority = /^(?:[^@]*@)?(\[[0-9a-f:]*\])(:\d*)?$/i; var reHostFromNakedAuthority = /^[0-9a-z._-]+[0-9a-z]$/i; -var reHostFromAuthority = /^(?:[^@]*@)?([0-9a-z._-]+)(?::\d*)?$/i; +var reHostFromAuthority = /^(?:[^@]*@)?([^:]+)(?::\d*)?$/; var reIPv6FromAuthority = /^(?:[^@]*@)?(\[[0-9a-f:]+\])(?::\d*)?$/i; // Coarse (but fast) tests @@ -250,35 +253,34 @@ URI.authorityFromURI = function(uri) { // The most used function, so it better be fast. +// https://github.com/gorhill/uBlock/issues/1559 +// See http://en.wikipedia.org/wiki/FQDN +// https://bugzilla.mozilla.org/show_bug.cgi?id=1360285 +// Revisit punycode dependency when above issue is fixed in Firefox. + URI.hostnameFromURI = function(uri) { var matches = reCommonHostnameFromURL.exec(uri); - if ( matches ) { - return matches[1]; - } + if ( matches !== null ) { return matches[1]; } matches = reAuthorityFromURI.exec(uri); - if ( !matches ) { - return ''; - } + if ( matches === null ) { return ''; } var authority = matches[1].slice(2); // Assume very simple authority (most common case for µBlock) if ( reHostFromNakedAuthority.test(authority) ) { return authority.toLowerCase(); } matches = reHostFromAuthority.exec(authority); - if ( !matches ) { + if ( matches === null ) { matches = reIPv6FromAuthority.exec(authority); - if ( !matches ) { - return ''; - } + if ( matches === null ) { return ''; } } - // http://en.wikipedia.org/wiki/FQDN - // Also: - // - https://github.com/gorhill/uBlock/issues/1559 var hostname = matches[1]; while ( hostname.endsWith('.') ) { hostname = hostname.slice(0, -1); } - return hostname.toLowerCase(); + if ( reMustNormalizeHostname.test(hostname) ) { + hostname = punycode.toASCII(hostname.toLowerCase()); + } + return hostname; }; /******************************************************************************/ diff --git a/src/js/utils.js b/src/js/utils.js index a8146e1b8620f..fdde0d3ecdeba 100644 --- a/src/js/utils.js +++ b/src/js/utils.js @@ -320,34 +320,16 @@ /******************************************************************************/ -µBlock.mapToArray = typeof Array.from === 'function' +µBlock.arrayFrom = typeof Array.from === 'function' ? Array.from - : function(map) { - var out = []; - for ( var entry of map ) { - out.push(entry); + : function(iterable) { + var out = [], i = 0; + for ( var value of iterable ) { + out[i++] = value; } return out; }; -µBlock.mapFromArray = function(arr) { - return new Map(arr); -}; - -µBlock.setToArray = typeof Array.from === 'function' - ? Array.from - : function(dict) { - var out = []; - for ( var value of dict ) { - out.push(value); - } - return out; - }; - -µBlock.setFromArray = function(arr) { - return new Set(arr); -}; - /******************************************************************************/ µBlock.openNewTab = function(details) { @@ -365,14 +347,48 @@ /******************************************************************************/ -// https://github.com/gorhill/uBlock/issues/2344 +µBlock.MRUCache = function(size) { + this.size = size; + this.array = []; + this.map = new Map(); +}; -µBlock.matchCurrentLanguage = function(s) { - if ( typeof s !== 'string' ) { return false; } - if ( this.matchCurrentLanguage.reLang === undefined ) { - this.matchCurrentLanguage.reLang = new RegExp('\\b' + self.navigator.language.slice(0, 2) + '\\b'); +µBlock.MRUCache.prototype = { + add: function(key, value) { + var found = this.map.has(key); + this.map.set(key, value); + if ( !found ) { + if ( this.array.length === this.size ) { + this.map.delete(this.array.pop()); + } + this.array.unshift(key); + } + }, + remove: function(key) { + if ( this.map.has(key) ) { + this.array.splice(this.array.indexOf(key), 1); + } + }, + lookup: function(key) { + var value = this.map.get(key); + if ( value !== undefined && this.array[0] !== key ) { + this.array.splice(this.array.indexOf(key), 1); + this.array.unshift(key); + } + return value; + }, + reset: function() { + this.array = []; + this.map.clear(); } - return this.matchCurrentLanguage.reLang.test(s); +}; + +/******************************************************************************/ + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions + +µBlock.escapeRegex = function(s) { + return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); }; /******************************************************************************/ diff --git a/src/logger-ui.html b/src/logger-ui.html index bcbd83f06a4d3..9539f44a90e79 100644 --- a/src/logger-ui.html +++ b/src/logger-ui.html @@ -16,15 +16,17 @@