Compare commits

..

54 Commits
3.1.1 ... 3.3.3

Author SHA1 Message Date
Ajay Ramachandran
f35afaf6bc bump version 2021-10-06 21:10:31 -04:00
Ajay Ramachandran
85b1b51b76 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2021-10-06 21:02:02 -04:00
Ajay Ramachandran
9dc5449e37 Make capitalization consistent 2021-10-06 21:01:59 -04:00
Ajay Ramachandran
7baac9dcbf New Crowdin updates (#984) 2021-10-05 20:52:16 -04:00
Ajay Ramachandran
4045978b54 Support older browsers 2021-10-05 20:51:20 -04:00
Ajay Ramachandran
56bc3fca04 Hide skip to highlight right away when dismissing 2021-10-05 20:06:18 -04:00
Ajay Ramachandran
bfa31429f1 Support shorts with additional parts of url 2021-10-03 13:08:50 -04:00
Ajay Ramachandran
66f0cc8883 Support shorts 2021-10-03 13:07:47 -04:00
Ajay Ramachandran
1a0ac27e49 New Crowdin updates (#980) 2021-10-02 18:05:41 -04:00
Ajay Ramachandran
7b87ae7b08 bump version 2021-10-02 18:00:58 -04:00
Ajay Ramachandran
9ab8e63b1d Merge pull request #983 from ajayyy/test-action
Add testing action
2021-10-02 18:00:09 -04:00
Ajay Ramachandran
0e147134f3 Add testing action 2021-10-02 17:42:47 -04:00
Ajay Ramachandran
8605e23fbb Fix starting segments when there is a t=? in the url 2021-10-02 17:13:30 -04:00
Ajay Ramachandran
5f34a777f1 Fix starting segment sometimes not being skipped and duration filter 2021-10-02 16:15:53 -04:00
Ajay Ramachandran
1f43d07e16 Remove possible error in notice 2021-10-02 16:05:23 -04:00
Ajay Ramachandran
a88aaf4590 Prevent error when video not loaded yet 2021-10-02 15:46:33 -04:00
Ajay Ramachandran
25f78ed55b Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2021-10-02 15:24:01 -04:00
Ajay Ramachandran
26e73c515c Fix seeking issues with poi segment 2021-10-02 15:23:59 -04:00
Ajay Ramachandran
028374e62d Update manifest.json 2021-10-02 14:38:59 -04:00
Ajay Ramachandran
dc1e5ce762 Fix styling on voting wrong category 2021-10-01 18:28:11 -04:00
Ajay Ramachandran
8fcf8ac46c Speed up autohiding button transition 2021-10-01 18:08:02 -04:00
Ajay Ramachandran
ef70e71051 Fix segments not appearing when loaded early 2021-10-01 18:07:15 -04:00
Ajay Ramachandran
23a91c626d bump version 2021-09-30 19:39:54 -04:00
Ajay Ramachandran
c92f63af36 New Crowdin updates (#978) 2021-09-30 19:39:14 -04:00
Ajay Ramachandran
0a21ef7af0 Merge pull request #958 from FlorianZahn/PersistantHighlight
Highlight Button now persists; Implements issue #953
2021-09-30 19:33:39 -04:00
Ajay Ramachandran
5a74a28520 Fix skip to highlight text reappearing 2021-09-30 19:26:28 -04:00
Ajay Ramachandran
1bfb5cfb13 Compact button options and add option for skip to highlight button 2021-09-30 19:23:17 -04:00
Ajay Ramachandran
59f8f82655 Add alt text to skip to highlight 2021-09-30 18:20:58 -04:00
Ajay Ramachandran
2064afb235 Make hiding highlight button smooth 2021-09-30 18:15:06 -04:00
Ajay Ramachandran
ebcb600e99 Auto hide skip to highlight 2021-09-30 00:43:10 -04:00
Ajay Ramachandran
9ec984065e hide when buttons disabled and hide chapter prefix 2021-09-29 23:13:54 -04:00
Ajay Ramachandran
63cfe760b6 New Crowdin updates (#961) 2021-09-29 16:27:11 -04:00
Ajay Ramachandran
1a717542c7 Improve warning message 2021-09-28 20:05:48 -04:00
Ajay Ramachandran
de607d317f Hide segments with different video durations 2021-09-28 19:58:51 -04:00
Ajay Ramachandran
76d9a9afa9 Merge pull request #957 from mchangrh/update-workflow
Update workflow
2021-09-21 19:04:20 -04:00
FlorianZahn
22ecc05a55 Highlight Button now persists 2021-09-20 15:32:31 +02:00
Michael C
514ebe8660 update wiki links in README 2021-09-20 02:14:54 -04:00
Michael C
2f4722162b update workflows to newest versions 2021-09-20 02:13:41 -04:00
Ajay Ramachandran
f219122f00 bump version 2021-09-19 22:41:21 -04:00
Ajay Ramachandran
008671d97f New Crowdin updates (#938) 2021-09-19 22:40:43 -04:00
FlorianZahn
6fb3802fd4 Preview skip-lenth dependant on playbackspeed (#949)
* Preview button playback speed dependant

Pressing "Preview" will now jump 2 seconds in front of the segment start time, depending on the playback speed.
2021-09-19 10:24:37 -04:00
Ajay Ramachandran
73241a0bd1 Fix in the middle of mute 2021-09-16 23:21:59 -04:00
Ajay Ramachandran
cc995b9848 Merge pull request #942 from LofhJann/master
Fix username wrapping
2021-09-15 21:33:23 -04:00
Janne Löfhjelm
778379d294 Fix username wrapping 2021-09-11 03:33:41 +03:00
Ajay Ramachandran
1083520666 Add warning for submitting multiple highlights 2021-09-10 19:07:16 -04:00
Ajay Ramachandran
cad5cd97fc New Crowdin updates (#933) 2021-09-07 23:29:35 -04:00
Ajay Ramachandran
7f5728d4db bump version 2021-09-07 23:28:48 -04:00
Ajay Ramachandran
06fa2748fe Fix package-lock, fix #937 2021-09-07 18:54:37 -04:00
Ajay Ramachandran
8b50373eab Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2021-09-06 23:51:28 -04:00
Ajay Ramachandran
bdedf86d63 Fix selenium test to change category 2021-09-06 23:51:26 -04:00
Ajay Ramachandran
0fb84dc03d Merge pull request #934 from KarelVerschraegen/patch-2
Fix typo in SubmissionNoticeComponent
2021-09-06 16:11:03 -04:00
Ajay Ramachandran
041ccdaf11 Merge branch 'master' of https://github.com/ajayyy/SponsorBlock 2021-09-06 16:10:34 -04:00
Ajay Ramachandran
1f967b3f69 Fix skips not being counted and crash on old browser 2021-09-06 16:10:32 -04:00
KarelVerschraegen
07f0b87379 Fix typo in SubmissionNoticeComponent 2021-09-06 15:50:13 +02:00
55 changed files with 760 additions and 24398 deletions

View File

@@ -10,9 +10,11 @@ jobs:
steps:
# Initialization
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
- run: npm install
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16'
- run: npm ci
- name: Copy configuration
run: cp config.json.example config.json
@@ -23,44 +25,44 @@ jobs:
# Create Chrome artifacts
- name: Create Chrome artifacts
run: npm run build:chrome
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v2
with:
name: ChromeExtension
path: dist
- run: mkdir ./builds
- uses: montudor/action-zip@v0.1.0
- uses: montudor/action-zip@v1
with:
args: zip -qq -r ./builds/ChromeExtension.zip ./dist
# Create Firefox artifacts
- name: Create Firefox artifacts
run: npm run build:firefox
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v2
with:
name: FirefoxExtension
path: dist
- uses: montudor/action-zip@v0.1.0
- uses: montudor/action-zip@v1
with:
args: zip -qq -r ./builds/FirefoxExtension.zip ./dist
# Create Beta artifacts (Builds with the name changed to beta)
- name: Create Chrome Beta artifacts
run: npm run build:chrome -- --env.stream=beta
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v2
with:
name: ChromeExtensionBeta
path: dist
- uses: montudor/action-zip@v0.1.0
- uses: montudor/action-zip@v1
with:
args: zip -qq -r ./builds/ChromeExtensionBeta.zip ./dist
- name: Create Firefox Beta artifacts
run: npm run build:firefox -- --env.stream=beta
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v2
with:
name: FirefoxExtensionBeta
path: dist
- uses: montudor/action-zip@v0.1.0
- uses: montudor/action-zip@v1
with:
args: zip -qq -r ./builds/FirefoxExtensionBeta.zip ./dist

View File

@@ -12,16 +12,18 @@ jobs:
steps:
# Initialization
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
- run: npm install
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16'
- run: npm ci
- name: Copy configuration
run: cp config.json.example config.json
# Create Chrome artifacts
- name: Create Chrome artifacts
run: npm run build:chrome
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v2
with:
name: ChromeExtension
path: dist
@@ -32,7 +34,7 @@ jobs:
# Create Firefox artifacts
- name: Create Firefox artifacts
run: npm run build:firefox
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v2
with:
name: FirefoxExtension
path: dist
@@ -42,7 +44,7 @@ jobs:
# Create Beta artifacts (Builds with the name changed to beta)
- name: Create Chrome Beta artifacts
run: npm run build:chrome -- --env.stream=beta
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v2
with:
name: ChromeExtensionBeta
path: dist
@@ -75,7 +77,7 @@ jobs:
# Firefox Beta
- name: Create Firefox Beta artifacts
run: npm run build:firefox -- --env.stream=beta
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v2
with:
name: FirefoxExtensionBeta
path: dist
@@ -92,7 +94,7 @@ jobs:
run: sudo apt-get install rename
- name: Rename signed file
run: cd ./web-ext-artifacts ; rename 's/.*/FirefoxSignedInstaller.xpi/' *
- uses: actions/upload-artifact@v1
- uses: actions/upload-artifact@v2
with:
name: FirefoxExtensionSigned.xpi
path: ./web-ext-artifacts/FirefoxSignedInstaller.xpi

20
.github/workflows/tests.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: Tests
on: [push, pull_request]
jobs:
build:
name: Run tests
runs-on: ubuntu-latest
steps:
# Initialization
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '16'
- run: npm ci
- name: Run tests
run: npm run test-without-building

View File

@@ -50,16 +50,18 @@ See the [Wiki](https://github.com/ajayyy/SponsorBlock/wiki) for important links.
The backend server code is available here: https://github.com/ajayyy/SponsorBlockServer
To make sure that this project doesn't die, I have made the database publicly downloadable at https://sponsor.ajay.app/database ([License](https://github.com/ajayyy/SponsorBlock/wiki/Database-and-API-License)). If you are planning on using the database in another project, please read the [API Docs](https://github.com/ajayyy/SponsorBlock/wiki/API-Docs) page for more information.
To make sure that this project doesn't die, I have made the database publicly downloadable at https://sponsor.ajay.app/database ([License](https://github.com/ajayyy/SponsorBlock/wiki/Database-and-API-License)). If you are planning on using the database in another project, please read the [API Docs](https://wiki.sponsor.ajay.app/index.php/API_Docs) page for more information.
The dataset and API are now being used in some [ports](https://github.com/ajayyy/SponsorBlock/wiki/3rd-Party-Ports) as well as a [neural network](https://github.com/andrewzlee/NeuralBlock).
# API
You can read the API docs [here](https://github.com/ajayyy/SponsorBlockServer#api-docs).
You can read the API docs [here](https://wiki.sponsor.ajay.app/index.php/API_Docs).
# Building
You must have Node.js 16 installed.
Rename `config.json.example` to `config.json` and adjust configuration as desired.
There are also other build scripts available. Install `npm`, then run `npm install` in the repository to install dependencies.
@@ -90,7 +92,7 @@ mv ./oss-attribution/attribution.txt ./public/oss-attribution/attribution.txt
# Credit
The awesome [Invidious API](https://github.com/omarroth/invidious/wiki/API) was previously used, and the server is now using [NewLeaf](https://git.sr.ht/~cadence/NewLeaf) as a to get video info from YouTube.
The awesome [Invidious API](https://docs.invidious.io/API.md) was previously used, and the server is now using [NewLeaf](https://git.sr.ht/~cadence/NewLeaf) as a to get video info from YouTube.
Originally forked from [YTSponsorSkip](https://github.com/NDevTK/YTSponsorSkip), but very little code remains.

View File

@@ -1,7 +1,7 @@
{
"name": "__MSG_fullName__",
"short_name": "SponsorBlock",
"version": "3.1.1",
"version": "3.3.3",
"default_locale": "en",
"description": "__MSG_Description__",
"homepage_url": "https://sponsor.ajay.app",

23947
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "Това скрива бутоните, които се показват в плейъра на YouTube за изпращане на сегменти за пропускане."
},
"showSkipButton": {
"message": "Оставяне в плейъра на бутона за преминаване към акцента"
},
"showInfoButton": {
"message": "Показване на бутона за информация в плейъра на YouTube"
},
"hideInfoButton": {
"message": "Скриване на бутона за информация в плейъра на YouTube"
},
"whatInfoButton": {
"message": "Това е бутонът, който отваря изскачащ прозорец в страницата на YouTube."
},
"autoHideInfoButton": {
"message": "Автоматично скриване на бутона за информация"
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"message": "Показване на бутона за изтриване в плейъра на YouTube"
},
"whatDeleteButton": {
"message": "Това е бутонът в плейъра на YouTube, който ще изчисти всичките ви неизпратени сегменти за текущия видеоклип."
},
"enableViewTracking": {
"message": "Активиране проследяването на броя пропускания"
},
@@ -442,9 +439,6 @@
"showUploadButton": {
"message": "Показване на бутона за качване"
},
"whatUploadButton": {
"message": "Този бутон се появява в плейъра на YouTube, след като сте избрали времева отметка и сте готови за изпращане."
},
"customServerAddress": {
"message": "Адрес на сървъра на SponsorBlock"
},
@@ -656,6 +650,9 @@
"message": "За да изпратите сегменти с категория „{0}“, трябва да я активирате от опциите. Ще бъдете пренасочени към опциите сега.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Внимание: Само един сегмент от този тип може да е активен. Изпращането на няколко ще доведе до показване на случаен."
},
"youMustSelectACategory": {
"message": "Трябва да изберете категория за всички сегменти, които изпращате!"
},
@@ -739,7 +736,7 @@
"message": "Скриване завинаги"
},
"warningChatInfo": {
"message": "Получихте предупреждение и временно не можете да изпращате сегменти. Това означава, че забелязахме, че допускате някои често срещани грешки, които не са злонамерени, и просто искаме да изясним правилата. Можете също да се присъедините към този чат с помощта на discord.gg/SponsorBlock или matrix.to/#/#sponsor:ajay.app"
"message": "Получихте предупреждение и временно не можете да изпращате сегменти. Това означава, че забелязахме, че допускате някои често срещани грешки, които не са злонамерени. Моля, просто потвърдете, че разбирате правилата и ние ще премахнем предупреждението. Можете също да се присъедините към този чат от discord.gg/SponsorBlock или matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Гласуването е отхвърлено поради предупреждение. Щракнете, за да отворите чат и да го разрешите, или се върнете по-късно, когато имате време.",

View File

@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "Skryje tlačítka, která se zobrazí v YouTube přehrávači pro přeskočení segmentů."
},
"showSkipButton": {
"message": "Nechat tlačítko přeskočení na zvýraznění v přehrávači"
},
"showInfoButton": {
"message": "Zobrazit informační tlačítko v YouTube přehrávači"
},
"hideInfoButton": {
"message": "Skrýt informační tlačítko v YouTube přehrávači"
},
"whatInfoButton": {
"message": "Toto je tlačítko, které otevře vyskakovací nabídku na YouTube stránce."
},
"autoHideInfoButton": {
"message": "Automaticky skrýt informační tlačítko"
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"message": "Zobrazit tlačítko Odstranit v YouTube přehrávači"
},
"whatDeleteButton": {
"message": "Toto je tlačítko v YouTube přehrávači, které odebere všechny vaše neodeslané segmenty v současném videu."
},
"enableViewTracking": {
"message": "Povolit počítadlo přeskočení"
},
@@ -442,9 +439,6 @@
"showUploadButton": {
"message": "Zobrazit tlačítko Nahrát"
},
"whatUploadButton": {
"message": "Toto tlačítko se objeví v YouTube přehrávači po vybrání časového razítka a po připravení k odeslání."
},
"customServerAddress": {
"message": "Adresa serveru SponsorBlock"
},
@@ -656,6 +650,9 @@
"message": "Pro odeslání segmentů v kategorii \"{0}\" to nejprve musíte povolit v nastavení. Nyní budete přesměrováni do nastavení.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Varování: tento typ segmentu může být aktivní najednou pouze jeden. Odeslání více segmentů způsobí zobrazení náhodného segmentu."
},
"youMustSelectACategory": {
"message": "Musíte vybrat kategorii pro všechny odeslané segmenty!"
},
@@ -739,7 +736,7 @@
"message": "Skrýt napořád"
},
"warningChatInfo": {
"message": "Dostali jste varování a nemůžete dočasně přidávat segmenty. To znamená, že jsme si všimli, že děláte běžné chyby, které nejsou škodlivé, jen chceme vyjasnit pravidla. Ta se můžete připojit do tohoto chatu pomocí discord.gg/SponsorBlock nebo matrix.to/#/#sponsor:ajay.app"
"message": "Dostali jste varování a nemůžete dočasně přidávat segmenty. To znamená, že jsme si všimli, že děláte běžné chyby, které nejsou škodlivé, stačí potvrdit přečtení pravidel a odebereme varování. Ta se můžete připojit do tohoto chatu pomocí discord.gg/SponsorBlock nebo matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Hlas zamítnut kvůli varování. Klikněte pro otevření chatu pro vyřešení, nebo se vraťte později, až budete mít čas.",

View File

@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "Versteckt die Schaltflächen im YouTube-Videoplayer, um Segmente einzusenden."
},
"showSkipButton": {
"message": "Behalte \"Zum Highlight springen\"-Knopf in der Navigationsleiste"
},
"showInfoButton": {
"message": "Zeige Info-Knopf im Youtube-Videoplayer"
},
"hideInfoButton": {
"message": "Deaktiviere Info-Knopf im Youtube-Videoplayer"
},
"whatInfoButton": {
"message": "Dieser Knopf öffnet ein Pop-up auf der Youtube-Seite."
},
"autoHideInfoButton": {
"message": "Info-Button automatisch ausblenden"
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"message": "Zeige den Löschen-Knopf im Youtube-Videoplayer"
},
"whatDeleteButton": {
"message": "Dieser Knopf im YouTube-Videoplayer löscht alle nicht übermittelten Segmente für das aktuelle Video."
},
"enableViewTracking": {
"message": "Aktiviere das Zählen übersprungener Segmente"
},
@@ -320,7 +317,7 @@
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} stummgeschalten",
"message": "{0} stummgeschaltet",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
@@ -442,9 +439,6 @@
"showUploadButton": {
"message": "Upload-Knopf anzeigen"
},
"whatUploadButton": {
"message": "Dieser Knopf erscheint im YouTube-Videoplayer, nachdem du ein Videosegment markiert hast und dazu bereit bist, es zu übermitteln."
},
"customServerAddress": {
"message": "SponsorBlock Serveradresse"
},
@@ -656,6 +650,9 @@
"message": "Um Segmente aus der Kategorie \"{0}\" zu senden, musst du diese in den Optionen aktivieren. Du wirst jetzt zu den Optionen weitergeleitet.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Achtung: Diese Art von Segment kann nur einmal pro Video aktiv sein. Sollten mehrere eingereicht werden, wird ein zufälliges angezeigt werden."
},
"youMustSelectACategory": {
"message": "Du musst eine Kategorie für jedes zu übermittelnde Segment auswählen!"
},
@@ -739,7 +736,7 @@
"message": "Dauerhaft verbergen"
},
"warningChatInfo": {
"message": "Du wurdest verwarnt und kannst vorrübergehend keine Segmente einreichen. Es ist uns aufgefallen, dass du gängige Fehler machst, welche nicht schädlich sind, und wir wollen dir nur die Regeln klar machen. Du kannst auch dem Chat durch discord.gg/SponsorBlock oder matrix.to/#/#sponsor:ajay.app beitreten"
"message": "Du hast eine Warnung erhalten und kannst vorübergehend keine Segmente einreichen. Uns ist nämlich aufgefallen, dass du nicht bösartige Fehler in deinen Einreichungen machst. Bitte bestätige, dass du die Regeln verstanden hast. Darauffolgend können wir die Warnung entfernen. Du kannst diesem Chat auch mit discord.gg/SponsorBlock oder matrix.to/#/#sponsor:ajay.app beitreten"
},
"voteRejectedWarning": {
"message": "Abstimmung wegen einer Warnung abgelehnt. Klicke hier um einen Chat zu öffnen, oder versuch es später erneut, wenn du Zeit hast.",
@@ -806,7 +803,7 @@
"message": "Wo kann ich den Quellcode kriegen?"
},
"Credits": {
"message": "Credits"
"message": "Mitwirkende"
},
"highlightNewFeature": {
"message": "Neu! Gehe mit einem Klick zum Punkt des Videos mit der neuen \"Hervorheben\" Kategorie"

View File

@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "This hides the buttons that appear on the YouTube player to submit skip segments."
},
"showSkipButton": {
"message": "Keep Skip To Highlight Button On Player"
},
"showInfoButton": {
"message": "Show Info Button On YouTube Player"
},
"hideInfoButton": {
"message": "Hide Info Button On YouTube Player"
},
"whatInfoButton": {
"message": "This is the button that opens up a popup in the YouTube page."
},
"autoHideInfoButton": {
"message": "Auto-hide Info Button"
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"message": "Show Delete Button On YouTube Player"
},
"whatDeleteButton": {
"message": "This is the button on the YouTube player that will clear all your un-submitted segments for the current video."
},
"enableViewTracking": {
"message": "Enable Skip Count Tracking"
},
@@ -442,9 +439,6 @@
"showUploadButton": {
"message": "Show Upload Button"
},
"whatUploadButton": {
"message": "This button appears on the YouTube player after you have selected a timestamp and are ready to submit."
},
"customServerAddress": {
"message": "SponsorBlock Server Address"
},
@@ -656,6 +650,9 @@
"message": "To submit segments with the category of \"{0}\", you must enable it in the options. You will be redirected to the options now.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Warning: This type of segment can have a maximum of one active at a time. Submitting multiple will cause a random one to be shown."
},
"youMustSelectACategory": {
"message": "You must select a category for all segments you are submitting!"
},
@@ -739,7 +736,7 @@
"message": "Hide forever"
},
"warningChatInfo": {
"message": "You got a warning and cannot submit segments temporarily. This means that we noticed you were making some common mistakes that are not malicious, and we just want to clarify the rules. You can also join this chat using discord.gg/SponsorBlock or matrix.to/#/#sponsor:ajay.app"
"message": "You got a warning and cannot submit segments temporarily. This means that we noticed you were making some common mistakes that are not malicious, please just confirm that you understand the rules and we will remove the warning. You can also join this chat using discord.gg/SponsorBlock or matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Vote rejected due to a warning. Click to open a chat to resolve it, or come back later when you have time.",

View File

@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "Esto oculta los botones que aparecen en el reproductor de YouTube que se usan para enviar segmentos saltados."
},
"showSkipButton": {
"message": "Mantener el Botón de \"Saltar a Destacado\" en el Reproductor"
},
"showInfoButton": {
"message": "Mostrar botón de información en el reproductor de YouTube"
},
"hideInfoButton": {
"message": "Ocultar botón de información en el reproductor de YouTube"
},
"whatInfoButton": {
"message": "Este es el botón que abre una ventana en la página de YouTube."
},
"autoHideInfoButton": {
"message": "Ocular automáticamente el Botón de Información"
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"message": "Mostrar botón de eliminar en el reproductor de YouTube"
},
"whatDeleteButton": {
"message": "Este es el botón en el reproductor de YouTube que eliminará todos tus segmentos no enviados para el vídeo actual."
},
"enableViewTracking": {
"message": "Habilitar el conteo de omisiones"
},
@@ -442,9 +439,6 @@
"showUploadButton": {
"message": "Mostrar botón de subida"
},
"whatUploadButton": {
"message": "Este botón aparece en el reproductor de YouTube después de que has seleccionado una marca de tiempo y estas listo para enviar."
},
"customServerAddress": {
"message": "Dirección del servidor SponsorBlock"
},
@@ -656,6 +650,9 @@
"message": "Para enviar segmentos con la categoría de \"{0}\", debes activarlo en las opciones. Serás redirigido a las opciones ahora.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Advertencia: Solo puede haber uno de este tipo de segmento activo a la vez. Enviar múltiples causará que se muestre uno al azar."
},
"youMustSelectACategory": {
"message": "¡Debes seleccionar una categoría para todos los segmentos que estés presentando!"
},
@@ -739,7 +736,7 @@
"message": "Ocultar para siempre"
},
"warningChatInfo": {
"message": "Ha recibido una advertencia y no puede enviar segmentos temporalmente. Esto significa que hemos notado de que estaba cometiendo algunos errores comunes que no son maliciosos, y solo queremos aclarar las reglas. Puedes unirte a este chat usando discord.gg/SponsorBlock o matrix.to/#/#sponsor:ajay.app"
"message": "Has recibido una advertencia y no puedes enviar segmentos temporalmente. Esto significa que hemos notado que estabas cometiendo algunos errores comunes que no son maliciosos, por favor, solo confirma que entiendes las reglas y anularemos la advertencia. También puedes unirte a este chat usando discord.gg/SponsorBlock o matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Voto rechazado debido a una advertencia. Haga clic aquí para abrir un chat para resolverlo, o vuelva más tarde cuando tenga tiempo.",

View File

@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "See peidab nupud, mis kuvatakse YouTube'i mängijal vahelejätmiste segmentide saatmiseks."
},
"showSkipButton": {
"message": "Hoia esiletõstuni vahelejätmise nuppu mängijal"
},
"showInfoButton": {
"message": "Kuva YouTube'i mängijal infonupp"
},
"hideInfoButton": {
"message": "Peida YouTube'i mängijal infonupp"
},
"whatInfoButton": {
"message": "See on see nupp, mis avab YouTube'i lehel hüpiku."
},
"autoHideInfoButton": {
"message": "Peida infonupp automaatselt"
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"message": "Kuva YouTube'i mängijal kustutusnupp"
},
"whatDeleteButton": {
"message": "YouTube'i mängija nupp, mis tühjendab kõik sinu praeguse video saatmata segmendid."
},
"enableViewTracking": {
"message": "Luba vahelejätmiste arvu jälgimine"
},
@@ -442,9 +439,6 @@
"showUploadButton": {
"message": "Kuva üleslaadimisnupp"
},
"whatUploadButton": {
"message": "See nupp kuvatakse YouTube'i mängijal, kui oled ajatempli ära valinud ning saatmiseks valmis."
},
"customServerAddress": {
"message": "SponsorBlocki serveri aadress"
},
@@ -656,6 +650,9 @@
"message": "Kategooriaga \"{0}\" segmentide saatmiseks pead selle enne valikutes lubama. Sind suunatakse nüüd valikutesse.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Hoiatus: Seda tüüpi segmenti saab korraga aktiivne olla vaid üks. Mitme saatmine põhjustab suvalise segmendi kuvamise."
},
"youMustSelectACategory": {
"message": "Sa pead enne saatmist igale segmendile kategooria valima!"
},
@@ -739,7 +736,7 @@
"message": "Peida igaveseks"
},
"warningChatInfo": {
"message": "Sa said hoiatuse ning ei saa ajutiselt segmente saata. See tähendab, et me leidsime sind tegemast teatud sagedasi, mitte-pahatahtlikke vigu, ning soovime sulle meie reegleid täpsustada (inglise keeles). Sa võid selle vestlusega liituda ka discord.gg/SponsorBlock või matrix.to/#/#sponsor:ajay.app kaudu."
"message": "Sa said hoiatuse ning ei saa ajutiselt segmente saata. See tähendab, et me leidsime sind tegemast teatud sagedasi, mitte-pahatahtlikke vigu - palun kinnita (inglise keeles), et mõistad reegleid ning me eemaldame hoiatuse. Sa võid selle vestlusega liituda ka discord.gg/SponsorBlock või matrix.to/#/#sponsor:ajay.app kaudu."
},
"voteRejectedWarning": {
"message": "Hääletus hoiatuse tõttu tagasilükatud. Klõpsa, et avada selle lahendamiseks vestlus või tule hiljem tagasi, kui aega saad.",
@@ -754,6 +751,9 @@
"helpPageThanksForInstalling": {
"message": "Täname SponsorBlocki paigaldamise eest."
},
"helpPageReviewOptions": {
"message": "Palun vaata allolevad valikud üle"
},
"helpPageNews": {
"message": "Uudised ja kuidas see on valmistatud"
},

View File

@@ -182,6 +182,9 @@
"message": "کار شما",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "به نظر می‌رسد سرور زیر فشار است. چند ثانیه‌ی دیگر دوباره امتحان کنید."
},
"errorCode": {
"message": "کد خطا: "
},
@@ -191,6 +194,12 @@
"mute": {
"message": "بی‌صدا"
},
"minLower": {
"message": "دقیقه"
},
"hourLower": {
"message": "ساعت"
},
"createdBy": {
"message": "ایجاد شده توسط"
},

View File

@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "Tämä piilottaa YouTuben soittimessa näkyvät, ohitettavien aikojen lähettämiseen käytetyt painikkeet."
},
"showSkipButton": {
"message": "Pidä \"Ohita kohtaan: Kohokohta\" -painike soittimessa"
},
"showInfoButton": {
"message": "Näytä info-painike YouTuben soittimessa"
},
"hideInfoButton": {
"message": "Piilota info-painike YouTuben soittimessa"
},
"whatInfoButton": {
"message": "Tämä on painike, joka avaa ponnahdusikkunan YouTube-sivulla."
},
"autoHideInfoButton": {
"message": "Piilota info-painike automaattisesti"
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"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."
},
"enableViewTracking": {
"message": "Ota ohitusten lukumäärän seuranta käyttöön"
},
@@ -308,6 +305,9 @@
"skip_category": {
"message": "Ohita {0}?"
},
"mute_category": {
"message": "Mykistä {0}?"
},
"skip_to_category": {
"message": "Ohita kohtaan: {0}",
"description": "Used for skipping to things (Skip to Highlight)"
@@ -316,6 +316,10 @@
"message": "{0} ohitettu",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} Mykistetty",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "Ohitettiin kohtaan: {0}",
"description": "Used for skipping to things (Skipped to Highlight)"
@@ -435,9 +439,6 @@
"showUploadButton": {
"message": "Näytä lähetä-painike"
},
"whatUploadButton": {
"message": "Tämä painike ilmestyy YouTube-soittimeen, kun olet valinnut aikaleiman ja olet valmis lähettämään sen."
},
"customServerAddress": {
"message": "SponsorBlock-palvelimen osoite"
},
@@ -649,6 +650,9 @@
"message": "Lähettääksesi segmenttejä \"{0}\" kategorialla, sinun täytyy aktivoida se asetuksista. Sinut uudelleenohjataan asetuksiin nyt.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Varoitus: Tämäntyyppisiä segmenttejä voi olla aktiivisena enintään yksi. Usean lähettäminen aiheuttaa sen, että satunnainen segmentti näytetään."
},
"youMustSelectACategory": {
"message": "Sinun täytyy valita kategoria kaikille segmenteille, joita olet lähettämässä!"
},
@@ -732,7 +736,7 @@
"message": "Piilota ikuisesti"
},
"warningChatInfo": {
"message": "Sait varoituksen ja et voi lähettää segmenttejä väliaikaisesti. Tämä tarkoittaa, että huomasimme, että teit joitakin yleisiä virheitä, jotka eivät ole tahallisia, ja haluamme vain selventää säännöt. Voit myös liittyä tähän keskusteluun käyttäen discord.gg/SponsorBlock tai matrix.to/#/#sponsor:ajay.app"
"message": "Sait varoituksen ja et voi lähettää segmenttejä väliaikaisesti. Tämä tarkoittaa, että huomasimme, että teit joitakin yleisiä virheitä, jotka eivät ole tahallisia, joten vahvistakaa, että ymmärrätte säännöt ja poistamme varoituksen. Voit myös liittyä tähän keskusteluun käyttäen discord.gg/SponsorBlock tai matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Ääni hylättiin varoituksen takia. Klikkaa avataksesi chatin sen ratkaisemiseksi, tai tule takaisin myöhemmin kun sinulla on siihen aikaa.",

View File

@@ -188,9 +188,6 @@
"hideInfoButton": {
"message": "Cacher le bouton Info sur le lecteur YouTube"
},
"whatInfoButton": {
"message": "Il s'agit du bouton qui ouvre l'encart sur la page YouTube."
},
"autoHideInfoButton": {
"message": "Masquer Automatiquement Le Button Info"
},
@@ -200,9 +197,6 @@
"showDeleteButton": {
"message": "Montrer le bouton Supprimer sur le lecteur YouTube"
},
"whatDeleteButton": {
"message": "Il s'agit du bouton qui permet de supprimer tous les segments commerciaux depuis le lecteur YouTube."
},
"enableViewTracking": {
"message": "Activer le suivi du nombre de sauts de segments"
},
@@ -308,6 +302,9 @@
"skip_category": {
"message": "Passer {0} ?"
},
"mute_category": {
"message": "Mute {0}?"
},
"skip_to_category": {
"message": "Passer à {0}?",
"description": "Used for skipping to things (Skip to Highlight)"
@@ -316,6 +313,10 @@
"message": "{0} ignoré",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} mis en sourdine",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "Sauté à {0}",
"description": "Used for skipping to things (Skipped to Highlight)"
@@ -435,9 +436,6 @@
"showUploadButton": {
"message": "Afficher le bouton de téléchargement"
},
"whatUploadButton": {
"message": "Ce bouton apparaît sur le lecteur YouTube dès qu'un segment est prêt à être envoyé."
},
"customServerAddress": {
"message": "Adresse du serveur SponsorBlock"
},
@@ -649,6 +647,9 @@
"message": "Pour envoyer des segments de la catégorie \"{0}\", vous devez l'activer dans les options. Vous allez être redirigé vers les options maintenant.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Avertissement: Ce type de segment peut avoir au maximum un seul actif à la fois. En soumettant plusieurs segments, un seul aléatoire sera affiché."
},
"youMustSelectACategory": {
"message": "Vous devez sélectionner une catégorie pour tous les segments que vous soumettez !"
},
@@ -731,9 +732,6 @@
"hideForever": {
"message": "Cacher pour toujours"
},
"warningChatInfo": {
"message": "Vous avez reçu un avertissement et ne pouvez pas soumettre des segments temporairement. Cela signifie que nous avons remarqué que vous commettez des erreurs courantes qui ne sont pas malveillantes, et que nous voulons simplement clarifier les règles. Vous pouvez également rejoindre ce chat en utilisant discord.gg/SponsorBlock ou matrix.to/#/+sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Le vote a été rejeté en raison d'un avertissement. Cliquez pour ouvrir un chat et y mettre fin , ou revenez plus tard lorsque vous avez le temps.",
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."

View File

@@ -182,9 +182,6 @@
"hideInfoButton": {
"message": "Info gomb elrejtése a YouTube lejátszón"
},
"whatInfoButton": {
"message": "Ez a gomb felhoz egy felugró dobozt a YouTube oldalon."
},
"autoHideInfoButton": {
"message": "Automatikus elrejtése az Információ Gombnak"
},
@@ -194,9 +191,6 @@
"showDeleteButton": {
"message": "Törlés gomb mutatása a YouTube lejátszón"
},
"whatDeleteButton": {
"message": "Ez egy gomb a lejátszón, ami törli az összes beküldetlen szegmensét a jelenlegi videón."
},
"enableViewTracking": {
"message": "Átugrás-számláló követés bekapcsolása"
},
@@ -371,9 +365,6 @@
"showUploadButton": {
"message": "Feltöltés gomb megjelenítése"
},
"whatUploadButton": {
"message": "Ez a gomb a YouTube lejátszón jelenik meg, miután kiválasztott egy időtartamot és készen áll a beküldésre."
},
"customServerAddress": {
"message": "SponsorBlock szerver címe"
},
@@ -501,6 +492,12 @@
"category_music_offtopic_short": {
"message": "Nem-Zene"
},
"category_poi_highlight": {
"message": "Kiemelés"
},
"category_poi_highlight_description": {
"message": "A videónak az a része, amelyiket a legtöbb ember látni szeretne. Hasonlít az \"A videó x percnél kezdődik\" jellegű hozzászólásokhoz."
},
"category_livestream_messages": {
"message": "Élő adás: Adomány / üzenet olvasások"
},
@@ -528,6 +525,10 @@
"category": {
"message": "Kategória"
},
"skipOption": {
"message": "Átugrás beállítása",
"description": "Used on the options page to describe the ways to skip the segment (auto skip, manual, etc.)"
},
"enableTestingServer": {
"message": "Bétateszt szerver bekapcsolása"
},

View File

@@ -52,6 +52,9 @@
"reskip": {
"message": "Lewati Ulang"
},
"unmute": {
"message": "Bunyikan"
},
"paused": {
"message": "Dijeda"
},
@@ -85,6 +88,9 @@
"noVideoID": {
"message": "Video YouTube tidak ditemukan.\nJika terjadi kesalahan, segarkan halaman."
},
"refreshSegments": {
"message": "Segarkan segmen"
},
"success": {
"message": "Sukses!"
},
@@ -155,6 +161,9 @@
"setUsername": {
"message": "Atur Nama Pengguna"
},
"copyPublicID": {
"message": "Salin UserID Publik"
},
"discordAdvert": {
"message": "Gabung dengan server resmi discord untuk memberikan kritik dan saran!"
},
@@ -179,8 +188,8 @@
"hideInfoButton": {
"message": "Sembunyikan Tombol Info Di Pemutar Video YouTube"
},
"whatInfoButton": {
"message": "Ini adalah tombol yang membuka popup di halaman YouTube."
"autoHideInfoButton": {
"message": "Otomatis Sembunyikan Tombol Info"
},
"hideDeleteButton": {
"message": "Sembunyikan Tombol Hapus Di Pemutar Video YouTube"
@@ -188,9 +197,6 @@
"showDeleteButton": {
"message": "Tampilkan Tombol Hapus Di Pemutar Video YouTube"
},
"whatDeleteButton": {
"message": "Ini adalah tombol di pemutar YouTube yang akan menghapus semua segmen yang belum dikirim pada video."
},
"enableViewTracking": {
"message": "Aktifkan Pelacakan Jumlah Lewati"
},
@@ -275,9 +281,15 @@
"skip": {
"message": "Lewati"
},
"mute": {
"message": "Bisukan"
},
"skip_category": {
"message": "Lewati {0}?"
},
"mute_category": {
"message": "Bisukan {0}?"
},
"skip_to_category": {
"message": "Lompat ke {0}?",
"description": "Used for skipping to things (Skip to Highlight)"
@@ -286,6 +298,10 @@
"message": "{0} dilewati",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} Dibisukan",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "Melewati ke {0}",
"description": "Used for skipping to things (Skipped to Highlight)"
@@ -338,6 +354,9 @@
"changeUserID": {
"message": "Impor/Ekspor UserID"
},
"whatChangeUserID": {
"message": "Ini harus dirahasiakan. Ini seperti kata sandi dan tidak boleh dibagikan kepada siapa pun. Jika seseorang mempunyai ini, mereka bisa menyamar jadi anda. Jika anda mencari UserID publik anda, klik ikon papan tulis di popup."
},
"setUserID": {
"message": "Atur UserID"
},
@@ -353,9 +372,19 @@
"supportOtherSites": {
"message": "Dukung Situs Youtube Pihak Ketiga"
},
"supportOtherSitesDescription": {
"message": "Dukung klien YouTube pihak ketiga. Untuk mengaktifkan dukungan, anda harus menerima izin tambahan. Ini tidak akan bekerja di Mode Samaran di Chrome dan varian Chromium lainnya.",
"description": "This replaces the 'supports Invidious' option because it now works on other YouTube sites such as Cloudtube"
},
"supportedSites": {
"message": "Situs yang didukung: "
},
"optionsInfo": {
"message": "Aktifkan dukungan Invidious, nonaktifkan lewati otomatis, tombol sembunyi dan lainnya."
},
"addInvidiousInstance": {
"message": "Tambah Instance Klien Pihak Ketiga"
},
"add": {
"message": "Tambah"
},
@@ -383,9 +412,6 @@
"showUploadButton": {
"message": "Tampilkan Tombol Unggah"
},
"whatUploadButton": {
"message": "Tombol ini muncul di pemutar video YouTube setelah anda memilih stempel waktu dan siap untuk dikirimkan."
},
"customServerAddress": {
"message": "Alamat Server SponsorBlock"
},

View File

@@ -4,20 +4,20 @@
"description": "Name of the extension."
},
"Description": {
"message": "Salta sponsorizzazioni, implorazioni di iscrizione ai canali e molto altro sui video di YouTube. Segnala gli sponsor sui video che guardi per salvare il tempo ad altri.",
"message": "Salta sponsorizzazioni, richieste d'iscrizione ai canali e molto altro sui video di YouTube. Segnala gli sponsor sui video che guardi per salvare il tempo agli altri.",
"description": "Description of the extension."
},
"400": {
"message": "Richiesta non valida"
},
"429": {
"message": "Stai inviando troppi spezzoni per questo video, sei sicuro che ce ne siano così tanti?"
"message": "Stai inviando troppi segmenti per questo video, sei sicuro che ce ne siano così tanti?"
},
"409": {
"message": "Questo spezzone è già stato inviato"
"message": "Questo è già stato inviato"
},
"channelWhitelisted": {
"message": "Canale aggiunto alla whitelist!"
"message": "Canale aggiunto alla lista delle esclusioni!"
},
"Segment": {
"message": "segmento"
@@ -53,13 +53,13 @@
"message": "Salta ancora"
},
"unmute": {
"message": "Riattiva microfono"
"message": "Riattiva il microfono"
},
"paused": {
"message": "In pausa"
},
"manualPaused": {
"message": "Timer Fermato"
"message": "Timer fermato"
},
"confirmMSG": {
"message": "\n\nPer modificare o eliminare valori specifici, premi il pulsante delle informazioni o apri il popup cliccando l'icona dell'estensione nell'angolo in alto a destra."
@@ -68,7 +68,7 @@
"message": "Sei sicuro di volerlo cancellare?\n\n"
},
"Unknown": {
"message": "Si è verificato un errore durante l'invio dello spezzone sponsorizzato, per favore riprova più tardi."
"message": "Si è verificato un errore durante l'invio del segmento, per favore riprova più tardi."
},
"sponsorFound": {
"message": "Questo video ha dei segmenti nel database!"
@@ -77,10 +77,10 @@
"message": "Nessun segmento trovato"
},
"sponsorStart": {
"message": "Il Segmento Inizia Ora"
"message": "Il segmento inizia qui"
},
"sponsorEnd": {
"message": "Il Segmento Termina Ora"
"message": "Il segmento finisce ora"
},
"sponsorCancel": {
"message": "Annulla Creazione del Segmento"
@@ -92,7 +92,7 @@
"message": "Ricarica i segmenti"
},
"success": {
"message": "Successo!"
"message": "Ha funzionato!"
},
"voted": {
"message": "Votato!"
@@ -104,16 +104,16 @@
"message": "Si è verificato un errore durante la connessione. Codice errore: "
},
"clearTimes": {
"message": "Pulisci Segmenti"
"message": "Rimuovi i segmenti"
},
"openPopup": {
"message": "Apri il Popup di SponsorBlock"
"message": "Apri il popup di SponsorBlock"
},
"closePopup": {
"message": "Chiudi il popup"
},
"SubmitTimes": {
"message": "Invia Segmenti"
"message": "Invia i segmenti"
},
"submitCheck": {
"message": "Sei sicuro di volerlo inviare?"
@@ -125,7 +125,7 @@
"message": "Rimuovi il canale dalle eccezioni"
},
"voteOnTime": {
"message": "Vota un Segmento"
"message": "Vota un segmento"
},
"Submissions": {
"message": "Contributi"
@@ -147,19 +147,19 @@
"message": "Suggerimento: puoi configurare dei comandi rapidi nelle opzioni"
},
"clearTimesButton": {
"message": "Cancella Minutaggi"
"message": "Cancella minutaggio"
},
"submitTimesButton": {
"message": "Invia Minutaggi"
"message": "Invia minutaggio"
},
"publicStats": {
"message": "Viene utilizzato nelle pagine delle statistiche pubbliche che mostrano quanto hai contribuito. Vedi"
"message": "Questo è usato nelle pagine pubbliche delle statistiche per mostrare quanto hai contribuito. Vedilo"
},
"Username": {
"message": "Nome utente"
},
"setUsername": {
"message": "Imposta Username"
"message": "Imposta nome utente"
},
"copyPublicID": {
"message": "Copia UserID Pubblico"
@@ -174,40 +174,34 @@
"message": "Opzioni"
},
"showButtons": {
"message": "Mostra i Pulsanti nel Lettore di YouTube"
"message": "Mostra i pulsanti sul video"
},
"hideButtons": {
"message": "Nascondi i Pulsanti nel Lettore di YouTube"
"message": "Nascondi i pulsanti sul video"
},
"hideButtonsDescription": {
"message": "Nasconde i pulsanti che appaiono nel lettore di YouTube per inviare spezzoni sponsorizzati. Capisco che può essere fastidioso per alcune\n persone. Invece di utilizzare quei pulsanti, è possibile utilizzare questo popup per inviare gli spezzoni sponsorizzati. Per nascondere l'avviso che appare, \nusa il bottone \"Non mostrare più\" nell'avviso. Potrai sempre abilitare nuovamente queste impostazioni in futuro."
"message": "Nasconde i pulsanti che appaiono sul video per inviare i segmenti da nascondere."
},
"showInfoButton": {
"message": "Mostra il Pulsante Informazioni nel Lettore di YouTube"
"message": "Mostra il pulsante delle informazioni sopra al video"
},
"hideInfoButton": {
"message": "Nascondi il Pulsante Informazioni nel Lettore di YouTube"
},
"whatInfoButton": {
"message": "Questo è il pulsante che apre un popup nella pagina YouTube."
"message": "Nascondi il pulsante d'informazioni sopra al video"
},
"autoHideInfoButton": {
"message": "Nascondi in automatico il Pulsante di Informazioni"
},
"hideDeleteButton": {
"message": "Nascondi il Pulsante Elimina nel Lettore di YouTube"
"message": "Nascondi il pulsante elimina"
},
"showDeleteButton": {
"message": "Mostra il Pulsante Elimina nel Lettore di YouTube"
},
"whatDeleteButton": {
"message": "Questo è il pulsante che ti permette di cancellare tutti gli spezzoni sponsorizzati nel lettore di YouTube."
"message": "Mostra il pulsante elimina"
},
"enableViewTracking": {
"message": "Attiva Monitoraggio Salti"
"message": "Attiva il conteggio dei salti"
},
"whatViewTracking": {
"message": "Questa funzionalità tiene traccia dei segmenti che hai saltato, per far sapere agli utenti quanto il loro contributo abbia aiutato gli altri e sia stato utilizzato come metrica insieme ai voti positivi, per garantire che lo spam non entri nel database. L'estensione invierà un messaggio al server ogni volta che salterai un segmento. Si spera che la maggior parte delle persone non modifichino questa impostazione, in modo da non intaccare l'accuratezza dei numeri di visualizzazione. :)"
"message": "Questa funzionalità tiene traccia dei segmenti che hai saltato per far sapere agli utenti quanto il loro contributo abbia aiutato gli altri e anche come statistica, insieme ai voti positivi, per garantire che lo spam non entri nel database. L'estensione invierà un messaggio al server ogni volta che salterai un segmento. Si spera che la maggior parte delle persone non modifichino questa impostazione, in modo da non intaccare l'accuratezza dei numeri di visualizzazione. :)"
},
"enableViewTrackingInPrivate": {
"message": "Abilita il conteggio dei salti nelle schede private/anonime"
@@ -219,13 +213,13 @@
"message": "Invece di richiedere i segmenti dal server utilizzando l'ID del video, viene inviato un hash dei primi 4 caratteri dell'ID. Questo server invierà i dati per tutti i video con hash simili."
},
"enableRefetchWhenNotFound": {
"message": "Ricarica I Segmenti Su Nuovi Video"
"message": "Ricarica i segmenti su nuovi video"
},
"whatRefetchWhenNotFound": {
"message": "Se il video è nuovo, e non risultano esserci segmenti, continueremo a cercarne di nuovi ogni pochi minuti."
},
"showNotice": {
"message": "Mostra di Nuovo l'Avviso"
"message": "Mostra di nuovo l'avviso"
},
"showSkipNotice": {
"message": "Mostra Avviso Dopo Aver Saltato un Segmento"
@@ -246,15 +240,15 @@
"message": "Tutti i Salta Avvisi Offuscati"
},
"longDescription": {
"message": "SponsorBlock ti consente di saltare sponsorizzazioni, introduzioni, conclusioni, promemoria di iscrizione e altre componenti fastidiose dei video su YouTube. SponsorBlock è un'estensione per browser in crowdsourcing, che consente a chiunque di inviare l'ora di inizio e di fine dei segmenti sponsorizzati e altri segmenti video su YouTube. Quando una persona invia queste informazioni, chiunque altro in possesso di questa estensione sarà in grado di saltare direttamente il segmento sponsorizzato. È possibile saltare anche le sezioni non musicali dei video musicali.",
"message": "SponsorBlock ti consente di saltare sponsorizzazioni, introduzioni, conclusioni, promemoria di iscrizione e altri elementi fastidiosi dai video YouTube. SponsorBlock è un'estensione per browser di crowdsourcing, cioè che consente a chiunque di inviare l'ora di inizio e di fine dei segmenti sponsorizzati e di altro tipo. Quando una persona invia queste informazioni, chiunque altro in possesso di questa estensione sarà in grado di saltare automaticamente il segmento sponsorizzato. È possibile saltare anche le sezioni non musicali dei video musicali.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Sito Web",
"message": "Sito web",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Codice Sorgente",
"message": "Codice sorgente",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
@@ -278,7 +272,7 @@
"message": "Seleziona un tasto premendolo sulla tastiera"
},
"keybindDescriptionComplete": {
"message": "L'associazione di tasti è stata impostata a: "
"message": "Il comando rapido è stato impostato come: "
},
"0": {
"message": "Timeout della connessione. Controlla la tua connessione a Internet. Se internet sta funzionando, il server è probabilmente sovraccarico oppure giù."
@@ -320,7 +314,7 @@
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} Silenziato",
"message": "{0} silenziato",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
@@ -442,9 +436,6 @@
"showUploadButton": {
"message": "Mostra Pulsante di Caricamento"
},
"whatUploadButton": {
"message": "Questo pulsante appare sul riproduttore di YouTube dopo che hai selezionato un marcatore temporale e sei pronto ad inviarlo."
},
"customServerAddress": {
"message": "Indirizzo Server SponsorBlock"
},
@@ -615,7 +606,7 @@
"message": "Salta automaticamente tutti i segmenti quando c'è un segmento non musicale"
},
"muteSegments": {
"message": "Consenti i segmenti che silenziano l'audio invece di saltare"
"message": "Silenzia i segmenti invece di saltarli, quando possibile"
},
"colorFormatIncorrect": {
"message": "Il tuo colore è formattato in modo errato. Dovrebbe essere un codice esadecimale a 3 o 6 cifre con un segno numerico iniziale."
@@ -656,6 +647,9 @@
"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."
},
"poiOnlyOneSegment": {
"message": "Attenzione: questo tipo di segmento può essere presente una sola volta. Inviarne più di uno causerà la visualizzazione casuale di uno solo."
},
"youMustSelectACategory": {
"message": "Devi selezionare una categoria per tutti i segmenti che stai inviando!"
},
@@ -738,9 +732,6 @@
"hideForever": {
"message": "Nascondi per sempre"
},
"warningChatInfo": {
"message": "Hai ricevuto un ammonimento and non puoi inviare segmenti temporaneamente. Ciò significa che abbiamo notato che stavi commettendo alcuni errori comuni senza scopo malevolo, e vogliamo che tu ricontrollassi le regole. Puoi anche partecipare a questa chat su discord.gg/SponsorBlock o matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Voto rifiutato a causa di un ammonimento. Clicca per aprire una chat per risolverlo, oppure torna dopo quando hai tempo.",
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."

View File

@@ -182,9 +182,6 @@
"hideInfoButton": {
"message": "YouTubeプレーヤーの情報ボタンを隠す"
},
"whatInfoButton": {
"message": "これはYouTubeのページ上でポップアップを開くためのボタンです。"
},
"autoHideInfoButton": {
"message": "情報ボタンを自動的に隠す"
},
@@ -194,9 +191,6 @@
"showDeleteButton": {
"message": "YouTubeプレーヤーに削除ボタンを表示"
},
"whatDeleteButton": {
"message": "これはYouTubeプレーヤー上のボタンで、現在の動画から未提出のセグメントを全て消去します。"
},
"enableViewTracking": {
"message": "スキップ回数の統計を有効にする"
},
@@ -423,9 +417,6 @@
"showUploadButton": {
"message": "アップロードボタンを表示"
},
"whatUploadButton": {
"message": "このボタンはタイムスタンプを選択して投稿の準備ができた後にYouTubeプレーヤーに表示されます。"
},
"customServerAddress": {
"message": "SponsorBlock サーバーアドレス"
},
@@ -716,9 +707,6 @@
"hideForever": {
"message": "二度と表示しない"
},
"warningChatInfo": {
"message": "警告のため,区域の送信が一時的に禁止されています。これは利用者さまが間違いを犯されているというこちらどもの判断ではありますが,この間違いが悪意あるものとは思っておりません。単に,利用者さまに区域送信における規則を知っていただきたいだけです。連絡先: discord.gg/SponsorBlockmatrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "警告により投票が拒否されました。クリックして運営に連絡するか,少し時間を置いてからやりなおしてください。",
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."

View File

@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "스킵할 구간을 제출하기 위해 YouTube 플레이어에 나타나는 버튼을 숨깁니다"
},
"showSkipButton": {
"message": "플레이어에 하이라이트로 건너뛰기 버튼 표시"
},
"showInfoButton": {
"message": "YouTube 플레이어에서 정보 버튼 표시하기"
},
"hideInfoButton": {
"message": "YouTube 플레이어에서 정보 버튼 숨기기"
},
"whatInfoButton": {
"message": "YouTube 페이지에 팝업으로 표시되는 버튼입니다"
},
"autoHideInfoButton": {
"message": "정보 버튼 자동 숨김"
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"message": "YouTube 플레이어에서 삭제 버튼 표시하기"
},
"whatDeleteButton": {
"message": "현재 영상에 제출되지 않은 구간을 YouTube 플레이어 내에서 지우는 버튼입니다"
},
"enableViewTracking": {
"message": "스킵 개수 추적 활성화"
},
@@ -442,9 +439,6 @@
"showUploadButton": {
"message": "업로드 버튼 표시"
},
"whatUploadButton": {
"message": "이 버튼은 타임 스탬프를 설정 후 제출 준비가 되었을 때 YouTube 플레이어에 나타납니다."
},
"customServerAddress": {
"message": "SponsorBlock 서버 주소"
},
@@ -615,7 +609,7 @@
"message": "음악이 아닌 구간이 있을 때는 모든 구간 자동 건너뛰기"
},
"muteSegments": {
"message": "구간을 건너뛰지 않고 음소거 처리하도록 합니다"
"message": "구간을 건너뛰지 않고 음소거 처리"
},
"colorFormatIncorrect": {
"message": "올바르지 않은 색상 코드입니다. 색상 코드는 샵 (#) 기호로 시작하여 3자리 또는 6자리의 16진수로 구성되어야 합니다."
@@ -656,6 +650,9 @@
"message": "\"{0}\" 카테고리의 세그먼트를 제출하려면 설정에서 활성화 해주셔야 합니다. 지금 설정으로 이동합니다.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "경고: 이 유형의 세그먼트는 한 번에 최대 하나씩 활성화될 수 있습니다. 여러 개를 제출하면 무작위로 표시됩니다."
},
"youMustSelectACategory": {
"message": "제출 해야하는 모든 구간의 카테고리를 설정해야합니다!"
},
@@ -739,7 +736,7 @@
"message": "다시 보지 않음"
},
"warningChatInfo": {
"message": "현재 귀하가 악의적이지 않은 일반적인 실수를 저지르고 있음을 발견했습니다. 이에 따라 경고 조치가 내려져 일시적으로 구간을 제출할 수 없게 되었습니다. 저희는 단지 규칙을 명확히 전달하고자 합니다. discord.gg/SponsorBlock 또는 matrix.to/#/#sponsor:ajay.app 링크를 통해 대화에 참여할 수도 있습니다."
"message": "현재 귀하가 악의적이지 않은 일반적인 실수를 저지르고 있음을 발견했습니다. 이에 따라 경고 조치가 내려져 일시적으로 구간을 제출할 수 없게 되었습니다. 규정을 잘 숙지했음을 확인해주십시오. 그러면 경고를 삭제하겠습니다. discord.gg/SponsorBlock 또는 matrix.to/#/#sponsor:ajay.app 링크를 통해 대화에 참여할 수도 있습니다."
},
"voteRejectedWarning": {
"message": "경고로 인해 투표가 거부되었습니다. 클릭하여 대화로 해결하거나, 나중에 시간이 나면 다시 오세요.",

View File

@@ -176,18 +176,12 @@
"hideInfoButton": {
"message": "YouTube പ്ലെയറിൽ വിവര ബട്ടൺ മറയ്‌ക്കുക"
},
"whatInfoButton": {
"message": "YouTube പേജിൽ ഒരു പോപ്പ്അപ്പ് തുറക്കുന്ന ബട്ടണാണിത്."
},
"hideDeleteButton": {
"message": "YouTube പ്ലെയറിൽ ഇല്ലാതാക്കുക ബട്ടൺ മറയ്‌ക്കുക"
},
"showDeleteButton": {
"message": "YouTube പ്ലെയറിൽ ഇല്ലാതാക്കുക ബട്ടൺ കാണിക്കുക"
},
"whatDeleteButton": {
"message": "നിലവിലെ വീഡിയോയ്‌ക്കായി നിങ്ങൾ സമർപ്പിക്കാത്ത എല്ലാ സെഗ്‌മെന്റുകളും മായ്‌ക്കുന്ന YouTube പ്ലെയറിലെ ബട്ടൺ ഇതാണ്."
},
"enableViewTracking": {
"message": "ക Count ണ്ട് ട്രാക്കിംഗ് ഒഴിവാക്കുക പ്രാപ്തമാക്കുക"
},
@@ -359,9 +353,6 @@
"showUploadButton": {
"message": "അപ്‌ലോഡ് ബട്ടൺ കാണിക്കുക"
},
"whatUploadButton": {
"message": "നിങ്ങൾ ഒരു ടൈംസ്റ്റാമ്പ് തിരഞ്ഞെടുത്ത് സമർപ്പിക്കാൻ തയ്യാറായ ശേഷം ഈ ബട്ടൺ YouTube പ്ലെയറിൽ ദൃശ്യമാകും."
},
"customServerAddress": {
"message": "സ്പോൺസർബ്ലോക്ക് സെർവർ വിലാസം"
},

View File

@@ -176,18 +176,12 @@
"hideInfoButton": {
"message": "Sembunyikan Butang Maklumat Pada Pemain YouTube"
},
"whatInfoButton": {
"message": "Ini adalah butang yang membuka pop timbul di halaman YouTube."
},
"hideDeleteButton": {
"message": "Sembunyikan Butang Padam Pada Pemain YouTube"
},
"showDeleteButton": {
"message": "Tunjukkan Butang Padam Pada Pemain YouTube"
},
"whatDeleteButton": {
"message": "Ini adalah butang pada pemain YouTube yang akan membersihkan semua segmen anda yang belum dihantar untuk video semasa."
},
"enableViewTracking": {
"message": "Dayakan Skip Count Tracking"
},
@@ -359,9 +353,6 @@
"showUploadButton": {
"message": "Tunjukkan Butang Muat Naik"
},
"whatUploadButton": {
"message": "Butang ini muncul di pemain YouTube setelah anda memilih cap waktu dan siap untuk dihantar."
},
"customServerAddress": {
"message": "Alamat Pelayan Sponsorblock"
},

View File

@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "Dit verbergt de knoppen die verschijnen op de YouTube-speler om segmenten over te slaan."
},
"showSkipButton": {
"message": "Knop voor \"overslaan naar hoogtepunt\" op speler houden"
},
"showInfoButton": {
"message": "Info-knop op YouTube-speler weergeven"
},
"hideInfoButton": {
"message": "Info-knop op YouTube-speler verbergen"
},
"whatInfoButton": {
"message": "Dit is de knop die een pop-up opent op de YouTube-pagina."
},
"autoHideInfoButton": {
"message": "Infoknop automatisch verbergen"
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"message": "Verwijderen-knop op YouTube-speler weergeven"
},
"whatDeleteButton": {
"message": "Dit is de knop op de YouTube-speler die al uw niet-ingediende segmenten van de huidige video zal wissen."
},
"enableViewTracking": {
"message": "Bijhouden van het aantal keren overslaan inschakelen"
},
@@ -442,9 +439,6 @@
"showUploadButton": {
"message": "Uploaden-knop weergeven"
},
"whatUploadButton": {
"message": "Deze knop verschijnt op de YouTube-speler nadat u een tijdstempel heeft geselecteerd en klaar bent om in te dienen."
},
"customServerAddress": {
"message": "SponsorBlock-serveradres"
},
@@ -656,6 +650,9 @@
"message": "Om segmenten met de categorie \"{0}\" in te dienen, moet u deze in de opties inschakelen. U wordt nu doorgestuurd naar de opties.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Waarschuwing: dit type segment kan maximaal één keer tegelijk actief zijn. Meerdere segmenten indienen zal weergave van een willekeurig segment veroorzaken."
},
"youMustSelectACategory": {
"message": "U moet een categorie selecteren voor alle segmenten die u indient!"
},
@@ -739,7 +736,7 @@
"message": "Voor altijd verbergen"
},
"warningChatInfo": {
"message": "U heeft een waarschuwing gekregen en kunt tijdelijk geen segmenten indienen. Dit betekent dat we gemerkt hebben dat u een aantal veelvoorkomende fouten maakt die niet kwaadaardig zijn, en we willen gewoon de regels verduidelijken. U kunt ook deelnemen aan deze chat via discord.gg/SponsorBlock of matrix.to/#/#sponsor:ajay.app"
"message": "U heeft een waarschuwing gekregen en kunt tijdelijk geen segmenten indienen. Dit betekent dat we gemerkt hebben dat u een aantal veelvoorkomende fouten maakt die niet kwaadaardig zijn. Bevestig dat u de regels begrijpt en we zullen de waarschuwing verwijderen. U kunt ook deelnemen aan deze chat via discord.gg/SponsorBlock of matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Stem geweigerd vanwege een waarschuwing. Klik om een chat te openen om het op te lossen, of kom later terug als u tijd hebt.",

View File

@@ -176,18 +176,12 @@
"hideInfoButton": {
"message": "Skjul infoknappen på YouTube-avspilleren"
},
"whatInfoButton": {
"message": "Dette er knappen som åpner et oppsprett på YouTube-siden."
},
"hideDeleteButton": {
"message": "Skjul Slett-knappen på YouTube-avspilleren"
},
"showDeleteButton": {
"message": "Vis Slett-knappen på YouTube-avspilleren"
},
"whatDeleteButton": {
"message": "Dette er knappen på YouTube-avspilleren som tømmer alle dine uinnsendte segmenter for den nåværende videoen."
},
"enableViewTracking": {
"message": "Skru på telling av hopp"
},
@@ -359,9 +353,6 @@
"showUploadButton": {
"message": "Vis opplastingsknapp"
},
"whatUploadButton": {
"message": "Denne knappen dukker opp på YouTube-avspilleren etter at du har valgt et tidsstempel og er klar til å sende inn."
},
"customServerAddress": {
"message": "SponsorBlock-tjeneradresse"
},

View File

@@ -188,9 +188,6 @@
"hideInfoButton": {
"message": "Ukryj przycisk informacyjny na odtwarzaczu YouTube"
},
"whatInfoButton": {
"message": "Jest to przycisk otwierający okienko pop-up na stronie YouTube."
},
"autoHideInfoButton": {
"message": "Autoukrywanie przycisku informacji"
},
@@ -200,9 +197,6 @@
"showDeleteButton": {
"message": "Pokaż przycisk usuwania na odtwarzaczu YouTube"
},
"whatDeleteButton": {
"message": "Ten przycisk na odtwarzaczu YouTube wyczyści wszystkie twoje niewysłane segmenty dla bieżącego filmu."
},
"enableViewTracking": {
"message": "Włącz monitorowanie liczby pominięć"
},
@@ -230,9 +224,21 @@
"showSkipNotice": {
"message": "Pokaż informację po pominięciu segmentu"
},
"noticeVisibilityMode0": {
"message": "Duże powiadomienia o przewinięciu"
},
"noticeVisibilityMode1": {
"message": "Małe powiadomienia o automatycznym przewijaniu"
},
"noticeVisibilityMode2": {
"message": "Małe powiadomienia o przewinięciu"
},
"noticeVisibilityMode3": {
"message": "Znikające powiadomienia o automatycznym przewijaniu"
},
"noticeVisibilityMode4": {
"message": "Znikające powiadomienia o przewijaniu"
},
"longDescription": {
"message": "SponsorBlock pozwala pomijać sponsorów, intra, outra, przypomnienia o subskrypcjach i inne irytujące fragmenty filmów na YouTube. SponsorBlock jest opartym na crowdsourcingu rozszerzeniem do przeglądarki, które pozwala każdemu zgłosić początek i koniec segmentów sponsorowanych oraz innych segmentów w filmach na YouTube. Kiedy ktoś już zamieści te informacje, wszyscy pozostali z tym rozszerzeniem będą pomijać segment sponsorowany. Możesz również pomijać fragmenty teledysków bez muzyki.",
"description": "Full description of the extension on the store pages."
@@ -296,6 +302,9 @@
"skip_category": {
"message": "Pominąć {0}?"
},
"mute_category": {
"message": "Wyciszyć {0}?"
},
"skip_to_category": {
"message": "Przejść do {0}?",
"description": "Used for skipping to things (Skip to Highlight)"
@@ -304,6 +313,10 @@
"message": "Pominięto {0}",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "Wyciszono {0}",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "Przewinięto do {0}",
"description": "Used for skipping to things (Skipped to Highlight)"
@@ -356,6 +369,9 @@
"changeUserID": {
"message": "Importuj/Eksportuj swój identyfikator użytkownika"
},
"whatChangeUserID": {
"message": "Powinno pozostać prywatne. Jest to niczym hasło i nie powinno być nikomu udostępniane. Przy jego użyciu może się pod ciebie podszywać. Jeśli szukasz publicznego ID użytkownika, kliknij ikonę schowka w wyskakującym oknie."
},
"setUserID": {
"message": "Ustaw identyfikator użytkownika"
},
@@ -420,9 +436,6 @@
"showUploadButton": {
"message": "Pokaż przycisk wysyłania"
},
"whatUploadButton": {
"message": "Ten przycisk pojawia się na odtwarzaczu YouTube po wybraniu przedziału czasowego, gdy segment jest gotowy do wysłania."
},
"customServerAddress": {
"message": "Adres serwera SponsorBlock"
},
@@ -557,7 +570,10 @@
"message": "Bez muzyki"
},
"category_poi_highlight": {
"message": "Podświetlone"
"message": "Wyróżnione"
},
"category_poi_highlight_description": {
"message": "Część filmu, która interesuje większość osób. Podobne do komentarzy typu „Filmik zaczyna się od x”."
},
"category_livestream_messages": {
"message": "Transmisja live: Dotacja/Czytanie wiadomości"
@@ -583,9 +599,15 @@
"manualSkip_POI": {
"message": "Zapytaj, gdy wideo się załaduje"
},
"showOverlay_POI": {
"message": "Pokaż na pasku"
},
"autoSkipOnMusicVideos": {
"message": "Automatycznie pomiń wszystkie segmenty, gdy istnieje segment niemuzyczny"
},
"muteSegments": {
"message": "Zezwalaj na segmenty, które wyciszą dźwięk zamiast pomijać"
},
"colorFormatIncorrect": {
"message": "Nieprawidłowy format koloru. Powinien to być zapis szesnastkowy (heksadecymalny) składający się z 3 lub 6 znaków poprzedzonych kratką (#)."
},
@@ -625,6 +647,9 @@
"message": "Aby przesyłać segmenty o kategorii „{0}”, musisz ją włączyć w opcjach. Za chwilę nastąpi przekierowanie do ustawień.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Ostrzeżenie: Ten typ segmentu, może być maksymalnie jeden. Przesyłanie kilku na raz spowoduje, że pojawi się losowy."
},
"youMustSelectACategory": {
"message": "Musisz wybrać kategorię dla każdego segmentu, który zamieszczasz!"
},
@@ -708,39 +733,78 @@
"message": "Schowaj na zawsze"
},
"warningChatInfo": {
"message": "Otrzymałeś ostrzeżenie i nie możesz tymczasowo przesłać segmentów. Oznacza to, że zauważyliśmy, że popełniałeś pewne pospolite błędy, które nie są złośliwe i po prostu chcemy wyjaśnić zasady. Możesz również dołączyć do tego czatu używając discord.gg/SponsorBlock lub matrix.to/#/#sponsor:ajay.app"
"message": "Otrzymałeś ostrzeżenie i nie możesz tymczasowo przesyłać segmentów. Oznacza to, że zauważyliśmy, że popełniłeś/aś pewne powszechne błędy, które nie są złośliwe, Proszę tylko potwierdzić, że rozumiesz zasady i usuniemy ostrzeżenie. Możesz również dołączyć do tego czatu używając discord.gg/SponsorBlock lub matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Głosowanie odrzucone z powodu ostrzeżenia. Kliknij, aby otworzyć czat w celu rozwiązania problemu lub wróć później, gdy będziesz miał czas.",
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
},
"Donate": {
"message": "Dotacje"
},
"hideDonationLink": {
"message": "Ukryj opcję dotacji"
},
"helpPageThanksForInstalling": {
"message": "Dziękujemy za zainstalowanie SponsorBlock."
},
"helpPageReviewOptions": {
"message": "Przejrzyj poniższe opcje"
},
"helpPageFeatureDisclaimer": {
"message": "Wiele funkcji jest domyślnie wyłączonych. Jeśli chcesz pomijać intra, outra, używać Invidious, itp., włącz je poniżej. Możesz również ukryć/pokazać elementy interfejsu użytkownika."
},
"helpPageHowSkippingWorks": {
"message": "Jak działa pomijanie"
},
"helpPageHowSkippingWorks1": {
"message": "Segmenty filmu zostaną automatycznie pominięte, jeśli znajdują się w bazie danych. Możesz kliknąć na ikonę rozszerzenia, aby podejrzeć, czym one są."
},
"helpPageHowSkippingWorks2": {
"message": "Za każdym razem, gdy pominiesz segment, otrzymasz powiadomienie. Jeśli moment nie wydaje się być poprawny, kliknij łapkę w dół! Możesz również głosować w okienku pop-up."
},
"Submitting": {
"message": "Wysyłanie"
},
"helpPageSubmitting1": {
"message": "Wysyłanie może być wykonane w wyskakującym okienku, poprzez kliknięcie przycisku \"Początek segmentu\" lub za pomocą przycisków na odtwarzaczu wideo."
},
"helpPageSubmitting2": {
"message": "Kliknięcie przycisku odtwarzania wskazuje początek segmentu a kliknięcie ikony stop wskazuje koniec segmentu. Możesz przygotować wielu segmentów przed wysłaniem. Aby wysłać kliknij przycisk potwierdzający, a aby usunąć - na śmietnik."
},
"Editing": {
"message": "Edytowanie"
},
"helpPageEditing1": {
"message": "Jeśli się pomyliłeś, możesz edytować i usuwać swoje segmenty poprzez kliknięcie przycisku ze strzałką w górę."
},
"helpPageTooSlow": {
"message": "Zbyt wolno"
},
"helpPageTooSlow1": {
"message": "Istnieją skróty klawiszowe, jeśli chcesz ich używać. Naciśnij klawisz średnika, aby wskazać początek/koniec segmentu sponsora i kliknij w apostrof, aby przesłać. Można je zmienić w opcjach. Jeśli nie używasz QWERTY, prawdopodobnie powinieneś zmienić skrót klawiszowy."
},
"helpPageCopyOfDatabase": {
"message": "Czy mogę otrzymać kopię bazy danych? Co się stanie, jeśli przestaniecie istnieć?"
},
"helpPageCopyOfDatabase1": {
"message": "Baza danych jest publiczna i dostępna na stronie"
},
"helpPageCopyOfDatabase2": {
"message": "Kod źródłowy jest dostępny. Tak więc, nawet jeśli coś się ze mną stanie, wasze zgłoszenia nie zostaną utracone."
},
"helpPageNews": {
"message": "Wiadomości i jak to jest zrobione"
},
"helpPageSourceCode": {
"message": "Gdzie mogę otrzymać kod źródłowy?"
},
"Credits": {
"message": "Autorzy"
},
"highlightNewFeature": {
"message": "Nowość! Przejdź do interesującej części filmu jednym kliknięciem z nową kategorią wyróżnione"
},
"LearnMore": {
"message": "Dowiedz się więcej"
}

View File

@@ -53,7 +53,7 @@
"message": "Pular novamente"
},
"unmute": {
"message": "Desmutar"
"message": "Ativar som"
},
"paused": {
"message": "Pausado"
@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "Esta opção esconde os botões que aparecem para enviar segmentos no player do YouTube."
},
"showSkipButton": {
"message": "Manter botão Pular para os Destaques no player"
},
"showInfoButton": {
"message": "Mostrar botão de Informações no player do Youtube"
},
"hideInfoButton": {
"message": "Esconder botão de Informações no player do Youtube"
},
"whatInfoButton": {
"message": "Este é o botão que abre o popup na pagina do Youtube."
},
"autoHideInfoButton": {
"message": "Esconder Automaticamente o Botão de Informação"
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"message": "Mostrar botão de Apagar no player do Youtube"
},
"whatDeleteButton": {
"message": "Este é o botão que lhe permite saltar todos os patrocínios do player do Youtube."
},
"enableViewTracking": {
"message": "Ativar Contador de Segmentos Pulados"
},
@@ -303,13 +300,13 @@
"message": "Pular"
},
"mute": {
"message": "Mutar"
"message": "Silenciar"
},
"skip_category": {
"message": "Pular {0}?"
},
"mute_category": {
"message": "Mutar {0}?"
"message": "Silenciar {0}?"
},
"skip_to_category": {
"message": "Pular para {0}?",
@@ -320,7 +317,7 @@
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} Mutado",
"message": "{0} Silenciado",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
@@ -442,9 +439,6 @@
"showUploadButton": {
"message": "Mostrar botão de envio"
},
"whatUploadButton": {
"message": "Este botão aparece no reprodutor do YouTube depois de ter selecionado um carimbo de data/hora e está pronto para ser enviado."
},
"customServerAddress": {
"message": "Endereço do servidor do SponsorBlock"
},
@@ -615,7 +609,7 @@
"message": "Pular automaticamente todos os segmentos quando há um segmento que não é música"
},
"muteSegments": {
"message": "Permitir segmentos que mutam áudio ao invés de pular"
"message": "Permitir segmentos que silenciem o áudio ao invés de pular"
},
"colorFormatIncorrect": {
"message": "Sua cor está formatada incorretamente. Deve ser um código hexadecimal de 3 ou 6 dígitos com uma cerquilha (hashtag) no início."
@@ -656,6 +650,9 @@
"message": "Para enviar os segmentos com a categoria de \"{0}\", você deve ativá-la nas opções. Você será redirecionado para as opções agora.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Aviso: Este tipo de segmento pode ter no máximo um ativo por vez. Enviar múltiplos fará com que um aleatório seja mostrado."
},
"youMustSelectACategory": {
"message": "Você deve selecionar uma categoria para todos os segmentos que você está enviando!"
},
@@ -739,7 +736,7 @@
"message": "Ocultar para sempre"
},
"warningChatInfo": {
"message": "Você recebeu um aviso e temporariamente não pode enviar segmentos. Isso significa que notamos que você cometeu alguns erros comuns que não são maliciosos, e queremos apenas clarificar as regras. Você também pode participar desse chat usando discord.gg/SponsorBlock ou matrix.to/#/#sponsor:ajay.app"
"message": "Você recebeu um aviso e não pode enviar segmentos temporariamente. Isso significa que notamos que você estava cometendo erros comuns não maliciosos, por favor confirme que você entende as regras e removeremos o aviso. Você também pode participar do chat usando discord.gg/SponsorBlock ou matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Voto rejeitado devido a um aviso. Clique para abrir um chat para resolvê-lo, ou volte mais tarde quando tiver tempo.",

View File

@@ -99,18 +99,12 @@
"hideInfoButton": {
"message": "Esconder botão de Informações no player do Youtube"
},
"whatInfoButton": {
"message": "Este é o botão que abre o popup na pagina do Youtube."
},
"hideDeleteButton": {
"message": "Esconder botão de Apagar no player do Youtube"
},
"showDeleteButton": {
"message": "Mostrar botão de Apagar no player do Youtube"
},
"whatDeleteButton": {
"message": "Este é o botão que lhe permite saltar todos os patrocínios do player do Youtube."
},
"showNotice": {
"message": "Mostrar notificação outra vez"
},

View File

@@ -176,18 +176,12 @@
"hideInfoButton": {
"message": "Ascunde Butoanele De Informații Pe Playerul De YouTube"
},
"whatInfoButton": {
"message": "Acesta este butonul care deschide popup-ul pe pagina de YouTube."
},
"hideDeleteButton": {
"message": "Ascunde Butonul De Ștergere Pe Playerul De YouTube"
},
"showDeleteButton": {
"message": "Arată Butonul De Ștergere Pe Playerul De YouTube"
},
"whatDeleteButton": {
"message": "Acest buton de pe playerul de YouTube va șterge toate segmentele netrimise pentru videoclipul curent."
},
"enableViewTracking": {
"message": "Activează Urmărirea Săriturilor"
},
@@ -359,9 +353,6 @@
"showUploadButton": {
"message": "Arată Butonul De Încărcare"
},
"whatUploadButton": {
"message": "Acest buton apare pe playerul YouTube după ce ați selectat un marcaj de timp și sunteți gata să îl trimiteți."
},
"customServerAddress": {
"message": "Adresa Serverului SponsorBlock"
},

View File

@@ -62,10 +62,10 @@
"message": "Таймер остановлен"
},
"confirmMSG": {
"message": "Чтобы изменить или удалить отдельные значения, нажмите кнопку «Информация» или откройте всплывающее окно расширения, щелкнув значок расширения в правом верхнем углу."
"message": "Чтобы изменить или удалить отдельные значения, нажмите кнопку «Информация» или откройте всплывающее окно расширения, щелкнув на значок расширения в правом верхнем углу."
},
"clearThis": {
"message": "Вы уверены, что хотите удалить эту информацию?\n\n"
"message": "Вы уверены, что хотите это удалить?\n\n"
},
"Unknown": {
"message": "При отправке сегмента произошла ошибка. Попытайтесь отправить его позже."
@@ -116,7 +116,7 @@
"message": "Отправить сегменты"
},
"submitCheck": {
"message": "Вы уверены, что хотите отправить эту информацию?"
"message": "Вы уверены, что хотите это отправить?"
},
"whitelistChannel": {
"message": "Добавить канал в белый список"
@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "Эта настройка скрывает кнопки для отправки сегментов, расположенные в плеере YouTube."
},
"showSkipButton": {
"message": "Показывать кнопку \"Пропустить до важного\" в плеере"
},
"showInfoButton": {
"message": "Показывать кнопку информации в плеере YouTube"
},
"hideInfoButton": {
"message": "Скрыть кнопку информации в плеере YouTube"
},
"whatInfoButton": {
"message": "Эта кнопка открывает всплывающее окно на странице YouTube."
},
"autoHideInfoButton": {
"message": "Автоматически скрывать кнопку Информация"
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"message": "Показывать кнопку удаления в плеере YouTube"
},
"whatDeleteButton": {
"message": "Эта кнопка позволяет Вам очистить все неотправленные сегменты в плеере YouTube для текущего видео."
},
"enableViewTracking": {
"message": "Включить отслеживание количества пропусков сегментов"
},
@@ -442,9 +439,6 @@
"showUploadButton": {
"message": "Показывать кнопку отправки"
},
"whatUploadButton": {
"message": "Эта кнопка появляется в плеере YouTube после того, как Вы выбрали отметку времени и готовы к отправке."
},
"customServerAddress": {
"message": "Адрес сервера SponsorBlock"
},
@@ -656,6 +650,9 @@
"message": "Чтобы отправить сегменты категории \"{0}\", вы должны включить её в настройках. Сейчас вы будете туда перенаправлены.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Предупреждение: Только один сегмент данного типа может быть активным. Отправка нескольких приведёт к отображению только одного случайно выбранного."
},
"youMustSelectACategory": {
"message": "Вы должны выбрать категорию для всех сегментов, которые вы отправляете!"
},
@@ -739,7 +736,7 @@
"message": "Скрыть навсегда"
},
"warningChatInfo": {
"message": "Вы получили предупреждение и временно не можете отправлять сегменты. Мы заметили, что вы совершали распространенные ошибки, которые не являются злонамеренными, и просто хотим уточнить для вас правила. Вы также можете присоединиться к нашему чату, используя discord.gg/SponsorBlock или matrix.to/#/#sponsor:ajay.app"
"message": "Вы получили предупреждение и временно не можете отправлять сегменты. Мы заметили, что вы совершали распространенные ошибки, которые не были злонамеренными. Пожалуйста, подтвердите, что вы прочитали правила и предупреждение будет удалено. Вы также можете присоединиться к нашему чату, используя discord.gg/SponsorBlock или matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Голосование отклонено из-за предупреждения. Нажмите, чтобы открыть чат, где вы можете решить проблему, или вернитесь, когда у вас будет время.",

View File

@@ -188,9 +188,6 @@
"hideInfoButton": {
"message": "Skryť info tlačidlo v YouTube prehrávači"
},
"whatInfoButton": {
"message": "Toto tlačidlo zobrazí vyskakovacie okno na YouTube stránke."
},
"autoHideInfoButton": {
"message": "Automaticky skryť tlačidlo Info"
},
@@ -200,9 +197,6 @@
"showDeleteButton": {
"message": "Zobraziť tlačidlo Zmazať v YouTube prehrávači"
},
"whatDeleteButton": {
"message": "Toto tlačidlo v YouTube prehrávači zmaže všetky ešte neodoslané segmenty v aktuálnom videu."
},
"enableViewTracking": {
"message": "Zapnúť počítanie preskočení"
},
@@ -427,9 +421,6 @@
"showUploadButton": {
"message": "Ukázať Nahrávacie Tlačidlo"
},
"whatUploadButton": {
"message": "Toto tlačidlo sa zobrazí v YouTube prehrávači po tom ako označíte začiatok a koniec segmentu na odoslanie."
},
"customServerAddress": {
"message": "Adresa serveru SponsorBlock"
},
@@ -641,6 +632,9 @@
"message": "Pre odoslanie segmentov z kategórie \"{0}\" ju musíte zapnúť v nastaveniach. Teraz tam budete presmerovaní.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Varovanie: Tento typ segmentu môže byť aktívny len jeden. Odoslanie viacerých spôsobí zobrazenie náhodného z nich."
},
"youMustSelectACategory": {
"message": "Musíte zvoliť kategóriu pre každý segment!"
},
@@ -724,7 +718,7 @@
"message": "Navždy skryť"
},
"warningChatInfo": {
"message": "Dostali ste varovanie a nemôžete tak dočasne odosielať segmenty. To znamená, že sme si všimli, že ste spravili nejaké chyby, ktoré nie sú myslené zle, a chceme Vám len objasniť pravidlá. Môžete sa pripojiť do konverzácie pomocou discord.gg/SponsorBlock alebo matrix.to/#/#sponsor:ajay.app"
"message": "Dostali ste varovanie a nemôžete tak dočasne odosielať segmenty. To znamená, že sme si všimli, že ste spravili nejaké chyby, ktoré nie sú myslené zle, a chceme Vám len objasniť pravidlá a potom Vám to varovanie odoberieme. Môžete sa pripojiť do konverzácie pomocou discord.gg/SponsorBlock alebo matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Hlasovanie bolo zamietnuté kvôli varovaniu. Kliknite pre otvorenie chatu, aby ste ho vyriešili, alebo sa vráťte až budete mať čas.",

View File

@@ -1 +1,30 @@
{}
{
"Options": {
"message": "Подешавања"
},
"sourceCode": {
"message": "Изворни код",
"description": "Used on Firefox Store Page"
},
"errorCode": {
"message": "Код грешке: "
},
"skip": {
"message": "Прескочи"
},
"add": {
"message": "Додај"
},
"save": {
"message": "Сачувај"
},
"cancel": {
"message": "Откажи"
},
"edit": {
"message": "Измени"
},
"help": {
"message": "Помоћ"
}
}

View File

@@ -188,9 +188,6 @@
"hideInfoButton": {
"message": "Dölj Infoknapp På YouTube-spelaren"
},
"whatInfoButton": {
"message": "Detta är knappen som öppnar popup-rutan på YouTube-sidan."
},
"autoHideInfoButton": {
"message": "Dölj informationsknappen automatiskt"
},
@@ -200,9 +197,6 @@
"showDeleteButton": {
"message": "Visa knappen ta bort på YouTube-spelaren"
},
"whatDeleteButton": {
"message": "Den här knappen på YouTube-spelaren rensar bort alla segment som ej har skickats in på aktuell video."
},
"enableViewTracking": {
"message": "Aktivera spåra antalet hoppa över"
},
@@ -442,9 +436,6 @@
"showUploadButton": {
"message": "Visa uppladdningsknapp"
},
"whatUploadButton": {
"message": "Denna knapp visas på YouTube-spelaren efter att du har valt en tidpunkt och är redo att rapportera."
},
"customServerAddress": {
"message": "Serveradress för SponsorBlock"
},
@@ -656,6 +647,9 @@
"message": "För att skicka segment med kategorin \"{0}\" måste du först aktivera det i alternativen. Du kommer nu att bli omdirigerad till alternativen.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Varning: Denna typ av segment kan endast ha ett segment aktivt åt gången. Skickas flera segment kommer en av dem att visas slumpmässigt."
},
"youMustSelectACategory": {
"message": "Du måste välja en kategori för alla segment du skickar in!"
},
@@ -739,7 +733,7 @@
"message": "Dölj för alltid"
},
"warningChatInfo": {
"message": "Du har fått en tillfällig varning och kan inte skicka in segment. Detta innebär att vi har upptäckt att några vanliga misstag är gjorda som inte är uppsåtliga och vi vill bara klargöra reglerna. Du kan också gå med i den här chatten genom att använda discord.gg/SponsorBlock eller matrix.to/#/#sponsor:ajay.app"
"message": "Du har fått en tillfällig varning och kan inte längre skicka in segment. Vi har upptäckt att du har gjort några vanliga misstag som inte är uppsåtliga. Bekräfta därför att du förstår reglerna, så tar vi bort varningen. Du kan också gå med i den här chatten genom att använda discord.gg/SponsorBlock eller matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Rösten avvisades på grund av en varning. Klicka för att öppna ett chattfönster för att lösa problemet eller kom tillbaka senare när du har tid.",

View File

@@ -176,18 +176,12 @@
"hideInfoButton": {
"message": "YouTube பிளேயரில் தகவல் பொத்தானை மறைக்கவும்"
},
"whatInfoButton": {
"message": "YouTube பக்கத்தில் ஒரு பாப்அப்பைத் திறக்கும் பொத்தான் இது."
},
"hideDeleteButton": {
"message": "YouTube பிளேயரில் நீக்கு பொத்தானை மறைக்க"
},
"showDeleteButton": {
"message": "YouTube பிளேயரில் நீக்கு பொத்தானைக் காட்டு"
},
"whatDeleteButton": {
"message": "இது YouTube பிளேயரில் உள்ள பொத்தானாகும், இது தற்போதைய வீடியோவிற்கு நீங்கள் சமர்ப்பிக்காத அனைத்து பகுதிகளையும் அழிக்கும்."
},
"enableViewTracking": {
"message": "ஸ்கிப் கவுண்ட் டிராக்கிங்கை இயக்கு"
},
@@ -359,9 +353,6 @@
"showUploadButton": {
"message": "பதிவேற்ற பொத்தானைக் காட்டு"
},
"whatUploadButton": {
"message": "நீங்கள் நேர முத்திரையைத் தேர்ந்தெடுத்து சமர்ப்பிக்கத் தயாரான பிறகு இந்த பொத்தான் YouTube பிளேயரில் தோன்றும்."
},
"customServerAddress": {
"message": "ஸ்பான்சர் பிளாக் சேவையக முகவரி"
},

View File

@@ -176,18 +176,12 @@
"hideInfoButton": {
"message": "YouTube ప్లేయర్‌లో సమాచారం బటన్‌ను దాచండి"
},
"whatInfoButton": {
"message": "ఇది YouTube పేజీలో పాపప్‌ను తెరిచే బటన్."
},
"hideDeleteButton": {
"message": "YouTube ప్లేయర్‌లో తొలగించు బటన్‌ను దాచండి"
},
"showDeleteButton": {
"message": "YouTube ప్లేయర్‌లో తొలగించు బటన్‌ను చూపించు"
},
"whatDeleteButton": {
"message": "ఇది YouTube ప్లేయర్‌లోని బటన్, ఇది ప్రస్తుత వీడియో కోసం మీరు సమర్పించని అన్ని విభాగాలను క్లియర్ చేస్తుంది."
},
"enableViewTracking": {
"message": "స్కిప్ కౌంట్ ట్రాకింగ్‌ను ప్రారంభించండి"
},
@@ -359,9 +353,6 @@
"showUploadButton": {
"message": "అప్‌లోడ్ బటన్ చూపించు"
},
"whatUploadButton": {
"message": "మీరు టైమ్‌స్టాంప్‌ను ఎంచుకుని సమర్పించడానికి సిద్ధంగా ఉన్న తర్వాత ఈ బటన్ YouTube ప్లేయర్‌లో కనిపిస్తుంది."
},
"customServerAddress": {
"message": "స్పాన్సర్బ్లాక్ సర్వర్ చిరునామా"
},

View File

@@ -188,9 +188,6 @@
"hideInfoButton": {
"message": "YouTube Oynatıcısındaki Bilgi Butonunu Gizle"
},
"whatInfoButton": {
"message": "Bu, YouTube sayfasında açılan pencereyi açan butondur."
},
"autoHideInfoButton": {
"message": "Bilgi düğmesini otomatik gizle"
},
@@ -200,9 +197,6 @@
"showDeleteButton": {
"message": "YouTube Oynatıcısında Silme Tuşunu Göster"
},
"whatDeleteButton": {
"message": "Bu, YouTube oynatıcısındaki mevcut video için gönderilmemiş bölümleri temizleyen butondur."
},
"enableViewTracking": {
"message": "Kısım Atlama Sayaç Takibine İzin Ver"
},
@@ -302,6 +296,9 @@
"skip_category": {
"message": "{0} atla?"
},
"mute_category": {
"message": "{0} susturulsun mu?"
},
"skip_to_category": {
"message": "{0} kısmına atlansın mı?",
"description": "Used for skipping to things (Skip to Highlight)"
@@ -310,6 +307,10 @@
"message": "{0} Atlandı",
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} susturuldu",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
"message": "{0} kısmına atlandı",
"description": "Used for skipping to things (Skipped to Highlight)"
@@ -429,9 +430,6 @@
"showUploadButton": {
"message": "Karşıya Yükleme Butonunu Göster"
},
"whatUploadButton": {
"message": "Bu buton, YouTube oynatıcısında bir zaman seçtiğiniz ve göndermeye hazır olduğunuzda gözükür."
},
"customServerAddress": {
"message": "SponsorBlock Sunucu Adresi"
},
@@ -643,6 +641,9 @@
"message": "\"{0}\" kategorisinde bir kısım göndermek için onu ayarlardan açmalısınız. Ayarlara yönlendiriliyorsunuz.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Uyarı: Bu tür kısımlardan sadece bir adet etkin olabilir. Birden fazla gönderdiğinizde onlardan rastgele biri gösterilir."
},
"youMustSelectACategory": {
"message": "Göndereceğin tüm kısımlar için bir kategori seçmelisin!"
},
@@ -725,9 +726,6 @@
"hideForever": {
"message": "Asla gösterme"
},
"warningChatInfo": {
"message": "Bir uyarı aldınız ve geçici bir süreliğine kısım gönderemeyeceksiniz. Sizin kısım göndermede zararlı olmayan bazı hatalar yaptığınızı belirledik ve size kurallarııklamak istiyoruz. Bu sohbete discord.gg/SponsorBlock veya matrix.to/#/#sponsor:ajay.app üzerinden de katılabilirsiniz"
},
"voteRejectedWarning": {
"message": "Bir uyarı nedeniyle oy reddedildi. Çözüm bulmak için buraya tıklayarak bir sohbet açın veya daha sonra vaktiniz olduğunda uğrayın.",
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
@@ -749,5 +747,44 @@
},
"helpPageHowSkippingWorks": {
"message": "Atlama nasıl çalışıyor"
},
"helpPageHowSkippingWorks1": {
"message": "Video kısımları veri tabanında mevcut ise otomatikman atlanır. Eklentinin simgesine tıklayınca açılan pencereden, video için mevcut olan kısımları görebilirsiniz."
},
"helpPageHowSkippingWorks2": {
"message": "Bir kısmı atladığınızda size bildirim gönderilir. Eğer kısım hatalıysa bunu eksi oylayınız. Eklentinin penceresinde de oy verebilirsiniz."
},
"Submitting": {
"message": "Gönderme"
},
"Editing": {
"message": "Düzenleme"
},
"helpPageEditing1": {
"message": "Eğer kısımlarda hata yaptıysanız, yukarı ok işareti olan düğmeye tıkladıktan sonra kısımları silebilir veya düzeltebilirsiniz."
},
"helpPageTooSlow": {
"message": "Bu fazla yavaş"
},
"helpPageCopyOfDatabase": {
"message": "Veri tabanının bir kopyasını alabilir miyim? Bir gün ortadan kaybolursanız ne olacak?"
},
"helpPageCopyOfDatabase1": {
"message": "Veri tabanı herkese açıktır ve şuradan erişilebilir: "
},
"helpPageCopyOfDatabase2": {
"message": "Kaynak koduna serbestçe erişilebilir. Ben bir gün bu dünyada yalan olsam dahi, sizin gönderdiğiniz kısımlar kaybolmayacak."
},
"helpPageSourceCode": {
"message": "Kaynak koduna nereden ulaşabilirim?"
},
"Credits": {
"message": "Emeği Geçenler"
},
"highlightNewFeature": {
"message": "Yeni! \"Vurgu\" kategorisi sayesinde tek tıkla videonun asıl yerine gidebilirsiniz"
},
"LearnMore": {
"message": "Dahasını Öğren"
}
}

