From 52f686977be38d518fec86542669840572ddac57 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 23 Apr 2021 21:39:52 -0400 Subject: [PATCH 1/9] Create pull_request_template.md --- .github/PULL_REQUEST_TEMPLATE/pull_request_template.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE/pull_request_template.md diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md new file mode 100644 index 00000000..ac293972 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -0,0 +1 @@ +- [ ] I agree to license my contribution under LGPL-3.0 **or** my contribution is from another project with a license compatible with LGPL-3.0 From 00045aa9d7b22720b834043a6d2b9b921b5c5829 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Fri, 23 Apr 2021 21:43:36 -0400 Subject: [PATCH 2/9] Move pull request template --- .github/{PULL_REQUEST_TEMPLATE => }/pull_request_template.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{PULL_REQUEST_TEMPLATE => }/pull_request_template.md (100%) diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/pull_request_template.md similarity index 100% rename from .github/PULL_REQUEST_TEMPLATE/pull_request_template.md rename to .github/pull_request_template.md From 90c78af59f0e9ea356a190574a7be6ae921b5fae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Apr 2021 15:52:26 +0000 Subject: [PATCH 3/9] Bump ssri from 6.0.1 to 6.0.2 Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/npm/ssri/releases) - [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md) - [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2) Signed-off-by: dependabot[bot] --- package-lock.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7041ec66..f4243ea7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4554,6 +4554,15 @@ "requires": { "glob": "^7.1.3" } + }, + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } } } }, @@ -5488,15 +5497,6 @@ "randombytes": "^2.1.0" } }, - "ssri": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", - "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -14497,12 +14497,12 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "minipass": "^3.1.1" } }, "stack-utils": { From 7498c6cf1bab0e4abf90af1218277546d46078c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 May 2021 20:21:58 +0000 Subject: [PATCH 4/9] Bump hosted-git-info from 2.8.5 to 2.8.9 Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.8.5 to 2.8.9. - [Release notes](https://github.com/npm/hosted-git-info/releases) - [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md) - [Commits](https://github.com/npm/hosted-git-info/compare/v2.8.5...v2.8.9) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f4243ea7..a13a209c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7984,9 +7984,9 @@ } }, "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "html-encoding-sniffer": { "version": "2.0.1", From bf84139ea7530f2b03fecc5b8429a4f818d99e8b Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Wed, 24 Mar 2021 20:13:33 -0400 Subject: [PATCH 5/9] Prompt to accept youtube.com permission if video info fails to load Should fix #698, #687, #611 and #635 (cherry picked from commit 3ff5fdb3a10d09de34d979f696133c17b5b58c31) --- public/_locales/en/messages.json | 15 ++ public/permissions/index.html | 28 +++ public/permissions/styles.css | 356 +++++++++++++++++++++++++++++++ src/background.ts | 3 + src/content.ts | 23 +- src/options.ts | 2 +- src/permissions.ts | 33 +++ src/utils.ts | 41 ++-- webpack/webpack.common.js | 3 +- 9 files changed, 483 insertions(+), 21 deletions(-) create mode 100644 public/permissions/index.html create mode 100644 public/permissions/styles.css create mode 100644 src/permissions.ts diff --git a/public/_locales/en/messages.json b/public/_locales/en/messages.json index 51eceee8..fbf06ec7 100644 --- a/public/_locales/en/messages.json +++ b/public/_locales/en/messages.json @@ -594,9 +594,24 @@ "adblockerIssue": { "message": "It seems that something is blocking SponsorBlock's ability to get video data. This is probably your ad blocker. Please check https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests" }, + "youtubePermissionRequest": { + "message": "It seems that SponsorBlock is unable to reach the YouTube API. To fix this, accept the permission prompt that will appear next, wait a few seconds, and then reload the page." + }, + "acceptPermission": { + "message": "Accept permission" + }, + "permissionRequestSuccess": { + "message": "Permission success succeeded!" + }, + "permissionRequestFailed": { + "message": "Permission request failed, did you click deny?" + }, "adblockerIssueUnlistedVideosInfo": { "message": "If you are unable to resolve this, then disable the setting 'Ignore unlisted/private videos', as SponsorBlock is unable to retrieve the visibility information for this video" }, + "adblockerIssueWhitelist": { + "message": "If you are unable to resolve this, then disable the setting 'Force Channel Check Before Skipping', as SponsorBlock is unable to retrieve the visibility information for this video" + }, "itCouldBeAdblockerIssue": { "message": "If this keeps occuring, it could be caused by your ad blocker. Please check https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests" }, diff --git a/public/permissions/index.html b/public/permissions/index.html new file mode 100644 index 00000000..4475f039 --- /dev/null +++ b/public/permissions/index.html @@ -0,0 +1,28 @@ + + + + Permissions - SponsorBlock + + + + + + + + + + +
+ + SponsorBlock +
+ +
+ +
+
+ __MSG_acceptPermission__ +
+
+ + diff --git a/public/permissions/styles.css b/public/permissions/styles.css new file mode 100644 index 00000000..971c6893 --- /dev/null +++ b/public/permissions/styles.css @@ -0,0 +1,356 @@ +/* Options page CSS */ +body { + font-family: sans-serif; +} + +.center { + text-align: center; +} + +.inline { + display: inline-block; +} + +.bold { + font-weight: bold; +} + +.hidden { + display: none !important; +} + +.keybind-status { + display: inline; +} + +.small-description { + color: white; + font-size: 13px; +} + +.medium-description { + color: white; + font-size: 15px; +} + +.option-text-box { + width: 300px; +} + +.option-button { + cursor: pointer; + + background-color: #c00000; + padding: 10px; + color: white; + border-radius: 5px; + font-size: 14px; + + width: max-content; +} + +.option-button:hover { + background-color: #fc0303; +} + +.option-button.disabled { + cursor: default; + + background-color: #520000; + color: grey; +} + +#options { + max-width: 60%; + text-align: left; + display: inline-block; +} + +.switch-container:after { + content: attr(label-name); + position: absolute; + padding: 4px; + width: max-content; + + font-size: 14px; + color: white; +} + +.text-label-container { + font-size: 14px; + color: white; +} + +.switch { + position: relative; + display: inline-block; + width: 40px; + height: 24px; +} + +.switch input { + opacity: 0; + width: 0; + height: 0; +} + +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #707070; +} + +.animated * { + -webkit-transition: .4s; + transition: .4s; +} + +.slider:before { + position: absolute; + content: ""; + height: 16px; + width: 16px; + left: 4px; + bottom: 4px; + background-color: white; +} + +.animated .slider:before { + -webkit-transition: .4s; + transition: .4s; +} + +input:checked + .slider { + background-color: #fc0303; +} + +input:checked + .slider:before { + -webkit-transform: translateX(16px); + -ms-transform: translateX(16px); + transform: translateX(16px); +} + +/* Rounded sliders */ +.slider.round { + border-radius: 34px; +} + +.slider.round:before { + border-radius: 50%; +} + + +/* Boilerplate CSS from https://ajay.app */ + +body { + background-color: #333333; +} + +.projectPreview { + position: relative; +} + +.projectPreviewImage { + position: absolute; + left: -90px; + width: 80px; + top: 50%; + transform: translateY(-50%); +} + +.projectPreviewImageLarge { + position: absolute; + left: -210px; + width: 200px; + top: 50%; + transform: translateY(-20%); +} + +.projectPreviewImageLargeRight { + position: absolute; + right: -210px; + width: 200px; + top: 50%; + transform: translateY(-50%); +} + +.createdBy { + font-size: 14px; + text-align: center; + padding-top: 0px; + padding-bottom: 0px; + + display: inline-block; +} + +#title { + background-color: #636363; + + text-align: center; + vertical-align: middle; + + font-size: 50px; + color: #212121; + + padding: 20px; + + text-decoration: none; + + transition: font-size 1s; +} + +.subtitle { + font-size: 40px; + color: #dad8d8; + + padding-top: 10px; + + transition: font-size 0.4s; +} + +.subtitle:hover { + font-size: 45px; + + transition: font-size 0.4s; +} + +.profilepic { + background-color: #636363 !important; + vertical-align: middle; +} + +.profilepiccircle { + vertical-align: middle; + overflow: hidden; + border-radius: 50%; +} + +a { + text-decoration: underline; + color: inherit; +} + +.link { + padding: 20px; + + height: 80px; + + transition: height 0.2s; +} + +.link:hover { + height: 95px; + + transition: height 0.2s; +} + +#contact,.smalllink { + font-size: 25px; + color: #e8e8e8; + + text-align: center; + + padding: 10px; +} + +#contact { + text-decoration: none; +} + +p,li { + font-size: 20px; + color: #c4c4c4; + + padding: 10px; +} + +p,li,code,a { + max-width: 60%; + text-align: left; + overflow-wrap: break-word; +} + +@media screen and (orientation:portrait) { + p,li,code,a { + max-width: 100%; + } + + .projectPreviewImage { + position: unset; + width: 130px; + display: block; + margin: auto; + transform: none; + } +} + +.previewImage { + max-height: 200px; +} + +img { + max-width: 100%; + + text-align: center; +} + +#recentPostTitle { + font-size: 30px; + color: #dad8d8; +} + +#recentPostDate { + font-size: 15px; + color: #dad8d8; +} + +h1,h2,h3,h4,h5,h6 { + color: #dad8d8; +} + +svg { + text-decoration: none; +} + +.number-container:before { + content: attr(label-name); + padding-right: 4px; + width: max-content; + + font-size: 14px; + color: white; +} + +/* React styles */ + +.categoryTableElement { + font-size: 16px; + + color: white; +} + +.categoryTableElement > * { + padding-right: 15px; + padding-bottom: 15px; +} + +.categoryOptionsSelector { + background-color: #c00000; + color: white; + + border: none; + font-size: 14px; + padding: 5px; + border-radius: 5px; +} + +.categoryColorTextBox { + width: 60px; + + background: none; + border: none; +} \ No newline at end of file diff --git a/src/background.ts b/src/background.ts index b562c4e7..e44dd28a 100644 --- a/src/background.ts +++ b/src/background.ts @@ -37,6 +37,9 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) { case "openHelp": chrome.tabs.create({url: chrome.runtime.getURL('help/index_en.html')}); return; + case "openPage": + chrome.tabs.create({url: chrome.runtime.getURL(request.url)}); + return; case "sendRequest": sendRequestToCustomServer(request.type, request.url, request.data).then(async (response) => { callback({ diff --git a/src/content.ts b/src/content.ts index 33842dd3..dd219456 100644 --- a/src/content.ts +++ b/src/content.ts @@ -258,7 +258,7 @@ async function videoIDChange(id) { try { await utils.wait(() => !!videoInfo, 5000, 1); } catch (err) { - alert(chrome.i18n.getMessage("adblockerIssue") + "\n\n" + chrome.i18n.getMessage("adblockerIssueUnlistedVideosInfo")); + await videoInfoFetchFailed("adblockerIssueUnlistedVideosInfo"); } if (isUnlisted()) { @@ -268,7 +268,11 @@ async function videoIDChange(id) { } // Update whitelist data when the video data is loaded - utils.wait(() => !!videoInfo, 5000, 10).then(whitelistCheck); + utils.wait(() => !!videoInfo, 5000, 10).then(whitelistCheck).catch(() => { + if (Config.config.forceChannelCheck) { + videoInfoFetchFailed("adblockerIssueWhitelist"); + } + }); //setup the preview bar if (previewBar === null) { @@ -727,6 +731,21 @@ async function getVideoInfo(): Promise { } } +async function videoInfoFetchFailed(errorMessage: string): Promise { + console.log("failed\t" + errorMessage) + if (utils.isFirefox()) { + // Attempt to ask permission for youtube.com domain + alert(chrome.i18n.getMessage("youtubePermissionRequest")); + + chrome.runtime.sendMessage({ + message: "openPage", + url: "permissions/index.html#youtube.com" + }); + } else { + alert(chrome.i18n.getMessage("adblockerIssue") + "\n\n" + chrome.i18n.getMessage(errorMessage)); + } +} + function getYouTubeVideoID(url: string) { // For YouTube TV support if(url.startsWith("https://www.youtube.com/tv#/")) url = url.replace("#", ""); diff --git a/src/options.ts b/src/options.ts index 186e442a..815aff02 100644 --- a/src/options.ts +++ b/src/options.ts @@ -288,7 +288,7 @@ function invidiousInit(checkbox: HTMLInputElement, option: string) { if (utils.isFirefox()) permissions = []; chrome.permissions.contains({ - origins: utils.getInvidiousInstancesRegex(), + origins: utils.getPermissionRegex(), permissions: permissions }, function (result) { if (result != checkbox.checked) { diff --git a/src/permissions.ts b/src/permissions.ts new file mode 100644 index 00000000..b6a41dce --- /dev/null +++ b/src/permissions.ts @@ -0,0 +1,33 @@ +import Config from "./config"; +import Utils from "./utils"; +const utils = new Utils(); + +// This is needed, if Config is not imported before Utils, things break. +// Probably due to cyclic dependencies +Config.config; + +window.addEventListener('DOMContentLoaded', init); + +async function init() { + utils.localizeHtmlPage(); + + const domains = document.location.hash.replace("#", "").split(","); + + const acceptButton = document.getElementById("acceptPermissionButton"); + acceptButton.addEventListener("click", () => { + chrome.permissions.request({ + origins: utils.getPermissionRegex(domains), + permissions: [] + }, (granted) => { + if (granted) { + alert(chrome.i18n.getMessage("permissionRequestSuccess")); + + chrome.tabs.getCurrent((tab) => { + chrome.tabs.remove(tab.id); + }); + } else { + alert(chrome.i18n.getMessage("permissionRequestFailed")); + } + }); + }); +} \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts index 7658cab0..bb42afc5 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -3,10 +3,10 @@ import { CategorySelection, SponsorTime, FetchResponse, BackgroundScriptContaine import * as CompileConfig from "../config.json"; -class Utils { +export default class Utils { // Contains functions needed from the background script - backgroundScriptContainer: BackgroundScriptContainer | null = null; + backgroundScriptContainer: BackgroundScriptContainer | null; // Used to add content scripts and CSS required js = [ @@ -19,7 +19,7 @@ class Utils { "popup.css" ]; - constructor(backgroundScriptContainer?: BackgroundScriptContainer) { + constructor(backgroundScriptContainer: BackgroundScriptContainer = null) { this.backgroundScriptContainer = backgroundScriptContainer; } @@ -43,6 +43,12 @@ class Utils { }); } + containsPermission(permissions: chrome.permissions.Permissions): Promise { + return new Promise((resolve) => { + chrome.permissions.contains(permissions, resolve) + }); + } + /** * Asks for the optional permissions required for all extra sites. * It also starts the content script registrations. @@ -57,7 +63,7 @@ class Utils { if (this.isFirefox()) permissions = []; chrome.permissions.request({ - origins: this.getInvidiousInstancesRegex(), + origins: this.getPermissionRegex(), permissions: permissions }, async (granted) => { if (granted) { @@ -78,7 +84,6 @@ class Utils { * For now, it is just SB.config.invidiousInstances. */ setupExtraSiteContentScripts(): void { - if (this.isFirefox()) { const firefoxJS = []; for (const file of this.js) { @@ -95,7 +100,7 @@ class Utils { allFrames: true, js: firefoxJS, css: firefoxCSS, - matches: this.getInvidiousInstancesRegex() + matches: this.getPermissionRegex() }; if (this.backgroundScriptContainer) { @@ -106,7 +111,7 @@ class Utils { } else { chrome.declarativeContent.onPageChanged.removeRules(["invidious"], () => { const conditions = []; - for (const regex of this.getInvidiousInstancesRegex()) { + for (const regex of this.getPermissionRegex()) { conditions.push(new chrome.declarativeContent.PageStateMatcher({ pageUrl: { urlMatches: regex } })); @@ -149,7 +154,7 @@ class Utils { } chrome.permissions.remove({ - origins: this.getInvidiousInstancesRegex() + origins: this.getPermissionRegex() }); } @@ -250,16 +255,20 @@ class Utils { } /** - * @returns {String[]} Invidious Instances in regex form + * @returns {String[]} Domains in regex form */ - getInvidiousInstancesRegex(): string[] { - const invidiousInstancesRegex: string[] = []; - for (const url of Config.config.invidiousInstances) { - invidiousInstancesRegex.push("https://*." + url + "/*"); - invidiousInstancesRegex.push("http://*." + url + "/*"); + getPermissionRegex(domains: string[] = []): string[] { + const permissionRegex: string[] = []; + if (domains.length === 0) { + domains = [...Config.config.invidiousInstances]; } - return invidiousInstancesRegex; + for (const url of domains) { + permissionRegex.push("https://*." + url + "/*"); + permissionRegex.push("http://*." + url + "/*"); + } + + return permissionRegex; } generateUserID(length = 36): string { @@ -434,5 +443,3 @@ class Utils { } } - -export default Utils; diff --git a/webpack/webpack.common.js b/webpack/webpack.common.js index 79fea60b..1d130af0 100644 --- a/webpack/webpack.common.js +++ b/webpack/webpack.common.js @@ -9,7 +9,8 @@ module.exports = env => ({ popup: path.join(__dirname, srcDir + 'popup.ts'), background: path.join(__dirname, srcDir + 'background.ts'), content: path.join(__dirname, srcDir + 'content.ts'), - options: path.join(__dirname, srcDir + 'options.ts') + options: path.join(__dirname, srcDir + 'options.ts'), + permissions: path.join(__dirname, srcDir + 'permissions.ts') }, output: { path: path.join(__dirname, '../dist/js'), From 081e03e4ba1ddee76ad0be44144e262c6425602a Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 10 May 2021 16:24:03 -0400 Subject: [PATCH 6/9] Increase version number --- manifest/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifest/manifest.json b/manifest/manifest.json index 903abe4f..ec062100 100644 --- a/manifest/manifest.json +++ b/manifest/manifest.json @@ -1,7 +1,7 @@ { "name": "__MSG_fullName__", "short_name": "SponsorBlock", - "version": "2.0.13.1", + "version": "2.0.14", "default_locale": "en", "description": "__MSG_Description__", "content_scripts": [{ From 8b7436320f8520a9c4d4d3b5e2006a7e04150cfd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 May 2021 20:24:09 +0000 Subject: [PATCH 7/9] Bump lodash from 4.17.19 to 4.17.21 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.19 to 4.17.21. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.19...4.17.21) Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f4243ea7..fe1588d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11692,9 +11692,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.defaults": { "version": "4.2.0", From 35fc238891444d10ac059d9b9ae321e7843985c1 Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 10 May 2021 16:24:36 -0400 Subject: [PATCH 8/9] New Crowdin updates (#697) --- public/_locales/ar/messages.json | 62 ++++++++- public/_locales/bn/messages.json | 10 +- public/_locales/fi/messages.json | 18 +-- public/_locales/fr/messages.json | 14 +- public/_locales/hu/messages.json | 3 + public/_locales/id/messages.json | 12 +- public/_locales/it/messages.json | 37 ++++-- public/_locales/ja/messages.json | 192 +++++++++++++++++++++++++++- public/_locales/pt_BR/messages.json | 26 ++-- public/_locales/ru/messages.json | 2 +- public/_locales/sv/messages.json | 48 +++++-- public/_locales/tr/messages.json | 3 + 12 files changed, 368 insertions(+), 59 deletions(-) diff --git a/public/_locales/ar/messages.json b/public/_locales/ar/messages.json index 0967ef42..99e44ae6 100644 --- a/public/_locales/ar/messages.json +++ b/public/_locales/ar/messages.json @@ -1 +1,61 @@ -{} +{ + "fullName": { + "message": "سبونسر بلوك لليوتيوب - تخطي الرعاية الاعلانية", + "description": "Name of the extension." + }, + "Description": { + "message": "تخطي الرعاية الاعلانية ، التسول في الاشتراك والمزيد على مقاطع الفيديو على اليوتيوب. التبليغ عن الرعايه الاعلانيه علي مقاطع الفيديو التي تشاهدها لتوفير وقتك و وقت الآخرين.", + "description": "Description of the extension." + }, + "400": { + "message": "الخادم قال أن هذا الطلب خاطيء" + }, + "429": { + "message": "لقد قدمت الكثير من اوقات الرعاية الاعلانية لهذا الفيديو الواحد، هل أنت متأكد من وجود هذا العدد؟" + }, + "409": { + "message": "تم تقديم هذا بالفعل من قبل" + }, + "channelWhitelisted": { + "message": "القناة في القائمة البيضاء!" + }, + "Segment": { + "message": "جزء" + }, + "Segments": { + "message": "أجزاء" + }, + "upvoteButtonInfo": { + "message": "التصويت على هذا الإرسال" + }, + "reportButtonTitle": { + "message": "إبلاغ" + }, + "reportButtonInfo": { + "message": "الإبلاغ عن هذا التقديم كغير صحيح." + }, + "Dismiss": { + "message": "إلغاء" + }, + "Loading": { + "message": "جاري التحميل..." + }, + "Hide": { + "message": "لا تظهر أبداً" + }, + "hitGoBack": { + "message": "قم الضغط علي تخطي للوصول إلى المكان الذي أتيت منه." + }, + "unskip": { + "message": "الرجوع في التخطي" + }, + "reskip": { + "message": "اعاده التخطي" + }, + "paused": { + "message": "ايقاف مؤقت" + }, + "manualPaused": { + "message": "تم إيقاف الموقت" + } +} diff --git a/public/_locales/bn/messages.json b/public/_locales/bn/messages.json index 0967ef42..012c5f94 100644 --- a/public/_locales/bn/messages.json +++ b/public/_locales/bn/messages.json @@ -1 +1,9 @@ -{} +{ + "fullName": { + "message": "ইউটিউবের জন্য স্পনসরব্লক - স্পনসরশিপ এড়িয়ে যান", + "description": "Name of the extension." + }, + "409": { + "message": "এটি আগেই জমা দেওয়া হয়েছে" + } +} diff --git a/public/_locales/fi/messages.json b/public/_locales/fi/messages.json index 6daf542c..053a354f 100644 --- a/public/_locales/fi/messages.json +++ b/public/_locales/fi/messages.json @@ -41,7 +41,7 @@ "message": "Ladataan..." }, "Hide": { - "message": "Älä näytä koskaan" + "message": "Älä Näytä Koskaan" }, "hitGoBack": { "message": "Paina 'älä ohita' mennäksesi takaisin kohtaan jossa olit." @@ -104,7 +104,7 @@ "message": "Avaa SponsorBlock-ponnahdusikkuna" }, "closePopup": { - "message": "Sulje Ponnahdus-ikkuna" + "message": "Sulje Ponnahdusikkuna" }, "SubmitTimes": { "message": "Lähetä Segmentit" @@ -165,7 +165,7 @@ "message": "Asetukset" }, "showButtons": { - "message": "Näytä painikkeet YouTuben soittimessa" + "message": "Näytä Painikkeet YouTuben Soittimessa" }, "hideButtons": { "message": "Piilota painikkeet YouTuben soittimessa" @@ -174,7 +174,7 @@ "message": "Tämä piilottaa YouTuben soittimessa näkyvät, ohitettavien aikojen lähettämiseen käytetyt painikkeet." }, "showInfoButton": { - "message": "Näytä info-painike YouTuben soittimessa" + "message": "Näytä Info-Painike YouTuben Soittimessa" }, "hideInfoButton": { "message": "Piilota info-painike YouTuben soittimessa" @@ -186,7 +186,7 @@ "message": "Piilota poista-painike YouTuben soittimessa" }, "showDeleteButton": { - "message": "Näytä poista-painike YouTuben soittimessa" + "message": "Näytä Poista-Painike YouTuben Soittimessa" }, "whatDeleteButton": { "message": "Tämä on YouTuben soittimen painike, joka poistaa kaikki kyseisen videon sponsorointikohdat, joita et ole vielä lähettänyt." @@ -229,7 +229,7 @@ "description": "The first line of the message displayed after the notice was upgraded." }, "noticeUpdate2": { - "message": "Jos et vieläkään pidä siitä, paina \"älä koskaan näytä\" -painiketta.", + "message": "Jos et vieläkään pidä siitä, paina \"älä näytä koskaan\" -painiketta.", "description": "The second line of the message displayed after the notice was upgraded." }, "setSkipShortcut": { @@ -408,7 +408,7 @@ "message": "Oletko varma, että haluat nollata tämän?" }, "confirmPrivacy": { - "message": "Video on havaittu piilotetuksi. Paina peruuta jos et halua tarkistaa ohitettavia segmenttejä." + "message": "Video on havaittu piilotetuksi. Paina peruuta, jos et halua tarkistaa ohitettavia segmenttejä." }, "unlistedCheck": { "message": "Ohita Piilotetut/Yksityiset Videot" @@ -511,10 +511,10 @@ "message": "Maksamaton/Itsensä Mainostus" }, "category_selfpromo_description": { - "message": "Samankaltainen \"sponsorin\" kanssa paitsi maksamaton tai itsensä mainostus. Tämä sisältää osioita kauppatavarasta, lahjoituksista tai tietoa siitä, kenen kanssa he ovat tehneet yhteistyötä." + "message": "Samankaltainen \"sponsorin\" kanssa, mutta maksamattomalle tai itsensä mainostukselle. Tämä sisältää osioita kauppatavarasta, lahjoituksista tai tietoa siitä, kenen kanssa he ovat tehneet yhteistyötä." }, "category_music_offtopic": { - "message": "Musiikki: muussa kuin Musiikki-osiossa" + "message": "Musiikki: Ei-Musiikki-Osio" }, "category_music_offtopic_description": { "message": "Vain käytettävissä musiikkivideoissa. Tätä tulee käyttää vain musiikkivideoiden osissa, jotka eivät jo kuulu toiseen kategoriaan." diff --git a/public/_locales/fr/messages.json b/public/_locales/fr/messages.json index 5109d9e1..c86d61d0 100644 --- a/public/_locales/fr/messages.json +++ b/public/_locales/fr/messages.json @@ -138,7 +138,7 @@ "description": "Appears in the popup to inform them that editing has been moved to the video player." }, "popupHint": { - "message": "Astuce: Vous pouvez configurer des raccourcis clavier dans les options" + "message": "Astuce : vous pouvez configurer des raccourcis clavier dans les options" }, "clearTimesButton": { "message": "Supprimer les temps" @@ -291,7 +291,7 @@ "message": "Afficher le temps avec les passages supprimés" }, "showTimeWithSkipsDescription": { - "message": "Ce temps apparaît entre crochets à côté du temps actuel sous la barre de défilement. Cela indique la durée totale de la vidéo après déduction de tout les segments. Ceci comprend les segments marqués comme étant uniquement à \"Afficher dans la barre de recherche\"." + "message": "Ce temps apparaît entre crochets à côté du temps actuel sous la barre de défilement. Cela indique la durée totale de la vidéo après déduction de tous les segments. Ceci comprend les segments marqués comme étant uniquement à \"Afficher dans la barre de recherche\"." }, "youHaveSkipped": { "message": "Vous avez passé " @@ -324,7 +324,7 @@ "message": "Importer/Exporter Votre ID d'Utilisateur" }, "whatChangeUserID": { - "message": "Gardez ça privé. C'est comme un mot de passe et ne devrait pas être partagé avec quiconque. Si quelqu'un l'obtiens, il peut vous usurper." + "message": "Cette information doit rester confidentielle. C'est comme un mot de passe et ne devrait pas être partagé avec quiconque. Si quelqu'un l'obtient, il pourra se faire passer pour vous." }, "setUserID": { "message": "Définir \"UserID\"" @@ -514,7 +514,10 @@ "message": "Semblable au \"sponsor\", excepté pour la promotion non rémunérée ou l'auto-promotion. Cela inclut les marchandises, les dons et les informations sur leurs collaborateurs." }, "category_music_offtopic": { - "message": "Musique : Segment non-musical" + "message": "Musique : Segment non musical" + }, + "category_music_offtopic_description": { + "message": "A utiliser seulement pour les vidéos de musiques. Ceci ne devrait qu'être utilisé que pour des morceaux de vidéos de musiques qui ne sont pas couvert par d'autres catégories." }, "category_music_offtopic_short": { "message": "Hors musique" @@ -591,6 +594,9 @@ "adblockerIssue": { "message": "Il semble que quelque chose empêche SponsorBlock de récupérer les données de la vidéo. C'est probablement votre bloqueur de publicités. Veuillez consulter https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests" }, + "adblockerIssueUnlistedVideosInfo": { + "message": "Si vous ne pouvez pas résoudre ça, désactivé le paramètre 'Ignorer vidéos privées ou pas listées\", car SponsorBlock ne peux pas trouver cette vidéo" + }, "itCouldBeAdblockerIssue": { "message": "Si ça se reproduit, c'est peut-être causé par votre bloqueur de publicités. Veuillez consulter https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests" }, diff --git a/public/_locales/hu/messages.json b/public/_locales/hu/messages.json index 29922525..6feea5e7 100644 --- a/public/_locales/hu/messages.json +++ b/public/_locales/hu/messages.json @@ -295,6 +295,9 @@ "hoursLower": { "message": "óra" }, + "youHaveSavedTimeEnd": { + "message": " az életükből" + }, "statusReminder": { "message": "A szerver állapotához tekintse meg a status.sponsor.ajay.app oldalt." }, diff --git a/public/_locales/id/messages.json b/public/_locales/id/messages.json index 9a481767..9fcff4ab 100644 --- a/public/_locales/id/messages.json +++ b/public/_locales/id/messages.json @@ -80,7 +80,7 @@ "message": "Segmen Berakhir Sekarang" }, "noVideoID": { - "message": "Video YouTube tidak ditemukan.\nJika hal ini salah, refresh tab." + "message": "Video YouTube tidak ditemukan.\nJika terjadi kesalahan, silahkan ulangin halaman." }, "success": { "message": "Sukses!" @@ -113,10 +113,10 @@ "message": "Apakah anda yakin ingin mengirim ini?" }, "whitelistChannel": { - "message": "Daftar putih channel" + "message": "Daftar kanal putih" }, "removeFromWhitelist": { - "message": "Hapus channel dari daftar putih" + "message": "Hapus kanal dari daftar putih" }, "voteOnTime": { "message": "Beri Segmen Vote" @@ -294,7 +294,7 @@ "message": "Waktu ini muncul di dalam kurung disamping waktu asli di bilah waktu. Ini menunjukkan durasi total video yang tidak termasuk segmen apapun. Ini termasuk segmen yang ditandai hanya \"Tampilkan Di Bilah Waktu\"." }, "youHaveSkipped": { - "message": "Anda telah melewatkan " + "message": "Anda sudah melewati " }, "youHaveSaved": { "message": "Anda sudah menghemat waktu " @@ -312,10 +312,10 @@ "message": "jam" }, "youHaveSavedTime": { - "message": "Anda telah menyelamatkan orang" + "message": "Anda sudah menghemat waktu orang lain" }, "youHaveSavedTimeEnd": { - "message": " dalam hidup mereka" + "message": " dari hidup mereka" }, "statusReminder": { "message": "Cek status.sponsor.ajay.app untuk status server." diff --git a/public/_locales/it/messages.json b/public/_locales/it/messages.json index 3759a512..1f1090dc 100644 --- a/public/_locales/it/messages.json +++ b/public/_locales/it/messages.json @@ -80,7 +80,7 @@ "message": "Il Segmento Termina Ora" }, "noVideoID": { - "message": "Nessun video YouTube trovato.\nSe questo non è corretto, ricarica la scheda." + "message": "Nessun video YouTube trovato.\nSe è un errore, ricarica la scheda." }, "success": { "message": "Successo!" @@ -112,14 +112,20 @@ "submitCheck": { "message": "Sei sicuro di volerlo inviare?" }, + "whitelistChannel": { + "message": "Aggiungi il canale alle eccezioni" + }, + "removeFromWhitelist": { + "message": "Rimuovi il canale dalle eccezioni" + }, "voteOnTime": { "message": "Vota un Segmento" }, "Submissions": { - "message": "Iscrizioni" + "message": "Contributi" }, "savedPeopleFrom": { - "message": "Hai salvato le persone da " + "message": "Hai fatto risparmiare in totale " }, "viewLeaderboard": { "message": "Classifica" @@ -128,11 +134,11 @@ "message": "Invia" }, "submissionEditHint": { - "message": "La modifica della sezione comparirà dopo aver cliccato Iscriviti", + "message": "La modifica della sezione comparirà dopo che hai cliccato su Inviare", "description": "Appears in the popup to inform them that editing has been moved to the video player." }, "popupHint": { - "message": "Suggerimento: Puoi configurare combinazioni di tasti per l'inserimento nelle opzioni" + "message": "Suggerimento: Puoi configurare dei comandi rapidi per l'inserimento nelle opzioni" }, "clearTimesButton": { "message": "Cancella Minutaggi" @@ -144,7 +150,7 @@ "message": "Viene utilizzato nelle pagine delle statistiche pubbliche che mostrano quanto hai contribuito. Vedi" }, "Username": { - "message": "Nome Utente" + "message": "Nome utente" }, "setUsername": { "message": "Imposta Username" @@ -226,6 +232,9 @@ "message": "Se non ti piace ancora, premi il pulsante \"non mostrare mai\".", "description": "The second line of the message displayed after the notice was upgraded." }, + "setSkipShortcut": { + "message": "Imposta un tasto per saltare un segmento" + }, "setStartSponsorShortcut": { "message": "Imposta chiave di associazione per l'inizio del segmento" }, @@ -242,10 +251,10 @@ "message": "Timeout della connessione. Controlla la tua connessione a Internet. Se internet sta funzionando, il server è probabilmente sovraccarico oppure giù." }, "disableSkipping": { - "message": "Salta abilitato" + "message": "Saltare è abilitato" }, "enableSkipping": { - "message": "Salta disabilitato" + "message": "Saltare è disabilitato" }, "yourWork": { "message": "Il Tuo Lavoro", @@ -303,7 +312,7 @@ "message": "ore" }, "youHaveSavedTime": { - "message": "Hai salvato le persone" + "message": "Hai salvato alle persone" }, "youHaveSavedTimeEnd": { "message": " delle loro vite" @@ -507,6 +516,9 @@ "category_music_offtopic": { "message": "Musica: Sezione Non-Musicale" }, + "category_music_offtopic_description": { + "message": "Solo per video musicali. Dovrebbe essere usata solo per sezioni di video musicali non già comprese in un'altra categoria." + }, "category_music_offtopic_short": { "message": "Non-Musicale" }, @@ -560,6 +572,10 @@ "chooseACategory": { "message": "Scegli una Categoria" }, + "enableThisCategoryFirst": { + "message": "Per inviare segmenti della categoria \"{0}\", è necessario abilitarlo nelle opzioni. Sarai reindirizzato alle opzioni.", + "description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options." + }, "youMustSelectACategory": { "message": "Devi selezionare una categoria per tutti i segmenti che stai inviando!" }, @@ -578,6 +594,9 @@ "adblockerIssue": { "message": "Sembra che qualcosa stia bloccando la capacità di SponsorBlock di ottenere dati video. Questo probabilmente è il tuo ad blocker. Controlla https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests" }, + "adblockerIssueUnlistedVideosInfo": { + "message": "Se non riesci a risolvere questo problema, disabilita l'impostazione 'Ignora video non elencati/privati', poiché SponsorBlock non è in grado di recuperare le informazioni di visibilità di questo video" + }, "itCouldBeAdblockerIssue": { "message": "Se questo continua a verificarsi, potrebbe essere causato dal tuo ad-blocker. Controlla https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests" }, diff --git a/public/_locales/ja/messages.json b/public/_locales/ja/messages.json index c8d29d1f..34d07d42 100644 --- a/public/_locales/ja/messages.json +++ b/public/_locales/ja/messages.json @@ -3,6 +3,19 @@ "message": "SponserBlock for YouTube - 動画のスポンサーセクションを自動でスキップする", "description": "Name of the extension." }, + "Description": { + "message": "YouTube動画の提供表示や登録要求をスキップします。視聴している動画の当該部分を報告して,みんなが時間を節約できるようにしましょう。", + "description": "Description of the extension." + }, + "400": { + "message": "サーバーがこのリクエストは無効であると返答しました" + }, + "429": { + "message": "一つの動画に対してあまりに多くのセグメントを提出しています。本当にこれだけ必要ですか?" + }, + "409": { + "message": "これは既に提出されています。" + }, "channelWhitelisted": { "message": "チャンネルをホワイトリストに登録しました!" }, @@ -12,9 +25,15 @@ "Segments": { "message": "セグメント" }, + "upvoteButtonInfo": { + "message": "この提案を支持する" + }, "reportButtonTitle": { "message": "報告" }, + "reportButtonInfo": { + "message": "この提案が正しくないことを報告する。" + }, "Dismiss": { "message": "無視" }, @@ -24,11 +43,44 @@ "Hide": { "message": "非表示" }, + "hitGoBack": { + "message": "元の場所に戻るには「スキップを取り消す」をクリックしてください。" + }, "unskip": { - "message": "スキップしない" + "message": "スキップを取り消す" + }, + "reskip": { + "message": "再スキップ" }, "paused": { - "message": "一時停止" + "message": "一時停止中" + }, + "manualPaused": { + "message": "タイマーが停止しました" + }, + "confirmMSG": { + "message": "個々の値を編集・削除するには、情報ボタンをクリックするか右上隅にある拡張機能のアイコンをクリックして拡張機能のポップアップを表示します。" + }, + "clearThis": { + "message": "本当に消去しますか?\n\n" + }, + "Unknown": { + "message": "スポンサー表示の投稿中にエラーが発生しました。しばらく経ってからもう一度お試しください。" + }, + "sponsorFound": { + "message": "この動画用のセグメントはデータベースに登録されています!" + }, + "sponsor404": { + "message": "セグメントが見つかりませんでした" + }, + "sponsorStart": { + "message": "セグメントが始まりました" + }, + "sponsorEnd": { + "message": "セグメントが終わりました" + }, + "noVideoID": { + "message": "YouTube動画が見つかりませんでした。\nこれが正しくない場合は、タブを再読み込みしてください。" }, "success": { "message": "成功しました!" @@ -36,30 +88,76 @@ "voted": { "message": "投票しました!" }, + "serverDown": { + "message": "サーバーがダウンしているようです。今すぐ開発者にお知らせください。" + }, + "connectionError": { + "message": "接続エラーが発生しました。エラーコード: " + }, + "wantToSubmit": { + "message": "次の動画IDで提出します:" + }, + "clearTimes": { + "message": "セグメントをクリア" + }, "openPopup": { "message": "SponsorBlock のポップアップを開く" }, "closePopup": { "message": "ポップアップを閉じる" }, + "SubmitTimes": { + "message": "セグメントを提出" + }, + "submitCheck": { + "message": "本当に提出してよろしいですか?" + }, "whitelistChannel": { "message": "ホワイトリストのチャンネル" }, "removeFromWhitelist": { "message": "ホワイトリストからチャンネルを削除" }, + "voteOnTime": { + "message": "セグメントに投票" + }, + "Submissions": { + "message": "提出数" + }, + "savedPeopleFrom": { + "message": "次のセグメント数から人々を救いました: " + }, "viewLeaderboard": { "message": "リーダーボード" }, "recordTimesDescription": { "message": "送信" }, + "submissionEditHint": { + "message": "提出をクリックするとセクション編集画面が表示されます", + "description": "Appears in the popup to inform them that editing has been moved to the video player." + }, + "popupHint": { + "message": "ヒント: オプションから提出時のキーバインドを設定できます" + }, + "clearTimesButton": { + "message": "時間をクリア" + }, + "submitTimesButton": { + "message": "時間を提出" + }, + "publicStats": { + "message": "これは公開の統計ページであなたがどれだけ貢献したかを示すために使用され、ここで確認することができます: " + }, "Username": { "message": "ユーザー名" }, "setUsername": { "message": "ユーザー名を設定" }, + "discordAdvert": { + "message": "公式Discordサーバーに参加して意見やフィードバックをお寄せください!" + }, "hideThis": { "message": "非表示にする" }, @@ -72,12 +170,52 @@ "hideButtons": { "message": "YouTube プレイヤーにボタンを表示しない" }, + "hideButtonsDescription": { + "message": "これを有効にするとYouTubeプレーヤーのセグメント提出ボタンが非表示になります。" + }, + "showInfoButton": { + "message": "YouTubeプレーヤーの情報ボタンを表示する" + }, + "hideInfoButton": { + "message": "YouTubeプレーヤーの情報ボタンを隠す" + }, + "whatInfoButton": { + "message": "これはYouTubeのページ上でポップアップを開くためのボタンです。" + }, "hideDeleteButton": { "message": "YouTube プレイヤーから削除ボタンを隠す" }, "showDeleteButton": { "message": "YouTube プレイヤーから削除ボタンを表示する" }, + "whatDeleteButton": { + "message": "これはYouTubeプレーヤー上のボタンで、現在の動画から未提出のセグメントを全て消去します。" + }, + "enableViewTracking": { + "message": "スキップ回数の統計を有効にする" + }, + "whatViewTracking": { + "message": "この機能は、あなたがスキップしたセグメントを追跡して、そのセグメントがどれだけ役に立ったかを他のユーザーに知らせることで、スパムがデータベースに紛れないようにするための評価基準として使用されます。あなたがセグメントをスキップするたびに、拡張機能はサーバーにメッセージを送信します。使用回数の統計が正確になるよう、できる限り多くの人がこの設定を変更しないことを望みます。:)" + }, + "enableQueryByHashPrefix": { + "message": "ハッシュプレフィックスを使って要求" + }, + "whatQueryByHashPrefix": { + "message": "動画IDを使用してサーバーからセグメントを要求する代わりに、動画IDのハッシュから最初の4文字が送信されます。それに対して、サーバーは類似したハッシュを持つすべての動画のデータを返却します。" + }, + "enableRefetchWhenNotFound": { + "message": "新しい動画ではセグメントを再取得する" + }, + "whatRefetchWhenNotFound": { + "message": "動画がまだ新しくセグメントが見つからない場合は、動画を視聴している間、数分おきにセグメントを検索し続けます。" + }, + "showNotice": { + "message": "再度通知を表示する" + }, + "longDescription": { + "message": "SponsorBlockはスポンサー、イントロ、アウトロ、チャンネル登録のお願いなど、YouTube動画の煩わしい部分をスキップします。SponsorBlockはYouTube動画のスポンサー付きセグメントなどの開始時間と終了時間を誰でも投稿できる、クラウドソースのブラウザ拡張機能です。一人がセグメントの情報を送信すると、この拡張機能を使用している他の全員が、スポンサー付きセグメントをスキップできるようになります。また、ミュージックビデオの音楽がない部分をスキップすることもできます。", + "description": "Full description of the extension on the store pages." + }, "website": { "message": "ウェブサイト", "description": "Used on Firefox Store Page" @@ -86,6 +224,45 @@ "message": "ソースコード", "description": "Used on Firefox Store Page" }, + "noticeUpdate": { + "message": "通知がアップグレードされました!", + "description": "The first line of the message displayed after the notice was upgraded." + }, + "noticeUpdate2": { + "message": "もしそれでも気に入らない場合は、非表示ボタンをクリックしてください。", + "description": "The second line of the message displayed after the notice was upgraded." + }, + "setSkipShortcut": { + "message": "セグメントをスキップするキーを設定" + }, + "setStartSponsorShortcut": { + "message": "セグメントを開始するキーを設定" + }, + "setSubmitKeybind": { + "message": "投稿するキーを設定" + }, + "keybindDescription": { + "message": "キーを入力して設定します" + }, + "keybindDescriptionComplete": { + "message": "キーバインドを次の通り設定しました: " + }, + "0": { + "message": "接続がタイムアウトになりました。インターネット接続をご確認ください。接続に問題がない場合、サーバーが混雑またはダウンしている可能性があります。" + }, + "disableSkipping": { + "message": "スキップは有効です" + }, + "enableSkipping": { + "message": "スキップは無効です" + }, + "yourWork": { + "message": "あなたの貢献", + "description": "Used to describe the section that will show you the statistics from your submissions." + }, + "502": { + "message": "サーバーが混雑中です。数秒後にもう一度お試しください。" + }, "errorCode": { "message": "エラーコード: " }, @@ -107,8 +284,17 @@ "audioNotification": { "message": "オーディオ通知をスキップ" }, + "audioNotificationDescription": { + "message": "スキップ時の音声通知は、セグメントがスキップされる毎に音を鳴らす機能です。無効 (または自動スキップが無効) の場合、音は再生されません。" + }, + "showTimeWithSkips": { + "message": "スキップした分を除いた時間を表示する" + }, + "showTimeWithSkipsDescription": { + "message": "この時間は、シークバーの下にある現在の時間の隣に表示されます。これは、動画の合計時間からすべてのセグメントの時間を差し引いたもので「シークバーに表示」として設定されているセグメントも含まれます。" + }, "youHaveSkipped": { - "message": "スキップしました " + "message": "スキップしたセグメント数: " }, "minLower": { "message": "分" diff --git a/public/_locales/pt_BR/messages.json b/public/_locales/pt_BR/messages.json index a3150159..26b9b743 100644 --- a/public/_locales/pt_BR/messages.json +++ b/public/_locales/pt_BR/messages.json @@ -56,7 +56,7 @@ "message": "Pausado" }, "manualPaused": { - "message": "Tempo parado" + "message": "Temporizador parado" }, "confirmMSG": { "message": "\n\nPara editar ou remover linhas individuais, clique com o botão direito ou abra o popup da extensão pelo icone no canto superior direito." @@ -125,7 +125,7 @@ "message": "Envios" }, "savedPeopleFrom": { - "message": "Você salvou pessoas de " + "message": "Poupaste a outros de " }, "viewLeaderboard": { "message": "Placar de classificação" @@ -147,7 +147,7 @@ "message": "Enviar Intervalos" }, "publicStats": { - "message": "Isso é usado na página pública de estatísticas que mostra o quanto você já contríbuíu. Veja-a" + "message": "Isso é usado na página pública de estatísticas que mostra o quanto você já contribuiu. Veja-a" }, "Username": { "message": "Nome de usuário" @@ -171,7 +171,7 @@ "message": "Esconder botões no player do Youtube" }, "hideButtonsDescription": { - "message": "Isto esconde os botões que aparecem no player do Youtube para submeter patrocínios. Entendemos que possa ser\n incómodo a algumas pessoas. Em vez de usar esses botões pode usar os do popup. Para esconder a mensagem que aparece, \n ususe o botão na mesma que diz \"Don't show this again\". Pode sempre reactivar estas definições novamente." + "message": "Esta opção esconde os botões que aparecem para enviar segmentos no player do YouTube." }, "showInfoButton": { "message": "Mostrar botão de Informações no player do Youtube" @@ -315,7 +315,7 @@ "message": "Você poupou das pessoas" }, "youHaveSavedTimeEnd": { - "message": " de suas vidas" + "message": " das vidas dos outros" }, "statusReminder": { "message": "Verifique status.sponsor.ajay.app para o status do servidor." @@ -423,13 +423,13 @@ "message": "Importar/Exportar Todas as Opções" }, "whatExportOptions": { - "message": "Essa suas preferências em JSON. Isso inclui seu ID de usuário, então lembre-se de compartilhar com cuidado." + "message": "Essas são suas preferências no formato JSON. Isso inclui seu ID de usuário, então lembre-se de compartilhar com cuidado." }, "setOptions": { "message": "Definir Opções" }, "exportOptionsWarning": { - "message": "Aviso: Alterar as opções é permanente e pode fazer a extensão parar de funcionar. Tem certeza que deseja fazer isso? Certifique-se de fazer um backup de seu antigo por precaução." + "message": "Aviso: Alterar as opções é permanente e pode fazer a extensão parar de funcionar. Tem certeza que deseja fazer isso? Certifique-se de fazer um backup por precaução." }, "incorrectlyFormattedOptions": { "message": "Este JSON não está formatado corretamente. Suas opções não foram alteradas." @@ -487,7 +487,7 @@ "message": "Intervalo/Animação de Introdução" }, "category_intro_description": { - "message": "Um intervalo sem conteúdo real. Pode ser um quadro em pausa, um frame estático, repetindo animação. Isso não deve ser usado para transições que contenham informação." + "message": "Um intervalo sem conteúdo real. Pode ser uma pausa, um quadro estático, uma animação repetitiva. Isso não deve ser usado em transições que contenham informação." }, "category_intro_short": { "message": "Intervalo" @@ -502,7 +502,7 @@ "message": "Lembrete de interação (inscrever-se)" }, "category_interaction_description": { - "message": "Quando houver um pequeno lembrete para curtir, inscreva-se ou segui-los no meio do conteúdo. Se é longo ou sobre algo específico, deveria ser sob auto-promoção." + "message": "Quando houver um pequeno lembrete para curtir, inscrever-se ou segui-los no meio do conteúdo. Se é longo ou sobre algo específico, deveria ser sob Não-pago/Auto promoção." }, "category_interaction_short": { "message": "Lembrete de interação" @@ -511,7 +511,7 @@ "message": "Não-pago/Auto promoção" }, "category_selfpromo_description": { - "message": "Similar a \"patrocinador\", exceto para auto promoções e não-pagas. Isto inclui seções sobre vendas, doações ou informações sobre com quem colaboraram." + "message": "Similar a \"patrocinador\", mas para auto promoções e segmentos não-pagos. Isto inclui seções sobre vendas, doações ou informações sobre com quem colaboraram." }, "category_music_offtopic": { "message": "Música: Seção sem música" @@ -541,7 +541,7 @@ "message": "Sua cor está formatada incorretamente. Deve ser um código hexadecimal de 3 ou 6 dígitos com uma tralha / hashtag no início." }, "previewColor": { - "message": "Cor de pré-visualização", + "message": "Pré-visualizar cor", "description": "Referring to submissions that have not been sent to the server yet." }, "seekBarColor": { @@ -610,7 +610,7 @@ "message": "Considere ativar a 'forçar verificação de canal antes de pular\"" }, "downvoteDescription": { - "message": "Incorreto/tempo errado" + "message": "Tempo errado ou incorreto" }, "incorrectCategory": { "message": "Categoria errada" @@ -619,7 +619,7 @@ "message": "Este vídeo é categorizado como música. Tem certeza que isto tem um patrocinador? Se este é realmente um \"segmento não musical\", abra as opções da extensão e habilite esta categoria. Assim você pode enviar este segmento como \"não-musical\" ao invés de patrocinador. Por favor leia as diretrizes se estiver confuso." }, "multipleSegments": { - "message": "Multiplos segmentos" + "message": "Múltiplos segmentos" }, "guidelines": { "message": "Diretrizes" diff --git a/public/_locales/ru/messages.json b/public/_locales/ru/messages.json index 727faafa..3f4e6c0c 100644 --- a/public/_locales/ru/messages.json +++ b/public/_locales/ru/messages.json @@ -4,7 +4,7 @@ "description": "Name of the extension." }, "Description": { - "message": "Пропускайте спонсорские вставки, просьбы подписаться и другое в видео на YouTube. Отправляйте информацию о спонсорах в видео, чтобы сохранять другим время.", + "message": "Пропускайте спонсорские вставки, просьбы подписаться и другое в видео на YouTube. Отправляйте информацию о спонсорах в видео, чтобы экономить другим время.", "description": "Description of the extension." }, "400": { diff --git a/public/_locales/sv/messages.json b/public/_locales/sv/messages.json index 34f2f4a1..85431bd5 100644 --- a/public/_locales/sv/messages.json +++ b/public/_locales/sv/messages.json @@ -17,7 +17,7 @@ "message": "Den här har redan blivit rapporterad" }, "channelWhitelisted": { - "message": "Kanal vitlistad!" + "message": "Kanalen är vitlistad!" }, "Segment": { "message": "segment" @@ -41,16 +41,16 @@ "message": "Laddar..." }, "Hide": { - "message": "Visa Aldrig" + "message": "Visa aldrig" }, "hitGoBack": { "message": "Tryck på Tillbaka för att ångra åtgärden." }, "unskip": { - "message": "Tillbaka" + "message": "Hoppa inte över" }, "reskip": { - "message": "Framåt" + "message": "Hoppa över" }, "paused": { "message": "Pausad" @@ -83,7 +83,7 @@ "message": "Hittade ingen YouTube-video.\nUppdatera fliken om detta är felaktigt." }, "success": { - "message": "Lyckades!" + "message": "Klart!" }, "voted": { "message": "Röstat!" @@ -137,8 +137,11 @@ "message": "Sektionsredigering kommer att visas efter du har klickat på skicka", "description": "Appears in the popup to inform them that editing has been moved to the video player." }, + "popupHint": { + "message": "Tips: Du kan ställa in snabbtangenter för de olika inskickningsalternativen" + }, "clearTimesButton": { - "message": "Rensa Tider" + "message": "Rensa tider" }, "submitTimesButton": { "message": "Rapportera Tider" @@ -197,6 +200,9 @@ "enableQueryByHashPrefix": { "message": "Fråga efter hash-prefix" }, + "whatQueryByHashPrefix": { + "message": "I stället för att begära segment från servern med hjälp av video-ID skickas de första 4 tecknen i hashen av video-ID:et. Servern kommer då att skicka tillbaka data för alla videor med liknande hashar." + }, "enableRefetchWhenNotFound": { "message": "Uppdatera segment på nya videor" }, @@ -230,13 +236,13 @@ "message": "Ställ in knapp för att hoppa över ett segment" }, "setStartSponsorShortcut": { - "message": "Ange den tangent som ska fungera som starttangent för ett segment" + "message": "Ange den tangent som ska fungera som snabbstartstangent för ett segment" }, "setSubmitKeybind": { "message": "Välj knapp att koppla till rapportering av sponsormeddelande" }, "keybindDescription": { - "message": "Koppla knapp genom att trycka på den" + "message": "Ange tangent genom att trycka på den" }, "keybindDescriptionComplete": { "message": "Kopplad till: " @@ -345,7 +351,7 @@ "message": "Invidious (invidio.us) är en tredjeparts YouTube-klient. För att aktivera stöd måste du acceptera de extra behörigheterna. Detta kommer INTE att fungera i incognito i Chrome och andra Cromium-varianter." }, "optionsInfo": { - "message": "Aktivera Invidious stöd, avaktivera hoppa över automatiskt, dölj knappar och mer." + "message": "Aktivera Invidious stöd, inaktivera hoppa över automatiskt, dölj knappar och mer." }, "addInvidiousInstance": { "message": "Lägg Till Invidious Instans" @@ -405,7 +411,7 @@ "message": "Den här videon verkar vara olistad. Klicka på avbryt om du inte vill söka efter överhoppade segment." }, "unlistedCheck": { - "message": "Ignorera Olistade Videor" + "message": "Ignorera olistade/privata videor" }, "whatUnlistedCheck": { "message": "Den här inställningen kommer att slöa ner SponsorBlock. Segmentöverhoppssökningar kräver att video-ID skickas till servern. Om du är orolig över att olistade video-ID:s skickas över internet, aktivera då detta alternativ." @@ -474,15 +480,24 @@ "category_sponsor": { "message": "Sponsormeddelande" }, + "category_sponsor_description": { + "message": "Betald marknadsföring, betalda hänvisningar och direktannonser, men inte till egen marknadsföring eller gratis shoutouts till skapare/webbplatser/produkter de gillar." + }, "category_intro": { "message": "Paus/Introduktion" }, + "category_intro_description": { + "message": "Ett intervall utan faktiskt innehåll. Kan vara en paus, statisk ram, upprepande animation. Denna bör inte användas för övergångar som innehåller information." + }, "category_intro_short": { "message": "Uppehåll" }, "category_outro": { "message": "Slutkort/Credits" }, + "category_outro_description": { + "message": "Credits eller när YouTube-slutkort visas. Inte för slut med information." + }, "category_interaction": { "message": "Interaktionspåminnelse (Prenumerera)" }, @@ -495,9 +510,15 @@ "category_selfpromo": { "message": "Obetald/självbefodran" }, + "category_selfpromo_description": { + "message": "Som \"sponsormeddelande\" men med undantag för obetald eller självkampanj. Detta inkluderar avsnitt om varor, donationer eller information om vem de samarbetade med." + }, "category_music_offtopic": { "message": "Musik: Icke-musikavsnitt" }, + "category_music_offtopic_description": { + "message": "Ska endast användas i musikvideor. Denna ska endast användas för delar av musikvideor som inte redan omfattas av en annan kategori." + }, "category_music_offtopic_short": { "message": "Icke-musik" }, @@ -508,7 +529,7 @@ "message": "Läser meddelande" }, "disable": { - "message": "Avaktivera" + "message": "Inaktivera" }, "manualSkip": { "message": "Hoppa Över Manuellt" @@ -573,6 +594,9 @@ "adblockerIssue": { "message": "Det verkar som om något blockerar SponsorBlocks från att hämta videodata. Det beror förmodligen på din annonsblockerare. Vänligen kontrollera https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests" }, + "adblockerIssueUnlistedVideosInfo": { + "message": "Om du inte kan lösa detta kan du inaktivera 'Ignorera olistade/privata videor' i inställningar, eftersom SponsorBlock inte kan hämta synlighetsinformationen för den här videon" + }, "itCouldBeAdblockerIssue": { "message": "Om detta fortsätter att inträffa, kan orsaken vara din annonsblockerare. Vänligen kontrollera https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests" }, @@ -608,7 +632,7 @@ "message": "Kategorier finns här!" }, "categoryUpdate2": { - "message": "Öppna inställningarna för att skippa intros, outros, merch, osv." + "message": "Öppna inställningarna för att hoppa över intros, outros, merch, osv." }, "help": { "message": "Hjälp" diff --git a/public/_locales/tr/messages.json b/public/_locales/tr/messages.json index 4c283e9a..5a3c84d3 100644 --- a/public/_locales/tr/messages.json +++ b/public/_locales/tr/messages.json @@ -516,6 +516,9 @@ "category_music_offtopic": { "message": "Müzik: Müzik Olmayan Bölüm" }, + "category_music_offtopic_description": { + "message": "Yalnızca müzik videolarında kullanım içindir. Bu yalnızca başka bir kategoriye katılmamış müzik videolarının parçaları için kullanılmalıdır." + }, "category_music_offtopic_short": { "message": "Müzik Olmayan Bölüm" }, From 9f0f306439b5b01728a55f6d41008d58608fdded Mon Sep 17 00:00:00 2001 From: Ajay Ramachandran Date: Mon, 10 May 2021 18:06:59 -0400 Subject: [PATCH 9/9] Fix string --- public/_locales/en/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/_locales/en/messages.json b/public/_locales/en/messages.json index fbf06ec7..c8c0ec27 100644 --- a/public/_locales/en/messages.json +++ b/public/_locales/en/messages.json @@ -601,7 +601,7 @@ "message": "Accept permission" }, "permissionRequestSuccess": { - "message": "Permission success succeeded!" + "message": "Permission request succeeded!" }, "permissionRequestFailed": { "message": "Permission request failed, did you click deny?"