View File

@@ -182,15 +182,15 @@
"hideButtonsDescription": {
"message": "Це налаштування приховує кнопки для надсилання спонсорських вставок, які з'являються в плеєрі YouTube."
},
"showSkipButton": {
"message": "Залишати кнопку \"Перейти до Основне\" на плеєрі"
},
"showInfoButton": {
"message": "Показувати кнопку інформації в плеєрі YouTube"
},
"hideInfoButton": {
"message": "Приховати кнопку інформації в плеєрі YouTube"
},
"whatInfoButton": {
"message": "Ця кнопка відкриває спливаюче вікно на сторінці YouTube."
},
"autoHideInfoButton": {
"message": "Кнопка \"Автоматично сховати інформацію\""
},
@@ -200,9 +200,6 @@
"showDeleteButton": {
"message": "Показувати кнопку видалення в плеєрі YouTube"
},
"whatDeleteButton": {
"message": "Ця кнопка дозволяє очистити всі спонсорські вставки в плеєрі YouTube."
},
"enableViewTracking": {
"message": "Увімкнути відстеження кількості пропусків сегментів"
},
@@ -309,7 +306,7 @@
"message": "Пропустити {0}?"
},
"mute_category": {
"message": "Заглушити {0}?"
"message": "Вимкнути звук {0}?"
},
"skip_to_category": {
"message": "Пропустить до {0}?",
@@ -320,7 +317,7 @@
"description": "Example: Sponsor Skipped"
},
"muted": {
"message": "{0} Заглушений",
"message": "{0} Вимкнений звук",
"description": "Example: Sponsor Muted"
},
"skipped_to_category": {
@@ -442,9 +439,6 @@
"showUploadButton": {
"message": "Показувати кнопку надсилання"
},
"whatUploadButton": {
"message": "Ця кнопка з'являється в плеєрі YouTube після того, як Ви вибрали позначку часу і готові до надсилання."
},
"customServerAddress": {
"message": "Адреса сервера SponsorBlock"
},
@@ -579,7 +573,7 @@
"message": "Без музики"
},
"category_poi_highlight": {
"message": "Основные"
"message": "Основне"
},
"category_poi_highlight_description": {
"message": "Часть видео, которую ищут большинство людей. Аналогично комментарию «Видео начинается с X:XX»."
@@ -597,7 +591,7 @@
"message": "Пропуск вручну"
},
"showOverlay": {
"message": "Показувати в смузі прокрутки"
"message": "Показувати в смузі перемотування"
},
"disable": {
"message": "Вимкнути"
@@ -606,7 +600,7 @@
"message": "Автоматический переход к началу"
},
"manualSkip_POI": {
"message": "Спросите, когда видео загружается"
"message": "Спитати поки відео завантажується"
},
"showOverlay_POI": {
"message": "Показать на панели поиска"
@@ -656,6 +650,9 @@
"message": "Щоб надіслати сегменти категорії \"{0}\", ви повинні включити її в налаштуваннях. Зараз ви будете туди перенаправлені.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Увага: Сегменти даного типу можуть бути активними лише по одному. Надсилання декількох призведе до відображення випадкового сегмента."
},
"youMustSelectACategory": {
"message": "Ви повинні обрати категорію для всіх сегментів, які ви відправляєте!"
},
@@ -739,7 +736,7 @@
"message": "Сховати назавжди"
},
"warningChatInfo": {
"message": "Ви отримали попередження, тому тимчасово не можете обирати сегменти. Це означає, що ми помітили, що ви робили кілька поширених помилок, які не є злісними. Тому ми хочемо нагадати вам правила. Ви можете приєднатися до чату з правилами використовуючи discord.gg/SponsorBlock або matrix.to/#/#sponsor:ajay.app"
"message": "Ви отримали попередження, тому тимчасово не можете надсилати сегменти. Це означає, що ми помітили, що ви робили кілька поширених помилок не маючи шкідливих намірів. Будь ласка просто підтвердьте, що ви розумієте правила, і ми приберемо попередження. Ви також можете приєднатися до чату з правилами використовуючи discord.gg/SponsorBlock or matrix.to/#/#sponsor:ajay.app"
},
"voteRejectedWarning": {
"message": "Голосування відхилено через попередження. Натисніть, щоб відкрити чат для вирішення цієї проблеми, або поверніться пізніше.",

View File

@@ -52,6 +52,9 @@
"reskip": {
"message": "Bỏ qua lại"
},
"unmute": {
"message": "Bật tiếng"
},
"paused": {
"message": "Tạm dừng"
},
@@ -185,9 +188,6 @@
"hideInfoButton": {
"message": "Không hiển thị nút thông tin trên trình chạy video Youtube"
},
"whatInfoButton": {
"message": "Đây là nút để mở bảng popup trên trang Youtube."
},
"autoHideInfoButton": {
"message": "Tự động ẩn nút Info"
},
@@ -197,9 +197,6 @@
"showDeleteButton": {
"message": "Hiển thị nút xóa trên trình chạy video Youtube"
},
"whatDeleteButton": {
"message": "Đây là nút trên trình chạy video Youtube để xóa tất cả những đoạn quảng cáo chưa đăng của bạn trong video đang xem."
},
"enableViewTracking": {
"message": "Bật tính năng theo dõi số quảng cáo được bỏ qua"
},
@@ -299,6 +296,9 @@
"skip": {
"message": "Bỏ qua"
},
"mute": {
"message": "Ngắt tiếng"
},
"skip_category": {
"message": "Bỏ qua {0}?"
},
@@ -350,6 +350,9 @@
"changeUserID": {
"message": "Nhập/Xuất mã người dùng của bạn"
},
"whatChangeUserID": {
"message": "Đây là mã cần được giữ bí mật. Nó giống như mật khẩu và không nên được chia sẻ cho bất kì ai khác. Nếu có ai đó lấy được mã này, họ có thể mạo danh bạn. Còn nếu như bạn đang tìm khoá ID công khai, hãy nhấn vào nút \"Sao chép Public ID\" trong popup của SponsorBlock."
},
"setUserID": {
"message": "Đặt mã người dùng"
},
@@ -414,9 +417,6 @@
"showUploadButton": {
"message": "Hiển thị nút tải lên"
},
"whatUploadButton": {
"message": "Nút này xuất hiện trên trình chạy video Youtube sau khi bạn chọn mốc thời gian và sẵn sàng đăng đoạn quảng cáo."
},
"customServerAddress": {
"message": "Địa chỉ máy chủ SponsorBlock"
},
@@ -550,6 +550,12 @@
"category_music_offtopic_short": {
"message": "Không có nhạc"
},
"category_poi_highlight": {
"message": "Điểm/Khoảnh khắc quan trọng"
},
"category_poi_highlight_description": {
"message": "Phần của video mà hầu hết mọi người đang tìm kiếm. Tương tự với câu nói \"Video bắt đầu từ x\"."
},
"category_livestream_messages": {
"message": "Luồng phát trực tiếp: Đọc Quyên góp/Tin nhắn"
},
@@ -568,9 +574,21 @@
"disable": {
"message": "Tắt"
},
"autoSkip_POI": {
"message": "Tự động bỏ qua"
},
"manualSkip_POI": {
"message": "Hỏi khi video bắt đầu"
},
"showOverlay_POI": {
"message": "Hiện ở thanh xem trước"
},
"autoSkipOnMusicVideos": {
"message": "Tự động bỏ qua tất cả các phân đoạn nếu trong video có phân đoạn không phải nhạc"
},
"muteSegments": {
"message": "Cho phép các phân đoạn bị tắt tiếng hay vì bỏ qua"
},
"colorFormatIncorrect": {
"message": "Mã màu sai định dạng. Mã màu phải có 3 hoặc 6 ký tự hệ hex và có dấu thăng ở đầu."
},
@@ -610,6 +628,9 @@
"message": "Để gửi một phân đoạn với chủ đề \"{0}\", bạn cần phải kích hoạt nó trong phần tuỳ chọn. Bạn sẽ được đưa đến phần tuỳ chỉnh bây giờ.",
"description": "Used when submitting segments to only let them select a certain category if they have it enabled in the options."
},
"poiOnlyOneSegment": {
"message": "Cảnh báo: Loại phân đoạn này nếu hiển thị CHỈ CÓ 1 PHÂN ĐOẠN được xuất hiện trong video. Nếu bạn gửi lên, khi đó, phân đoạn xuất hiện duy nhất sẽ được lựa chọn ngẫu nhiên."
},
"youMustSelectACategory": {
"message": "Bạn phải lựa chọn một danh mục cho tất cả phân đoạn bạn đang muốn đăng tải!"
},
@@ -681,6 +702,10 @@
"help": {
"message": "Trợ giúp"
},
"GotIt": {
"message": "Đã hiểu",
"description": "Used as the button to dismiss a tooltip"
},
"experiementOptOut": {
"message": "Từ chối tham gia thử nghiệm trong tương lai",
"description": "This is used in a popup about a new experiment to get a list of unlisted videos to back up since all unlisted videos uploaded before 2017 will be set to private."
@@ -688,9 +713,6 @@
"hideForever": {
"message": "Ẩn vĩnh viễn"
},
"warningChatInfo": {
"message": "Bạn đã nhận được một cảnh báo (Warring) và tạm thời không thể gửi các phân đoạn. Bạn đã mắc lỗi trong việc tạo quá nhiều lần (có thể là chọn sai kiểu phân đoạn hoặc sai thời gian phân đoạn). Chúng tôi muốn bạn nhận ra điều đó để có thể giúp bạn khắc phục điều này trong tương lai, không mắc lỗi nữa. Bạn có thể gặp các VIP User tại đây: discord.gg/SponsorBlock hoặc matrix.to/#/#sponsor:ajay.app. Bọn họ sẽ giúp bạn gỡ cảnh báo sau khi bạn đã hiểu ra lỗi sai của bạn."
},
"voteRejectedWarning": {
"message": "Bỏ phiếu bị từ chối do có cảnh báo. Nhấp để mở cuộc trò chuyện để giải quyết hoặc quay lại sau.",
"description": "This is an integrated chat panel that will appearing allowing them to talk to the Discord/Matrix chat without leaving their browser."
@@ -707,6 +729,18 @@
"helpPageReviewOptions": {
"message": "Xin hãy xem xét các tuỳ chọn bên dưới"
},
"helpPageFeatureDisclaimer": {
"message": "Nhiều tính năng sẽ bị tắt theo mặc định. Nếu bạn muốn bỏ qua phần intro, sử dụng trên các trang web bên thứ 3 như Invidious, v. v...., bạn có thể bật nó ở bên dưới. Bạn cũng có thể cho hiện/ẩn UI người dùng."
},
"helpPageHowSkippingWorks": {
"message": "Việc bỏ qua 1 đoạn trong video được thực hiện thế nào?"
},
"helpPageHowSkippingWorks1": {
"message": "Các phân đoạn trong video sẽ tự động bị bỏ qua nếu chúng được tìm thấy trong cơ sở dữ liệu của chúng tôi. Bạn có thể mở cửa sổ xem trước các phân đoạn ấy bằng cách nhấp vào biểu tượng tiện ích mở rộng."
},
"helpPageHowSkippingWorks2": {
"message": "Bất cứ khi nào bỏ qua một phân đoạn, bạn sẽ nhận được 1 cửa sổ thông báo bât. Nếu phân đoạn có vẻ sai, hãy bỏ phiếu bằng cách nhấp vào nút downvote! Bạn cũng có thể bỏ phiếu trong cửa sổ bật lên khi nhấn vào biểu tượng tiện ích mở rộng. Và bạn có thể tắt việc hiển thị bảng thông báo này trong phần cài đặt tiện ích."
},
"helpPageTooSlow": {
"message": "Quá chậm"
}

View File

@@ -179,18 +179,12 @@
"hideInfoButton": {
"message": "在 Youtube 播放器上隐藏信息按钮"
},
"whatInfoButton": {
"message": "此按钮用于在 Youtube 页面中打开弹窗。"
},
"hideDeleteButton": {
"message": "在 Youtube 播放器上隐藏删除按钮"
},
"showDeleteButton": {
"message": "在 Youtube 播放器上显示删除按钮"
},
"whatDeleteButton": {
"message": "此按钮用于在 Youtube 播放器中清除所有赞助商广告。"
},
"enableViewTracking": {
"message": "启用跳过次数统计跟踪"
},
@@ -365,9 +359,6 @@
"showUploadButton": {
"message": "显示上传按钮"
},
"whatUploadButton": {
"message": "在您选择了时间并准备提交后,此按钮会出现在 Youtube 播放器中。"
},
"customServerAddress": {
"message": "SponsorBlock 服务器地址"
},

View File

@@ -52,6 +52,9 @@
"reskip": {
"message": "繼續跳過"
},
"unmute": {
"message": "解除靜音"
},
"paused": {
"message": "已暫停"
},
@@ -182,9 +185,6 @@
"hideInfoButton": {
"message": "在 YouTube 播放器上隱藏資訊按鈕"
},
"whatInfoButton": {
"message": "這個按鈕可用來在 YouTube 頁面打開彈出視窗"
},
"autoHideInfoButton": {
"message": "自動隱藏資訊按鈕"
},
@@ -194,9 +194,6 @@
"showDeleteButton": {
"message": "在 YouTube 播放器上顯示刪除按鈕"
},
"whatDeleteButton": {
"message": "這個按鈕可用來在 YouTube 播放器清除所有未提交的片段"
},
"enableViewTracking": {
"message": "啟用跳過次數追蹤"
},
@@ -393,9 +390,6 @@
"showUploadButton": {
"message": "顯示上傳按鈕"
},
"whatUploadButton": {
"message": "在您選擇了時間範圍並準備提交後,此按鈕會出現在 YouTube 播放器中。"
},
"customServerAddress": {
"message": "SponsorBlock 伺服器地址"
},
@@ -529,6 +523,9 @@
"category_music_offtopic_short": {
"message": "非音樂"
},
"category_poi_highlight": {
"message": "重點"
},
"category_livestream_messages": {
"message": "直播:捐贈/訊息閱讀"
},
@@ -660,11 +657,18 @@
"help": {
"message": "說明"
},
"GotIt": {
"message": "知道了",
"description": "Used as the button to dismiss a tooltip"
},
"experiementOptOut": {
"message": "關閉所有未來的實驗性功能",
"description": "This is used in a popup about a new experiment to get a list of unlisted videos to back up since all unlisted videos uploaded before 2017 will be set to private."
},
"hideForever": {
"message": "永久隱藏"
},
"Credits": {
"message": "致謝"
}
}

View File

@@ -75,16 +75,26 @@
vertical-align: top;
}
#infoButton.playerButton:not(.hidden) {
transform: translateX(0%) scale(1);
/* opacity is from YouTube page */
transition: transform 0.2s, opacity .1s cubic-bezier(0.4,0.0,1,1) !important;
.autoHiding {
overflow: visible !important;
}
#infoButton.playerButton.hidden {
.autoHiding:not(.hidden) {
transform: translateX(0%) scale(1);
/* opacity is from YouTube page */
transition: transform 0.2s, width 0.2s, opacity .1s cubic-bezier(0.4,0.0,1,1) !important;
}
.autoHiding.hidden {
transform: translateX(100%) scale(0);
/* opacity is from YouTube page */
transition: transform 0.2s, opacity .1s cubic-bezier(0.4,0.0,1,1) !important;
transition: transform 0.2s, width 0.2s, opacity .1s cubic-bezier(0.4,0.0,1,1) !important;
width: 0px !important;
}
.autoHiding.hidden.autoHideLeft {
transform: translateX(-100%) scale(0);
}
.playerButton.hidden {

View File

@@ -287,7 +287,22 @@
<div class="small-description">__MSG_hideButtonsDescription__</div>
</div>
<br/>
<div option-type="toggle" toggle-type="reverse" sync-option="hideSkipButtonPlayerControls">
<label class="switch-container">
<label class="switch">
<input type="checkbox" checked>
<span class="slider round"></span>
</label>
<div class="switch-label">
__MSG_showSkipButton__
</div>
</label>
</div>
<br/>
<br/>
<br/>
@@ -301,14 +316,9 @@
__MSG_showInfoButton__
</div>
</label>
<br/>
<br/>
<br/>
<div class="small-description">__MSG_whatInfoButton__</div>
</div>
<br/>
<br/>
<br/>
@@ -322,13 +332,11 @@
__MSG_autoHideInfoButton__
</div>
</label>
<br/>
<br/>
<br/>
<br/>
</div>
<br/>
<br/>
<br/>
<div option-type="toggle" toggle-type="reverse" sync-option="hideDeleteButtonPlayerControls">
<label class="switch-container">
@@ -340,14 +348,9 @@
__MSG_showDeleteButton__
</div>
</label>
<br/>
<br/>
<br/>
<div class="small-description">__MSG_whatDeleteButton__</div>
</div>
<br/>
<br/>
<br/>
@@ -361,14 +364,10 @@
__MSG_showUploadButton__
</div>
</label>
<br/>
<br/>
<br/>
<div class="small-description">__MSG_whatUploadButton__</div>
</div>
<br/>
<br/>
<br/>
<br/>

View File

@@ -275,6 +275,10 @@ background-color:#ec1c1c;
cursor: pointer;
}
button#setUsernameButton {
flex: 0 1;
}
#submitUsername {
padding-left: 5pt;
}
@@ -285,6 +289,7 @@ background-color:#ec1c1c;
#usernameValue, #usernameInput, #sponsorTimesContributionsDisplay{
font-size: 16px;
flex: 1 0;
}
.SBWhitelistIcon {
@@ -343,6 +348,7 @@ label>p, #disableExtension>p, #usernameValue, #usernameElement > div > p,#sponso
#copyUserID {
width: 100%;
flex: 0 1;
}
#setUsernameContainer {

View File

@@ -274,8 +274,8 @@ class NoticeComponent extends React.Component<NoticeProps, NoticeState> {
if (countdownTime == 3) {
//start fade out animation
const notice = document.getElementById("sponsorSkipNotice" + this.idSuffix);
notice.style.removeProperty("animation");
notice.classList.add("sponsorSkipNoticeFadeOut");
notice?.style.removeProperty("animation");
notice?.classList.add("sponsorSkipNoticeFadeOut");
}
this.setState({

View File

@@ -266,7 +266,7 @@ class SkipNoticeComponent extends React.Component<SkipNoticeProps, SkipNoticeSta
<td>
{/* Category Selector */}
<select id={"sponsorTimeCategories" + this.idSuffix}
className="sponsorTimeCategories"
className="sponsorTimeCategories sponsorTimeEditSelector"
defaultValue={this.segments[0].category} //Just default to the first segment, as we don't know which they'll choose
ref={this.categoryOptionRef}>

View File

@@ -279,6 +279,11 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
if (getCategoryActionType(event.target.value as Category) === CategoryActionType.POI) {
this.setTimeTo(1, null);
this.props.contentContainer().updateEditButtonsOnPlayer();
if (this.props.contentContainer().sponsorTimesSubmitting
.some((segment, i) => segment.category === event.target.value && i !== this.props.index)) {
alert(chrome.i18n.getMessage("poiOnlyOneSegment"));
}
}
this.saveEditTimes();
@@ -375,7 +380,7 @@ class SponsorTimeEditComponent extends React.Component<SponsorTimeEditProps, Spo
const skipTime = sponsorTimes[index].segment[0];
this.props.contentContainer().previewTime(skipTime - 2);
this.props.contentContainer().previewTime(skipTime - (2 * this.props.contentContainer().v.playbackRate));
}
inspectTime(): void {

View File

@@ -15,13 +15,13 @@ export interface SubmissionNoticeProps {
closeListener: () => void;
}
export interface SubmissionNoticeeState {
export interface SubmissionNoticeState {
noticeTitle: string,
messages: string[],
idSuffix: string;
}
class SubmissionNoticeComponent extends React.Component<SubmissionNoticeProps, SubmissionNoticeeState> {
class SubmissionNoticeComponent extends React.Component<SubmissionNoticeProps, SubmissionNoticeState> {
// Contains functions and variables from the content script needed by the skip notice
contentContainer: ContentContainer;
@@ -192,4 +192,4 @@ class SubmissionNoticeComponent extends React.Component<SubmissionNoticeProps, S
}
}
export default SubmissionNoticeComponent;
export default SubmissionNoticeComponent;

View File

@@ -26,6 +26,7 @@ interface SBConfig {
hideInfoButtonPlayerControls: boolean,
hideDeleteButtonPlayerControls: boolean,
hideUploadButtonPlayerControls: boolean,
hideSkipButtonPlayerControls: boolean,
hideDiscordLaunches: number,
hideDiscordLink: boolean,
invidiousInstances: string[],
@@ -172,6 +173,7 @@ const Config: SBObject = {
hideInfoButtonPlayerControls: false,
hideDeleteButtonPlayerControls: false,
hideUploadButtonPlayerControls: false,
hideSkipButtonPlayerControls: false,
hideDiscordLaunches: 0,
hideDiscordLink: false,
invidiousInstances: ["invidious.snopyta.org"],

View File

@@ -16,6 +16,7 @@ import * as Chat from "./js-components/chat";
import { getCategoryActionType } from "./utils/categoryUtils";
import { SkipButtonControlBar } from "./js-components/skipButtonControlBar";
import { Tooltip } from "./render/Tooltip";
import { getStartTimeFromUrl } from "./utils/urlParser";
// Hack to get the CSS loaded on permission-based sites (Invidious)
utils.wait(() => Config.config !== null, 5000, 10).then(addCSS);
@@ -29,6 +30,7 @@ let sponsorVideoID: VideoID = null;
// List of open skip notices
const skipNotices: SkipNotice[] = [];
let activeSkipKeybindElement: ToggleSkippable = null;
let lastPOISkip = 0;
// JSON video info
let videoInfo: VideoInfo = null;
@@ -386,6 +388,12 @@ function createPreviewBar(): void {
function durationChangeListener(): void {
updateAdFlag();
updatePreviewBar();
if (sponsorTimes) sponsorTimes = sponsorTimes.filter(segmentDurationFilter);
}
function segmentDurationFilter(segment: SponsorTime): boolean {
return segment.videoDuration === 0 || !video?.duration || Math.abs(video.duration - segment.videoDuration) < 2;
}
function cancelSponsorSchedule(): void {
@@ -551,13 +559,17 @@ function setupVideoListeners() {
switchingVideos = false;
video.addEventListener('play', () => {
switchingVideos = false;
// If it is not the first event, then the only way to get to 0 is if there is a seek event
// This check makes sure that changing the video resolution doesn't cause the extension to think it
// gone back to the begining
if (!firstEvent && video.currentTime === 0) return;
firstEvent = false;
if (switchingVideos) {
switchingVideos = false;
// If already segments loaded before video, retry to skip starting segments
if (sponsorTimes) startSkipScheduleCheckingForStartSponsors();
}
// Check if an ad is playing
updateAdFlag();
@@ -596,7 +608,9 @@ function setupVideoListeners() {
getCategoryActionType(segment.category) === CategoryActionType.POI &&
video.currentTime - segment.segment[0] > 0 &&
video.currentTime - segment.segment[0] < previewBar.getMinimumSize(true));
if (currentPoiSegment && !skipNotices.some((notice) => notice.segments.some((s) => s.UUID === currentPoiSegment.UUID))) {
if (currentPoiSegment && lastPOISkip < Date.now() - 3000
&& !skipNotices.some((notice) => notice.segments.some((s) => s.UUID === currentPoiSegment.UUID))) {
lastPOISkip = Date.now();
skipToTime({
v: video,
skipTime: currentPoiSegment.segment,
@@ -668,7 +682,8 @@ async function sponsorsLookup(id: string, keepOldSubmissions = true) {
if (response?.ok) {
const recievedSegments: SponsorTime[] = JSON.parse(response.responseText)
?.filter((video) => video.videoID === id)
?.map((video) => video.segments)[0];
?.map((video) => video.segments)[0]
?.filter(segmentDurationFilter);
if (!recievedSegments || !recievedSegments.length) {
// return if no video found
retryFetch();
@@ -759,24 +774,27 @@ function retryFetch(): void {
* Ex. When segments are first loaded
*/
function startSkipScheduleCheckingForStartSponsors() {
if (!switchingVideos) {
if (!switchingVideos && sponsorTimes) {
// See if there are any starting sponsors
let startingSegmentTime = -1;
let startingSegmentTime = getStartTimeFromUrl(document.URL) || -1;
let found = false;
let startingSegment: SponsorTime = null;
for (const time of sponsorTimes) {
if (time.segment[0] <= video.currentTime && time.segment[0] > startingSegmentTime && time.segment[1] > video.currentTime
&& getCategoryActionType(time.category) === CategoryActionType.Skippable) {
startingSegmentTime = time.segment[0];
startingSegment = time;
found = true;
break;
}
}
if (startingSegmentTime === -1) {
if (!found) {
for (const time of sponsorTimesSubmitting) {
if (time.segment[0] <= video.currentTime && time.segment[0] > startingSegmentTime && time.segment[1] > video.currentTime
&& getCategoryActionType(time.category) === CategoryActionType.Skippable) {
startingSegmentTime = time.segment[0];
startingSegment = time;
found = true;
break;
}
}
@@ -833,7 +851,7 @@ function getYouTubeVideoID(url: string): string | boolean {
if(url.startsWith("https://www.youtube.com/tv#/")) url = url.replace("#", "");
//Attempt to parse url
let urlObject = null;
let urlObject: URL = null;
try {
urlObject = new URL(url);
} catch (e) {
@@ -859,9 +877,10 @@ function getYouTubeVideoID(url: string): string | boolean {
if (urlObject.searchParams.has("v") && ["/watch", "/watch/"].includes(urlObject.pathname) || urlObject.pathname.startsWith("/tv/watch")) {
const id = urlObject.searchParams.get("v");
return id.length == 11 ? id : false;
} else if (urlObject.pathname.startsWith("/embed/")) {
} else if (urlObject.pathname.startsWith("/embed/") || urlObject.pathname.startsWith("/shorts/")) {
try {
return urlObject.pathname.substr(7, 11);
const id = urlObject.pathname.split("/")[2];
if (id && id.length >= 11) return id.substr(0, 11);
} catch (e) {
console.error("[SB] Video ID not valid for " + url);
return false;
@@ -912,7 +931,7 @@ function updatePreviewBar(): void {
});
});
previewBar.set(previewBarSegments, video.duration)
previewBar.set(previewBarSegments, video?.duration)
if (Config.config.showTimeWithSkips) {
const skippedDuration = utils.getTimestampsDuration(previewBarSegments.map(({segment}) => segment));
@@ -965,16 +984,16 @@ async function whitelistCheck() {
function getNextSkipIndex(currentTime: number, includeIntersectingSegments: boolean, includeNonIntersectingSegments: boolean):
{array: ScheduledTime[], index: number, endIndex: number, openNotice: boolean} {
const { includedTimes: submittedArray, startTimeIndexes: sponsorStartTimes } =
const { includedTimes: submittedArray, scheduledTimes: sponsorStartTimes } =
getStartTimes(sponsorTimes, includeIntersectingSegments, includeNonIntersectingSegments);
const { startTimeIndexes: sponsorStartTimesAfterCurrentTime } = getStartTimes(sponsorTimes, includeIntersectingSegments, includeNonIntersectingSegments, currentTime, true, true);
const { scheduledTimes: sponsorStartTimesAfterCurrentTime } = getStartTimes(sponsorTimes, includeIntersectingSegments, includeNonIntersectingSegments, currentTime, true, true);
const minSponsorTimeIndex = sponsorStartTimes.indexOf(Math.min(...sponsorStartTimesAfterCurrentTime));
const endTimeIndex = getLatestEndTimeIndex(submittedArray, minSponsorTimeIndex);
const { includedTimes: unsubmittedArray, startTimeIndexes: unsubmittedSponsorStartTimes } =
const { includedTimes: unsubmittedArray, scheduledTimes: unsubmittedSponsorStartTimes } =
getStartTimes(sponsorTimesSubmitting, includeIntersectingSegments, includeNonIntersectingSegments);
const { startTimeIndexes: unsubmittedSponsorStartTimesAfterCurrentTime } = getStartTimes(sponsorTimesSubmitting, includeIntersectingSegments, includeNonIntersectingSegments, currentTime, false, false);
const { scheduledTimes: unsubmittedSponsorStartTimesAfterCurrentTime } = getStartTimes(sponsorTimesSubmitting, includeIntersectingSegments, includeNonIntersectingSegments, currentTime, false, false);
const minUnsubmittedSponsorTimeIndex = unsubmittedSponsorStartTimes.indexOf(Math.min(...unsubmittedSponsorStartTimesAfterCurrentTime));
const previewEndTimeIndex = getLatestEndTimeIndex(unsubmittedArray, minUnsubmittedSponsorTimeIndex);
@@ -1053,28 +1072,27 @@ function getLatestEndTimeIndex(sponsorTimes: SponsorTime[], index: number, hideH
* the current time, but end after
*/
function getStartTimes(sponsorTimes: SponsorTime[], includeIntersectingSegments: boolean, includeNonIntersectingSegments: boolean,
minimum?: number, onlySkippableSponsors = false, hideHiddenSponsors = false): {includedTimes: ScheduledTime[], startTimeIndexes: number[]} {
if (!sponsorTimes) return {includedTimes: [], startTimeIndexes: []};
minimum?: number, onlySkippableSponsors = false, hideHiddenSponsors = false): {includedTimes: ScheduledTime[], scheduledTimes: number[]} {
if (!sponsorTimes) return {includedTimes: [], scheduledTimes: []};
const includedTimes: ScheduledTime[] = [];
const startTimeIndexes: number[] = [];
const scheduledTimes: number[] = [];
const possibleTimes = sponsorTimes.flatMap((sponsorTime) => {
const results = [{
...sponsorTime,
scheduledTime: sponsorTime.segment[0]
}]
const possibleTimes = sponsorTimes.map((sponsorTime) => ({
...sponsorTime,
scheduledTime: sponsorTime.segment[0]
}));
if (sponsorTime.actionType === ActionType.Mute) {
// Schedule at the end time to know when to unmute
results.push({
// Schedule at the end time to know when to unmute
sponsorTimes.filter(sponsorTime => sponsorTime.actionType === ActionType.Mute)
.forEach(sponsorTime => {
if (!possibleTimes.some((time) => sponsorTime.segment[1] === time.scheduledTime)) {
possibleTimes.push({
...sponsorTime,
scheduledTime: sponsorTime.segment[1]
})
});
}
return results;
})
});
for (let i = 0; i < possibleTimes.length; i++) {
if ((minimum === undefined
@@ -1084,12 +1102,12 @@ function getStartTimes(sponsorTimes: SponsorTime[], includeIntersectingSegments:
&& (!hideHiddenSponsors || possibleTimes[i].hidden === SponsorHideType.Visible)
&& getCategoryActionType(possibleTimes[i].category) === CategoryActionType.Skippable) {
startTimeIndexes.push(possibleTimes[i].scheduledTime);
scheduledTimes.push(possibleTimes[i].scheduledTime);
includedTimes.push(possibleTimes[i]);
}
}
return { includedTimes, startTimeIndexes };
return { includedTimes, scheduledTimes };
}
/**
@@ -1112,7 +1130,7 @@ function sendTelemetryAndCount(skippingSegments: SponsorTime[], secondsSkipped:
let counted = false;
for (const segment of skippingSegments) {
const index = sponsorTimes.indexOf(segment);
const index = sponsorTimes?.findIndex((s) => s.segment === segment.segment);
if (index !== -1 && !sponsorSkipped[index]) {
sponsorSkipped[index] = true;
if (!counted) {
@@ -1307,15 +1325,8 @@ async function createButtons(): Promise<void> {
if (Config.config.autoHideInfoButton && !onInvidious && controlsContainer
&& playerButtons["info"]?.button && !controlsWithEventListeners.includes(controlsContainer)) {
controlsWithEventListeners.push(controlsContainer);
playerButtons["info"].button.classList.add("hidden");
controlsContainer.addEventListener("mouseenter", () => {
playerButtons["info"].button.classList.remove("hidden");
});
controlsContainer.addEventListener("mouseleave", () => {
playerButtons["info"].button.classList.add("hidden");
});
utils.setupAutoHideAnimation(playerButtons["info"].button, controlsContainer);
}
}
@@ -1388,7 +1399,7 @@ function getRealCurrentTime(): number {
if (playButtonSVGData === replaceSVGData) {
// At the end of the video
return video.duration;
return video?.duration;
} else {
return video.currentTime;
}
@@ -1888,7 +1899,7 @@ function showTimeWithoutSkips(skippedDuration: number): void {
display.appendChild(duration);
}
const durationAfterSkips = utils.getFormattedTime(video.duration - skippedDuration)
const durationAfterSkips = utils.getFormattedTime(video?.duration - skippedDuration)
duration.innerText = (durationAfterSkips == null || skippedDuration <= 0) ? "" : " (" + durationAfterSkips + ")";
}

View File

@@ -31,14 +31,16 @@ export function openChat(config: ChatConfig): void {
}
export async function openWarningChat(warningMessage: string): Promise<void> {
const warningReasonMatch = warningMessage.match(/Warning reason: '(.+)'/);
alert(chrome.i18n.getMessage("warningChatInfo") + `\n\n${warningReasonMatch ? ` Warning reason: ${warningReasonMatch[1]}` : ``}`);
const userNameData = await utils.asyncRequestToServer("GET", "/api/getUsername?userID=" + Config.config.userID);
const userName = userNameData.ok ? JSON.parse(userNameData.responseText).userName : "";
const publicUserID = await utils.getHash(Config.config.userID);
const warningReasonMatch = warningMessage.match(/Warning reason: '(.+)'/);
openChat({
displayName: `${userName ? userName : ``}${userName !== publicUserID ? ` | ${publicUserID}` : ``}`,
composerInitialValue: `I got a warning and want to know what I need to do to improve.` +
composerInitialValue: `I got a warning and confirm I [REMOVE THIS CAPITAL TEXT TO CONFIRM] reread the guidelines.` +
warningReasonMatch ? ` Warning reason: ${warningReasonMatch[1]}` : ``,
customDescription: chrome.i18n.getMessage("warningChatInfo")
});

View File

@@ -2,6 +2,8 @@ import Config from "../config";
import { SponsorTime } from "../types";
import { getSkippingText } from "../utils/categoryUtils";
import Utils from "../utils";
const utils = new Utils();
export interface SkipButtonControlBarProps {
skip: (segment: SponsorTime) => void;
@@ -53,13 +55,20 @@ export class SkipButtonControlBar {
if (leftControlsContainer && !leftControlsContainer.contains(this.container)) {
leftControlsContainer.insertBefore(this.container, this.chapterText);
if (Config.config.autoHideInfoButton) {
utils.setupAutoHideAnimation(this.skipIcon, leftControlsContainer, false, false);
}
}
}
enable(segment: SponsorTime, duration?: number): void {
if (duration) this.duration = duration;
this.segment = segment;
this.refreshText();
this.textContainer?.classList?.remove("hidden");
utils.disableAutoHideAnimation(this.skipIcon);
this.startTimer();
}
@@ -68,7 +77,8 @@ export class SkipButtonControlBar {
if (this.segment) {
this.chapterText?.classList?.add("hidden");
this.container.classList.remove("hidden");
this.textContainer.innerText = getSkippingText([this.segment], false) + (this.showKeybindHint ? " (" + Config.config.skipKeybind + ")" : "");
this.textContainer.innerText = this.getTitle();
this.skipIcon.setAttribute("title", this.getTitle());
}
}
@@ -84,17 +94,42 @@ export class SkipButtonControlBar {
startTimer(): void {
this.stopTimer();
this.timeout = setTimeout(() => this.disable(), Math.max(Config.config.skipNoticeDuration, this.duration) * 1000);
this.timeout = setTimeout(() => this.disableText(), Math.max(Config.config.skipNoticeDuration, this.duration) * 1000);
}
disable(): void {
this.container.classList.add("hidden");
this.textContainer?.classList?.remove("hidden");
this.chapterText?.classList?.remove("hidden");
this.getChapterPrefix()?.classList?.remove("hidden");
}
toggleSkip(): void {
this.skip(this.segment);
this.disable();
this.disableText();
}
disableText(): void {
if (Config.config.hideVideoPlayerControls || Config.config.hideSkipButtonPlayerControls) {
this.disable();
return;
}
this.textContainer?.classList?.add("hidden");
this.chapterText?.classList?.remove("hidden");
this.getChapterPrefix()?.classList?.add("hidden");
utils.enableAutoHideAnimation(this.skipIcon);
}
private getTitle(): string {
return getSkippingText([this.segment], false) + (this.showKeybindHint ? " (" + Config.config.skipKeybind + ")" : "");
}
private getChapterPrefix(): HTMLElement {
return document.querySelector(".ytp-chapter-title-prefix");
}
}

View File

@@ -80,6 +80,7 @@ export interface SponsorTime {
hidden?: SponsorHideType;
source?: SponsorSourceType;
videoDuration?: number;
}
export interface ScheduledTime extends SponsorTime {

View File

@@ -183,6 +183,36 @@ export default class Utils {
}
}
setupAutoHideAnimation(element: Element, container: Element, enabled = true, rightSlide = true): void {
if (enabled) element.classList.add("autoHiding");
element.classList.add("hidden");
element.classList.add("animationDone");
if (!rightSlide) element.classList.add("autoHideLeft");
container.addEventListener("mouseenter", () => {
element.classList.remove("animationDone");
// Wait for next event loop
setTimeout(() => element.classList.remove("hidden"), 10);
});
container.addEventListener("mouseleave", () => {
if (element.classList.contains("autoHiding")) {
element.classList.add("hidden");
}
});
}
enableAutoHideAnimation(element: Element): void {
element.classList.add("autoHiding");
element.classList.add("hidden");
}
disableAutoHideAnimation(element: Element): void {
element.classList.remove("autoHiding");
element.classList.remove("hidden");
}
/**
* Merges any overlapping timestamp ranges into single segments and returns them as a new array.
*/

26
src/utils/urlParser.ts Normal file
View File

@@ -0,0 +1,26 @@
export function getStartTimeFromUrl(url: string): number {
const urlParams = new URLSearchParams(url);
const time = urlParams?.get('t') || urlParams?.get('time_continue');
return urlTimeToSeconds(time);
}
export function urlTimeToSeconds(time: string): number {
if (!time) {
return 0;
}
const re = /(?:(\d{1,3})h)?(?:(\d{1,2})m)?(\d+)s?/;
const match = re.exec(time);
if (match) {
const hours = parseInt(match[1] ?? '0', 10);
const minutes = parseInt(match[2] ?? '0', 10);
const seconds = parseInt(match[3] ?? '0', 10);
return hours * 3600 + minutes * 60 + seconds;
} else if (/\d+/.test(time)) {
return parseInt(time, 10);
}
}

View File

@@ -3,7 +3,15 @@ import * as Chrome from "selenium-webdriver/chrome";
import * as Path from "path";
test("Selenium Chrome test", async () => {
const driver = await setup();
let driver;
try {
driver = await setup();
} catch (e) {
console.warn("A browser is probably not installed, skipping selenium tests");
console.warn(e);
return;
}
try {
await waitForInstall(driver);
@@ -15,6 +23,7 @@ test("Selenium Chrome test", async () => {
await editSegments(driver, 0, "0:04.000", "0:10.330", "5", "13.211", "0:05.000 to 0:13.211", false);
await autoskipSegment(driver, 5, 13.211);
await setSegmentCategory(driver, 0, 1, false);
await setSegmentActionType(driver, 0, 1, false);
await editSegments(driver, 0, "0:05.000", "0:13.211", "5", "7.5", "0:05.000 to 0:07.500", false);
await muteSkipSegment(driver, 5, 7.5);
@@ -109,6 +118,16 @@ async function editSegments(driver: WebDriver, index: number, expectedStartTimeB
await driver.wait(until.elementTextIs(sponsorTimeDisplay, expectedDisplayedTime));
}
async function setSegmentCategory(driver: WebDriver, index: number, categoryIndex: number, openSubmitBox: boolean): Promise<void> {
if (openSubmitBox) {
const submitButton = await driver.findElement(By.id("submitButton"));
await submitButton.click();
}
const categorySelection = await driver.findElement(By.css(`#sponsorTimeCategoriesSubmissionNotice${index} > option:nth-child(${categoryIndex + 1})`));
await categorySelection.click();
}
async function setSegmentActionType(driver: WebDriver, index: number, actionTypeIndex: number, openSubmitBox: boolean): Promise<void> {
if (openSubmitBox) {
const submitButton = await driver.findElement(By.id("submitButton"));
@@ -116,7 +135,7 @@ async function setSegmentActionType(driver: WebDriver, index: number, actionType
}
const actionTypeSelection = await driver.findElement(By.css(`#sponsorTimeActionTypesSubmissionNotice${index} > option:nth-child(${actionTypeIndex + 1})`));
actionTypeSelection.click();
await actionTypeSelection.click();
}
async function autoskipSegment(driver: WebDriver, startTime: number, endTime: number): Promise<void> {

27
test/urlParser.test.ts Normal file
View File

@@ -0,0 +1,27 @@
import { getStartTimeFromUrl } from '../src/utils/urlParser';
describe("getStartTimeFromUrl", () => {
it("parses with a number", () => {
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=123")).toBe(123);
});
it("parses with seconds", () => {
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=123s")).toBe(123);
});
it("parses with minutes", () => {
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=23m3s")).toBe(23 * 60 + 3);
});
it("parses with hours", () => {
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&t=1h2m3s")).toBe(1 * 60 * 60 + 2 * 60 + 3);
});
it("works with time_continue", () => {
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ&time_continue=123")).toBe(123);
});
it("works with no time", () => {
expect(getStartTimeFromUrl("https://www.youtube.com/watch?v=dQw4w9WgXcQ")).toBe(0);
});
});