Compare commits

...

8 Commits

Author SHA1 Message Date
Ajay Ramachandran
28cddf92d5 Merge pull request #358 from ajayyy/react
Categories Improvements
2020-06-02 19:40:11 -04:00
Ajay Ramachandran
465a6dde9b New Crowdin translations (#355)
* New translations messages.json (Bulgarian)

* New translations messages.json (Italian)

* New translations messages.json (German)

* New translations messages.json (French)

* New translations messages.json (Bulgarian)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (Russian)

* New translations messages.json (Chinese Simplified)

* New translations messages.json (Ukrainian)

* New translations messages.json (Swedish)

* New translations messages.json (Slovak)

* New translations messages.json (Turkish)

* New translations messages.json (Portuguese)

* New translations messages.json (Polish)

* New translations messages.json (German)

* New translations messages.json (German)

* New translations messages.json (Russian)

* New translations messages.json (German)

* New translations messages.json (Dutch)

* New translations messages.json (Portuguese, Brazilian)

* New translations messages.json (Swedish)

* New translations messages.json (Ukrainian)

* New translations messages.json (Chinese Simplified)

* New translations messages.json (Russian)

* New translations messages.json (Turkish)

* New translations messages.json (Bulgarian)

* New translations messages.json (French)

* New translations messages.json (German)

* New translations messages.json (Portuguese)

* New translations messages.json (Italian)

* New translations messages.json (Dutch)

* New translations messages.json (Polish)

* New translations messages.json (Chinese Simplified)

* New translations messages.json (Finnish)

* New translations messages.json (Gujarati)

* New translations messages.json (Gujarati)

* New translations messages.json (Spanish)

* New translations messages.json (French)

* New translations messages.json (French)

* New translations messages.json (French)

* New translations messages.json (French)

* New translations messages.json (Spanish)

* New translations messages.json (French)

* New translations messages.json (Spanish)

* New translations messages.json (Polish)

* New translations messages.json (French)

* New translations messages.json (Polish)
2020-06-02 19:38:04 -04:00
Ajay Ramachandran
5336399365 Increase version number 2020-06-02 19:37:53 -04:00
Ajay Ramachandran
3f69b19e23 Remove duplicate vote error message 2020-05-25 22:27:39 -04:00
Ajay Ramachandran
23103f1274 Made preview submissions always autoskip 2020-05-25 22:21:11 -04:00
Ajay Ramachandran
9bfaf98dda Revised self-promo naming 2020-05-25 18:32:53 -04:00
Ajay Ramachandran
f21be82cce Fix local saved time tracking.
Also made it track when the notice is closed.
2020-05-24 23:00:39 -04:00
Ajay Ramachandran
39155fdf99 Moved requests to the background script.
This should avoid ad blockers messing with requests.

Helps with https://github.com/ajayyy/SponsorBlock/issues/354
2020-05-24 22:42:55 -04:00
25 changed files with 1670 additions and 336 deletions

View File

@@ -1,7 +1,7 @@
{ {
"name": "__MSG_fullName__", "name": "__MSG_fullName__",
"short_name": "__MSG_Name__", "short_name": "__MSG_Name__",
"version": "1.2.29", "version": "1.2.30",
"default_locale": "en", "default_locale": "en",
"description": "__MSG_Description__", "description": "__MSG_Description__",
"content_scripts": [{ "content_scripts": [{

View File

@@ -1 +1,131 @@
{} {
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock за YouTube - пропускай спонсорства",
"description": "Name of the extension."
},
"Description": {
"message": "Пропускай спонсорствата в YouTube клипове. Докладвай за спонсорства в клиповете които гледате, за да спестите време на други хора.",
"description": "Description of the extension."
},
"400": {
"message": "Сървърът каза, че тази заявка е невалидна"
},
"429": {
"message": "Подали сте прекалено много спонсорства за едно видео, сигурни ли сте, че има толкова много?"
},
"409": {
"message": "Това спонсорство вече е подадено"
},
"channelWhitelisted": {
"message": "Каналът е добавен към Whitelist!"
},
"Sponsor": {
"message": "спонсор"
},
"Sponsors": {
"message": "спонсори"
},
"Segment": {
"message": "част със спонсорство"
},
"Segments": {
"message": "части със спонсорство"
},
"reportButtonTitle": {
"message": "Докладвай"
},
"Dismiss": {
"message": "Отхвърли"
},
"Loading": {
"message": "Зареждане..."
},
"Mins": {
"message": "Минути"
},
"Secs": {
"message": "Секунди"
},
"Hide": {
"message": "Никога не показвай"
},
"hitGoBack": {
"message": "Натиснете \"върни\" за да се върнете където бяхте."
},
"unskip": {
"message": "Върни"
},
"reskip": {
"message": "Пропусни отново"
},
"paused": {
"message": "На пауза"
},
"confirmMSG": {
"message": "За да редактирате или изтриете някои стойности, натиснете на \"инфо\" бутона или отворете изкачащият прозорец на добавката чрез кликване на иконата на добавката в горният ляв ъгъл."
},
"clearThis": {
"message": "Сигурни ли сте, че искате да изчистите това?\n\n"
},
"Unknown": {
"message": "Възникна грешка при подаването на Вашите спонсорски времена, моля опитайте отново по-късно."
},
"sponsorFound": {
"message": "Спонсорите на това видео са в базата данни!"
},
"sponsor404": {
"message": "Няма намерени спонсорства"
},
"sponsorStart": {
"message": "Спонсорството Започва Сега"
},
"sponsorEnd": {
"message": "Спонсорството Започва Сега"
},
"noVideoID": {
"message": "Не е намерено YouTube видео в този раздел. Ако сте сигурни, че това е YouTube раздел, затворете този изскачащ прозорец и го отворете отново. Ако това не проработи, опитайте се да презаредите раздела."
},
"success": {
"message": "Успешно!"
},
"voted": {
"message": "Гласувано!"
},
"voteFail": {
"message": "Вече сте гласували така преди."
},
"connectionError": {
"message": "Възникна грешка с връзката. Код на грешката: "
},
"wantToSubmit": {
"message": "Искате ли да подадете спонсорствата за това видео ID"
},
"leftTimes": {
"message": "Изглежда, че не сте подали някои спонсорства. Върнете се в страницата и ги подайте (те не са изтрити)."
},
"clearTimes": {
"message": "Премахни Спонсорствата"
},
"openPopup": {
"message": "Отворете изскачащия прозорец на SponsorBlock"
},
"SubmitTimes": {
"message": "Подайте спонсорите"
},
"submitCheck": {
"message": "Сигурни ли сте, че искате да подадете това?"
},
"whitelistChannel": {
"message": "Добавяне на канала към Whitelist"
},
"removeFromWhitelist": {
"message": "Премахване на канала от Whitelist"
},
"voteOnTime": {
"message": "Гласуване за спонсорства"
}
}

View File

@@ -35,15 +35,9 @@
"Segments": { "Segments": {
"message": "gesponsorte Inhalte" "message": "gesponsorte Inhalte"
}, },
"noticeTitle": {
"message": "Sponsor übersprungen"
},
"reportButtonTitle": { "reportButtonTitle": {
"message": "Melden" "message": "Melden"
}, },
"reportButtonInfo": {
"message": "Melde dieses Segment als unzulässig."
},
"Dismiss": { "Dismiss": {
"message": "Abbrechen" "message": "Abbrechen"
}, },
@@ -71,6 +65,9 @@
"paused": { "paused": {
"message": "Pausiert" "message": "Pausiert"
}, },
"manualPaused": {
"message": "Timer angehalten"
},
"confirmMSG": { "confirmMSG": {
"message": "\n\nUm einzelne Werte zu löschen oder zu ändern, klicke auf den Info-Button, oder öffne die Erweiterungs-Übersicht, indem du das Erweiterungssymbol in der rechten oberen Ecke anklickst." "message": "\n\nUm einzelne Werte zu löschen oder zu ändern, klicke auf den Info-Button, oder öffne die Erweiterungs-Übersicht, indem du das Erweiterungssymbol in der rechten oberen Ecke anklickst."
}, },
@@ -104,9 +101,6 @@
"voteFail": { "voteFail": {
"message": "Du hast bereits so abgestimmt." "message": "Du hast bereits so abgestimmt."
}, },
"serverDown": {
"message": "Der Server ist scheinbar offline. Bitte unverzüglich dem Entwickler melden."
},
"connectionError": { "connectionError": {
"message": "Ein Verbindungsfehler ist aufgetreten. Fehlermeldung: " "message": "Ein Verbindungsfehler ist aufgetreten. Fehlermeldung: "
}, },
@@ -272,12 +266,12 @@
"errorCode": { "errorCode": {
"message": "Fehlermeldung: " "message": "Fehlermeldung: "
}, },
"noticeTitleNotSkipped": {
"message": "Sponsor überspringen?"
},
"skip": { "skip": {
"message": "Überspringen" "message": "Überspringen"
}, },
"skipped": {
"message": "Übersprungen"
},
"disableAutoSkip": { "disableAutoSkip": {
"message": "Auto-Überspringen deaktivieren" "message": "Auto-Überspringen deaktivieren"
}, },
@@ -350,6 +344,9 @@
"supportInvidious": { "supportInvidious": {
"message": "Unterstütze Invidious" "message": "Unterstütze Invidious"
}, },
"supportInvidiousDescription": {
"message": "Invidious (invidio.us) ist ein Drittanbieter-YouTube-Client. Um Support zu aktivieren, müssen Sie die zusätzlichen Berechtigungen akzeptieren. Dies funktioniert NICHT im Incongnito-modus auf Chrome und anderen Chromium-Varianten."
},
"optionsInfo": { "optionsInfo": {
"message": "Invidious Support aktivieren, Autoskip deaktivieren, Tasten ausblenden und vieles mehr." "message": "Invidious Support aktivieren, Autoskip deaktivieren, Tasten ausblenden und vieles mehr."
}, },
@@ -374,12 +371,6 @@
"currentInstances": { "currentInstances": {
"message": "Aktuelle Instanzen:" "message": "Aktuelle Instanzen:"
}, },
"enableAutoUpvote": {
"message": "Automatisches Liken"
},
"whatAutoUpvote": {
"message": "Wenn dies aktiviert ist, wird die Erweiterung alle Beiträge hochladen, die Sie ansehen, wenn Sie sie nicht melden. Wenn die Benachrichtigung deaktiviert ist, wird dies nicht geschehen."
},
"minDuration": { "minDuration": {
"message": "Minimale Dauer (Sekunden):" "message": "Minimale Dauer (Sekunden):"
}, },
@@ -486,9 +477,24 @@
"category_sponsor": { "category_sponsor": {
"message": "Sponsor" "message": "Sponsor"
}, },
"category_intro": {
"message": "Intro Animation"
},
"category_outro": {
"message": "Endkarten/Credits"
},
"category_interaction": {
"message": "Interaktions-Erinnerung (Abonnieren)"
},
"category_selfpromo": { "category_selfpromo": {
"message": "Eigenwerbung und Merchandise" "message": "Eigenwerbung und Merchandise"
}, },
"category_music_offtopic": {
"message": "Musik: Nicht-Musik-Abschnitt"
},
"category_livestream_messages": {
"message": "Livestream: Spenden/Nachrichten vorlesen"
},
"disable": { "disable": {
"message": "Deaktivieren" "message": "Deaktivieren"
}, },
@@ -512,5 +518,41 @@
}, },
"moreCategories": { "moreCategories": {
"message": "Weitere Kategorien" "message": "Weitere Kategorien"
},
"bracketEnd": {
"message": "(Ende)"
},
"hiddenDueToDownvote": {
"message": "versteckt: downvote"
},
"hiddenDueToDuration": {
"message": "verborgen: zu kurz"
},
"channelDataNotFound": {
"message": "Kanal-ID wurde noch nicht geladen."
},
"adblockerIssue": {
"message": "Irgendwas hält SponsorBlock davon ab, die Videodaten abzurufen. Möglicherweise ist das dein Werbeblocker. Mehr Infos: https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests"
},
"itCouldBeAdblockerIssue": {
"message": "Falls dies weiterhin geschieht, könnte dies durch Ihren Werbeblocker verursacht werden. Bitte überprüfen Sie https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests"
},
"forceChannelCheck": {
"message": "Kanalprüfung erzwingen vor dem Überspringen von Sponsoren"
},
"whatForceChannelCheck": {
"message": "Standardmäßig überspringt er Sponsoren sofort, bevor er überhaupt weiß, was der Kanal ist. Standardmäßig werden auf den Kanälen auf der Whitelist-Liste einige null Sekunden Sponsoren übersprungen. Das Aktivieren dieser Option verhindert dies, aber das Überspringen hat eine leichte Verzögerung, da die Kanal-ID einige Zeit in Anspruch nehmen kann. Diese Verzögerung kann bei schnellen Internetverbindungen unauffällig sein."
},
"forceChannelCheckPopup": {
"message": "Bedenken Sie die Aktivierung der Force-Channel-Prüfung vor dem Überspringen von Sponsoren"
},
"downvoteDescription": {
"message": "Nicht korrektes/Falsches Timing"
},
"incorrectCategory": {
"message": "Falsche Kategorie"
},
"nonMusicCategoryOnMusic": {
"message": "Dieses Video ist als Musik kategorisiert. Sind Sie sicher, dass Sie Segmente mit Nicht-Musikkategorien einreichen möchten? Wenn dieses Video nicht wirklich Musik ist, sollten Sie dieses Segment nicht einreichen. Bitte lesen Sie die Richtlinien, wenn Sie verwirrt sind."
} }
} }

View File

@@ -104,9 +104,6 @@
"voted": { "voted": {
"message": "Voted!" "message": "Voted!"
}, },
"voteFail": {
"message": "You have already voted this way before."
},
"serverDown": { "serverDown": {
"message": "It seems the server is down. Contact the dev immediately." "message": "It seems the server is down. Contact the dev immediately."
}, },
@@ -496,7 +493,7 @@
"message": "Interaction Reminder (Subscribe)" "message": "Interaction Reminder (Subscribe)"
}, },
"category_selfpromo": { "category_selfpromo": {
"message": "Self-Promotion and Merchandise" "message": "Unpaid/Self Promotion"
}, },
"category_music_offtopic": { "category_music_offtopic": {
"message": "Music: Non-Music Section" "message": "Music: Non-Music Section"

View File

@@ -1 +1,500 @@
{} {
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock para YouTube - Omitir Sponsors",
"description": "Name of the extension."
},
"Description": {
"message": "Omitir sponsors en videos de YouTube. Infórmanos de sponsors en videos que ves para ahorrar el tiempo de otros.",
"description": "Description of the extension."
},
"400": {
"message": "Servidor dijo que esta solicitud no es valida"
},
"429": {
"message": "Has enviado demasiados tiempos de sponsor en este video, ¿estas seguro de que hay tantos?"
},
"409": {
"message": "Esto ya ha sido enviado antes"
},
"channelWhitelisted": {
"message": "Canal Permitido!"
},
"Sponsor": {
"message": "sponsor"
},
"Sponsors": {
"message": "sponsors"
},
"Segment": {
"message": "segmento de sponsor"
},
"Segments": {
"message": "segmentos de sponsor"
},
"upvoteButtonInfo": {
"message": "Votar a favor de esta sumisión"
},
"reportButtonTitle": {
"message": "Denunciar"
},
"reportButtonInfo": {
"message": "Denunciar esta sumisión como incorrecta."
},
"Dismiss": {
"message": "Descartar"
},
"Loading": {
"message": "Cargando..."
},
"Mins": {
"message": "Minutos"
},
"Secs": {
"message": "Segundos"
},
"Hide": {
"message": "Nunca Mostrar"
},
"hitGoBack": {
"message": "Haz clic en no omitir para volver a donde estabas."
},
"unskip": {
"message": "No omitir"
},
"reskip": {
"message": "Volver a saltar"
},
"paused": {
"message": "Pausado"
},
"manualPaused": {
"message": "Temporizador Detenido"
},
"confirmMSG": {
"message": "Para editar o eliminar valores individuales, haz clic en el botón de información o abre la ventana de extensión haciendo clic en el icono de extensión en la esquina superior derecha."
},
"clearThis": {
"message": "¿Estas seguro de que quieres eliminar esto?\n\n"
},
"Unknown": {
"message": "Se ha producido un error enviando tus tiempos de sponsor, por favor inténtalo de nuevo más tarde."
},
"sponsorFound": {
"message": "¡Los sponsors de este video están en la base de datos!"
},
"sponsor404": {
"message": "No se encontró ningún sponsor"
},
"sponsorStart": {
"message": "Sponsor Empieza Ahora"
},
"sponsorEnd": {
"message": "Sponsor Acaba Ahora"
},
"noVideoID": {
"message": "Ningún video de YouTube se encontró en esta pestaña. Si sabes que esto es una pestaña de YouTube, cierra esta ventana y ábrela otra vez. Si eso no funciona, intenta recargar la pestaña."
},
"success": {
"message": "¡Completado!"
},
"voted": {
"message": "¡Votado!"
},
"serverDown": {
"message": "Parece que el servidor está desconectado. Póngase en contacto con el desarrollador inmediatamente."
},
"connectionError": {
"message": "Ha ocurrido un error de conexión. Código de error: "
},
"wantToSubmit": {
"message": "¿Quieres enviar los tiempos de sponsor para el vídeo id"
},
"leftTimes": {
"message": "Parece que has dejado algunos tiempos de sponsor sin enviar. Vuelve a esa página para enviarlos (no se eliminaron)."
},
"clearTimes": {
"message": "Eliminar Tiempos de Sponsor"
},
"openPopup": {
"message": "Abrir Ventana de SponsorBlock"
},
"SubmitTimes": {
"message": "Enviar Tiempos de Sponsor"
},
"submitCheck": {
"message": "¿Estás seguro de que quieres enviar esto?"
},
"whitelistChannel": {
"message": "Permitir Canal"
},
"removeFromWhitelist": {
"message": "Parar De Permitir Canal"
},
"voteOnTime": {
"message": "Votar en un tiempo de sponsor"
},
"recordTimes": {
"message": "Registrar los tiempos de un sponsor"
},
"soFarUHSubmited": {
"message": "Hasta ahora, has enviado"
},
"savedPeopleFrom": {
"message": "Has salvado personas de "
},
"viewLeaderboard": {
"message": "Ver la tabla de clasificación"
},
"here": {
"message": "aquí"
},
"recordTimesDescription": {
"message": "Haga clic en el botón de abajo cuando el sponsor comienza y termina para registrarlo y\nenviarlo a la base de datos."
},
"popupHint": {
"message": "Consejo: Presiona la tecla de punto y coma mientras enfocado en un video para registrar el comienzo/fin de un sponsor y presiona comillas para enviar. (Esto se puede cambiar en las opciones)"
},
"lastTimes": {
"message": "Últimos mensajes de sponsor elegidos"
},
"clearTimesButton": {
"message": "Eliminar Tiempos"
},
"submitTimesButton": {
"message": "Enviar Tiempos"
},
"publicStats": {
"message": "Esto se utiliza en la página de estadísticas públicas para mostrar cuánto has contribuido. Véala"
},
"setUsername": {
"message": "Escoger Nombre De Usuario"
},
"discordAdvert": {
"message": "¡Únete al servidor oficial de discord para darnos sugerencias y comentarios!"
},
"hideThis": {
"message": "No mostrar esto"
},
"Options": {
"message": "Opciones"
},
"showButtons": {
"message": "Mostrar botones en el reproductor de YouTube"
},
"hideButtons": {
"message": "Ocultar botones en el reproductor de YouTube"
},
"hideButtonsDescription": {
"message": "Esto oculta los botones que aparecen en el reproductor de YouTube que se usan para enviar segmentos saltados."
},
"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."
},
"hideDeleteButton": {
"message": "Ocultar botón de eliminar en el reproductor de YouTube"
},
"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."
},
"disableViewTracking": {
"message": "Desactivar seguimiento de numero de sponsorsomitidos"
},
"enableViewTracking": {
"message": "Activar seguimiento de numero de sponsors omitidos"
},
"whatViewTracking": {
"message": "Esta opción registra los sponsors que te has saltado para que los otros usuarios sepan cuánto su sumisión ha ayudado a otros y\nes usado como métrica junto con votos positivos para asegurar que el spam no ingrese a la base de datos. La extensión envía un mensaje\nal servidor cada vez que se salta un patrocinador. Esperemos que la mayoría de la gente no cambie esta opción para que los números de vista sean exactos. :)"
},
"showNotice": {
"message": "Mostrar aviso de nuevo"
},
"longDescription": {
"message": "SponsorBlock es una extensión que se omitira segmentos de sponsor de vídeos de YouTube. SponsorBlock es una extensión de navegador que permite a cualquiera enviar los tiempos de comienzo y fin de segmentos de sponsor de vídeos de YouTube. Una vez que una persona envíe esta información, todos los demás con esta extensión pueden omitir directamente el segmento de sponsor.",
"description": "Full description of the extension on the store pages."
},
"website": {
"message": "Sitio Web",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Código Fuente",
"description": "Used on Firefox Store Page"
},
"noticeUpdate": {
"message": "¡El aviso ha sido actualizado!",
"description": "The first line of the message displayed after the notice was upgraded."
},
"noticeUpdate2": {
"message": "Si aún no te gusta, pulsa el botón de nunca mostrar.",
"description": "The second line of the message displayed after the notice was upgraded."
},
"setStartSponsorShortcut": {
"message": "Establecer botón de inicio de sponsor"
},
"setSubmitKeybind": {
"message": "Establecer botón de envio"
},
"keybindDescription": {
"message": "Seleccione un botón escribiéndolo"
},
"keybindDescriptionComplete": {
"message": "El botón se ha establecido a: "
},
"0": {
"message": "Tiempo de espera agotado. Compruebe su conexión a Internet. Si su internet está funcionando, el servidor probablemente esta sobrecargado o desconectado."
},
"disableSkipping": {
"message": "Desactivar SponsorBlock"
},
"enableSkipping": {
"message": "Activar SponsorBlock"
},
"yourWork": {
"message": "Tu trabajo",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"502": {
"message": "El servidor parece estar sobrecargado. Inténtalo de nuevo en unos segundos."
},
"errorCode": {
"message": "Código de error: "
},
"skip": {
"message": "Omitir"
},
"skipped": {
"message": "Omitido"
},
"disableAutoSkip": {
"message": "Desactivar la omisión automática"
},
"enableAutoSkip": {
"message": "Activar la omisión automática"
},
"autoSkipDescription": {
"message": "La omisión automática omitirá sponsors por ti. Si esta desactivada, aparecerá un aviso preguntando si quieres omitir."
},
"audioNotification": {
"message": "Notificación de audio al omitir"
},
"audioNotificationDescription": {
"message": "Notificación de audio al omitir reproducirá un sonido cada vez que se omite un sponsor. Si está desactivada (o se desactiva la omisión automática), no se reproducirá ningún sonido."
},
"youHaveSkipped": {
"message": "Has omitido "
},
"youHaveSaved": {
"message": "Te has ahorrado "
},
"minLower": {
"message": "minuto"
},
"minsLower": {
"message": "minutos"
},
"hourLower": {
"message": "hora"
},
"hoursLower": {
"message": "horas"
},
"youHaveSavedTime": {
"message": "Has ahorrado a otras personas"
},
"youHaveSavedTimeEnd": {
"message": " de sus vidas."
},
"guildlinesSummary": {
"message": "- Asegúrate de que tu segmento sólo contiene un segmento de promoción de pago, nada más.\n- Asegúrate de que omitir este segmento no omitirá ningún contenido valioso\n- Si todo el vídeo es un sponsor, por favor, no lo envíen. Pronto saldrá un sistema completo de reportes de vídeo.\n- Por favor, no informe de los avisos que podrían mostrar parcialidad (si un vídeo de revista está patrocinado, no se salte cuando mencionen eso)."
},
"statusReminder": {
"message": "Comprueba status.sponsor.ajay.app para ver el estado del servidor."
},
"changeUserID": {
"message": "Importar/Exportar tu UserID"
},
"whatChangeUserID": {
"message": "Esto debería mantenerse privado. Es como una contraseña y no debe ser compartido con nadie. Si alguien tiene esto, pueden imitarte."
},
"setUserID": {
"message": "Definir UserID"
},
"userIDChangeWarning": {
"message": "Advertencia: Cambiar el UserID es permanente. ¿Estás seguro de que desea hacer esto? Asegúrese de hacer una copia de seguridad de su UserID anterior por si acaso."
},
"createdBy": {
"message": "Creado Por"
},
"autoSkip": {
"message": "Omisión Automática"
},
"showSkipNotice": {
"message": "Mostrar aviso después de que se omita un sponsor"
},
"keybindCurrentlySet": {
"message": ". Actualmente está establecido a:"
},
"supportInvidious": {
"message": "Soportar Invidious"
},
"supportInvidiousDescription": {
"message": "Invidious (invidio.us) es un cliente alternativo para YouTube. Para habilitar soporte, tienes que aceptar los permisos adicionales. Esto NO funciona en modo incógnito en Chrome y otros variantes de Chromium."
},
"optionsInfo": {
"message": "Activar soporte de Invidious, deshabilitar omisión automática, ocultar botones y más."
},
"addInvidiousInstance": {
"message": "Añadir nodo de Invidious"
},
"addInvidiousInstanceDescription": {
"message": "Añadir un nodo de Invidious personalizado. Esto debe estar formateado con SOLO el dominio. Ejemplo: invidious.ajay.app"
},
"add": {
"message": "Añadir"
},
"addInvidiousInstanceError": {
"message": "Esto es un dominio inválido. Esto debería incluir SOLO el dominio. Ejemplo: invidious.ajay.app"
},
"resetInvidiousInstance": {
"message": "Restablecer Lista de Nodos de Invidious"
},
"resetInvidiousInstanceAlert": {
"message": "Estás a punto de restablecer la lista de nodos de invidious"
},
"currentInstances": {
"message": "Nodos actuales:"
},
"minDuration": {
"message": "Duración mínima (en segundos):"
},
"minDurationDescription": {
"message": "Los segmentos de sponsor más cortos que el valor establecido no serán omitidos ni mostrados en el reproductor."
},
"shortCheck": {
"message": "La siguiente sumisión es más corto que su opción de duración mínima. Esto podría significar que esto ya se ha enviado y que simplemente se ha ignorado debido a esta opción. ¿Está seguro de que desea enviar?"
},
"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"
},
"customServerAddressDescription": {
"message": "La dirección que SponsorBlock utiliza para hacer llamadas al servidor.\nA menos que tengas tu propia instancia del servidor, no debería cambiarse."
},
"save": {
"message": "Guardar"
},
"reset": {
"message": "Restablecer"
},
"mobileUpdateInfo": {
"message": "m.youtube.com ahora es compatible"
},
"exportOptions": {
"message": "Importar/Exportar todas las opciones"
},
"setOptions": {
"message": "Configurar opciones"
},
"confirmNoticeTitle": {
"message": "Enviar segmento"
},
"submit": {
"message": "Enviar"
},
"cancel": {
"message": "Cancelar"
},
"delete": {
"message": "Eliminar"
},
"preview": {
"message": "Vista Previa"
},
"edit": {
"message": "Editar"
},
"copyDebugInformation": {
"message": "Copiar información de depuración al portapapeles"
},
"copyDebugInformationFailed": {
"message": "Error al escribir al portapapeles"
},
"theKey": {
"message": "El botón"
},
"keyAlreadyUsedByYouTube": {
"message": "ya está en uso por youtube. Por favor, seleccione otro botón."
},
"keyAlreadyUsed": {
"message": "está enlazado a otra acción. Por favor, seleccione otro botón."
},
"category_sponsor": {
"message": "Sponsor"
},
"category_intro": {
"message": "Animación de introducción"
},
"category_outro": {
"message": "Tarjetas/Créditos"
},
"category_interaction": {
"message": "Recordatorio de interacción (subscribir)"
},
"category_selfpromo": {
"message": "Auto-promoción y mercancía"
},
"category_music_offtopic": {
"message": "Música: Sección sin musica"
},
"category_livestream_messages": {
"message": "Directo: Lecturas de donaciones y mensajes"
},
"disable": {
"message": "Desactivar"
},
"manualSkip": {
"message": "Omisión manual"
},
"enableTestingServer": {
"message": "Habilitar Servidor de Pruebas Beta"
},
"bracketNow": {
"message": "(Ahora)"
},
"moreCategories": {
"message": "Más categorías"
},
"bracketEnd": {
"message": "(Final)"
},
"channelDataNotFound": {
"message": "ID de canal no cargado todavía."
},
"downvoteDescription": {
"message": "Tiempo incorrecto"
},
"incorrectCategory": {
"message": "Categoría errónea"
},
"multipleSegments": {
"message": "Varios segmentos"
}
}

View File

@@ -1 +1,387 @@
{} {
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock YouTubelle - Ohita sponsoroinnit",
"description": "Name of the extension."
},
"Description": {
"message": "Ohita sponsorointi YouTube-videoissa. Ilmoita katsomiesi videoinen sponsoreista säästääksesi muiden aikaa.",
"description": "Description of the extension."
},
"400": {
"message": "Palvelin sanoi tämän pyynnön olevan virheellinen"
},
"429": {
"message": "Olet lähettänyt liian monta sponsorointiaikaa tälle yhdelle videolle. Oletko varma, että niitä on useita?"
},
"409": {
"message": "Tämä on jo lähetetty aiemmin"
},
"channelWhitelisted": {
"message": "Kanava lisätty valkoiselle listalle!"
},
"Sponsor": {
"message": "sponsori"
},
"Sponsors": {
"message": "sponsorit"
},
"Segment": {
"message": "sponsoroitu kohta"
},
"Segments": {
"message": "sponsoroidut kohdat"
},
"upvoteButtonInfo": {
"message": "Äänestä tätä lähetystä"
},
"reportButtonTitle": {
"message": "Ilmoita"
},
"reportButtonInfo": {
"message": "Ilmoita tämän lähetyksen olevan virheellinen."
},
"Dismiss": {
"message": "Hylkää"
},
"Loading": {
"message": "Ladataan..."
},
"Mins": {
"message": "Minuuttia"
},
"Secs": {
"message": "Sekuntia"
},
"Hide": {
"message": "Älä näytä koskaan"
},
"hitGoBack": {
"message": "Paina 'älä ohita' mennäksesi takaisin kohtaan jossa olit."
},
"unskip": {
"message": "Älä ohita"
},
"reskip": {
"message": "Ohita uudelleen"
},
"paused": {
"message": "Pysäytetty"
},
"manualPaused": {
"message": "Ajastin pysäytetty"
},
"clearThis": {
"message": "Haluatko varmasti poistaa tämän?\n\n"
},
"Unknown": {
"message": "Sponsorointiaikoja lähetettäessä tapahtui virhe, yritä myöhemmin uudelleen."
},
"sponsorFound": {
"message": "Tämän videon sponsorit löytyvät tietokannasta!"
},
"sponsor404": {
"message": "Sponsoreita ei löytynyt"
},
"sponsorStart": {
"message": "Sponsorointi alkaa nyt"
},
"sponsorEnd": {
"message": "Sponsorointi päättyy nyt"
},
"noVideoID": {
"message": "Välilehdeltä ei löytynyt YouTube-videota. Jos olet varma, että tämä on YouTube-välilehti, sulje tämä ponnahdusikkuna ja avaa se uudelleen. Jos sekään ei toimi, yritä ladata välilehti uudelleen."
},
"success": {
"message": "Onnistui!"
},
"voted": {
"message": "Äänestetty!"
},
"voteFail": {
"message": "Olet jo äänestänyt näin aiemmin."
},
"serverDown": {
"message": "Palvelin näyttää olevan alhaalla. Ota heti yhteyttä kehittäjään."
},
"connectionError": {
"message": "Yhteysvirhe on tapahtunut. Virhekoodi: "
},
"clearTimes": {
"message": "Tyhjennä sponsorointiajat"
},
"openPopup": {
"message": "Avaa SponsorBlock-ponnahdusikkuna"
},
"SubmitTimes": {
"message": "Lähetä sponsorointiajat"
},
"submitCheck": {
"message": "Haluatko varmasti lähettää tämän?"
},
"whitelistChannel": {
"message": "Lisää kanava valkoiselle listalle"
},
"removeFromWhitelist": {
"message": "Poista kanava valkoiselta listalta"
},
"voteOnTime": {
"message": "Äänestä sponsorointiaikaa"
},
"recordTimes": {
"message": "Tallenna sponsoroinnin ajat"
},
"soFarUHSubmited": {
"message": "Tähän mennessä, olet lähettänyt"
},
"savedPeopleFrom": {
"message": "Olet säästänyt ihmisiltä "
},
"viewLeaderboard": {
"message": "Näytä tulostaulukko"
},
"here": {
"message": "tässä"
},
"clearTimesButton": {
"message": "Tyhjennä ajat"
},
"submitTimesButton": {
"message": "Lähetä ajat"
},
"setUsername": {
"message": "Aseta käyttäjänimi"
},
"hideThis": {
"message": "Piilota tämä"
},
"Options": {
"message": "Asetukset"
},
"showButtons": {
"message": "Näytä painikkeet YouTuben soittimessa"
},
"hideButtons": {
"message": "Piilota painikkeet YouTuben soittimessa"
},
"hideButtonsDescription": {
"message": "Tämä piilottaa YouTuben soittimessa näkyvät, ohitettavien aikojen lähettämiseen käytetyt painikkeet."
},
"showInfoButton": {
"message": "Näytä info-painike YouTuben soittimessa"
},
"hideInfoButton": {
"message": "Piilota info-painike YouTuben soittimessa"
},
"whatInfoButton": {
"message": "Tämä on painike, joka avaa ponnahdusikkunan YouTube-sivulla."
},
"hideDeleteButton": {
"message": "Piilota poista-painike YouTuben soittimessa"
},
"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."
},
"website": {
"message": "Sivusto",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Lähdekoodi",
"description": "Used on Firefox Store Page"
},
"keybindDescription": {
"message": "Valitse näppäin painamalla sitä"
},
"disableSkipping": {
"message": "Poista Sponsorblock käytöstä"
},
"enableSkipping": {
"message": "Ota SponsorBlock käyttöön"
},
"yourWork": {
"message": "Sinun työsi",
"description": "Used to describe the section that will show you the statistics from your submissions."
},
"errorCode": {
"message": "Virhekoodi: "
},
"skip": {
"message": "Ohita"
},
"skipped": {
"message": "Ohitettu"
},
"disableAutoSkip": {
"message": "Poista automaattinen ohitus käytöstä"
},
"enableAutoSkip": {
"message": "Ota automaattinen ohitus käyttöön"
},
"youHaveSkipped": {
"message": "Olet ohittanut "
},
"youHaveSaved": {
"message": "Olet säästänyt itseltäsi "
},
"minLower": {
"message": "minuutti"
},
"minsLower": {
"message": "minuuttia"
},
"hourLower": {
"message": "tunti"
},
"hoursLower": {
"message": "tuntia"
},
"youHaveSavedTime": {
"message": "Olet säästänyt ihmisiltä"
},
"youHaveSavedTimeEnd": {
"message": " heidän elämästään."
},
"changeUserID": {
"message": "Tuo/vie sinun UserID:si"
},
"setUserID": {
"message": "Aseta UserID"
},
"supportInvidious": {
"message": "Tue Invidious:ta"
},
"addInvidiousInstance": {
"message": "Lisää Invidious-instanssi"
},
"add": {
"message": "Lisää"
},
"resetInvidiousInstance": {
"message": "Nollaa Invidious-instanssien lista"
},
"resetInvidiousInstanceAlert": {
"message": "Olet nollaamassa Invidious-instanssien listan"
},
"currentInstances": {
"message": "Nykyiset instanssit:"
},
"minDuration": {
"message": "Vähimmäiskesto (sekuntia):"
},
"showUploadButton": {
"message": "Näytä lähetä-painike"
},
"save": {
"message": "Tallenna"
},
"reset": {
"message": "Nollaa"
},
"mobileUpdateInfo": {
"message": "m.youtube.com-osoitetta tuetaan nyt"
},
"exportOptions": {
"message": "Vie/tuo kaikki asetukset"
},
"setOptions": {
"message": "Käytä asetuksia"
},
"confirmNoticeTitle": {
"message": "Lähetä kohta"
},
"submit": {
"message": "Jatka"
},
"cancel": {
"message": "Peruuta"
},
"delete": {
"message": "Poista"
},
"preview": {
"message": "Esikatsele"
},
"edit": {
"message": "Muokkaa"
},
"copyDebugInformationFailed": {
"message": "Kirjoittaminen leikepöydälle epäonnistui"
},
"theKey": {
"message": "Näppäin"
},
"keyAlreadyUsedByYouTube": {
"message": "on jo YouTuben käytössä. Valitse toinen näppäin."
},
"keyAlreadyUsed": {
"message": "on jo liitetty toiseen toimintoon. Valitse toinen näppäin."
},
"to": {
"message": "-",
"description": "Used between sponsor times. Example: 1:20 to 1:30"
},
"category_sponsor": {
"message": "Sponsori"
},
"category_intro": {
"message": "Intro-animaatio"
},
"category_outro": {
"message": "Loppukortit/-tekstit"
},
"category_interaction": {
"message": "Vuorovaikutusmuistutus (tilaaminen)"
},
"category_selfpromo": {
"message": "Itsepromootio ja fanituotteet"
},
"category_music_offtopic": {
"message": "Musiikki: muussa kuin Musiikki-osiossa"
},
"category_livestream_messages": {
"message": "Livestream: lahjoituksen/viestin lukeminen"
},
"disable": {
"message": "Poista käytöstä"
},
"manualSkip": {
"message": "Manuaalinen ohitus"
},
"enableTestingServer": {
"message": "Ota betatestauspalvelin käyttöön"
},
"bracketNow": {
"message": "(Nyt)"
},
"moreCategories": {
"message": "Lisää kategorioita"
},
"bracketEnd": {
"message": "(Päättyy)"
},
"hiddenDueToDownvote": {
"message": "piilotettu: miinusääniä"
},
"hiddenDueToDuration": {
"message": "piilotettu: liian lyhyt"
},
"channelDataNotFound": {
"message": "Kanavatunnusta ei ole vielä ladattu."
},
"downvoteDescription": {
"message": "Virheellinen/väärä aika"
},
"incorrectCategory": {
"message": "Väärä kategoria"
},
"multipleSegments": {
"message": "Useita kohtia"
}
}

View File

@@ -35,8 +35,8 @@
"Segments": { "Segments": {
"message": "segments commerciaux" "message": "segments commerciaux"
}, },
"noticeTitle": { "upvoteButtonInfo": {
"message": "Message commercial passé" "message": "Voter pour cette entrée"
}, },
"reportButtonTitle": { "reportButtonTitle": {
"message": "Signaler" "message": "Signaler"
@@ -71,6 +71,9 @@
"paused": { "paused": {
"message": "En pause" "message": "En pause"
}, },
"manualPaused": {
"message": "Timer arrêté"
},
"confirmMSG": { "confirmMSG": {
"message": "Pour modifier ou supprimer des soumissions, cliquez sur le bouton d'info ou ouvrez la fenêtre de l'extension en cliquant sur son icône dans le coin en haut à droite." "message": "Pour modifier ou supprimer des soumissions, cliquez sur le bouton d'info ou ouvrez la fenêtre de l'extension en cliquant sur son icône dans le coin en haut à droite."
}, },
@@ -84,7 +87,7 @@
"message": "Les messages commerciaux pour cette vidéo sont déjà dans notre base de donnée !" "message": "Les messages commerciaux pour cette vidéo sont déjà dans notre base de donnée !"
}, },
"sponsor404": { "sponsor404": {
"message": "Pas de sponsors trouvés" "message": "Pas de messages commerciaux trouvés"
}, },
"sponsorStart": { "sponsorStart": {
"message": "Début du message commercial" "message": "Début du message commercial"
@@ -144,7 +147,7 @@
"message": "Vous avez soumis jusqu'à présent" "message": "Vous avez soumis jusqu'à présent"
}, },
"savedPeopleFrom": { "savedPeopleFrom": {
"message": "Vous avez fait gagner aux autres " "message": "Vous avez permis aux autres de passer "
}, },
"viewLeaderboard": { "viewLeaderboard": {
"message": "Consulter le classement" "message": "Consulter le classement"
@@ -216,7 +219,7 @@
"message": "Activer le suivi des vues de segments commerciaux" "message": "Activer le suivi des vues de segments commerciaux"
}, },
"whatViewTracking": { "whatViewTracking": {
"message": "Cette fonctionnalité suit quels segments commerciaux vous avez sautés afin de calculer le bénéfice des soumissions des \nautres utilisateurs. Elle est également utilisée comme métrique, avec les haut-votes, afin de s'assurer que les spams \nsont ignorés. L'extension envoie un message au serveur à chauqe fois qu'un segment commercial est sauté. Avec un peu de chance, peu de personnes désactiveront cette fonctionnalité afin d'obtenir des nombres de vues exacts. :)" "message": "Cette fonctionnalité suit quels segments commerciaux vous avez sautés afin de calculer le bénéfice des soumissions des \nautres utilisateurs. Elle est également utilisée comme métrique, avec les haut-votes, afin de s'assurer que les spams \nsont ignorés. L'extension envoie un message au serveur à chauque fois qu'un segment commercial est sauté. Avec un peu de chance, peu de personnes désactiveront cette fonctionnalité afin d'obtenir des nombres de vues exacts. :)"
}, },
"showNotice": { "showNotice": {
"message": "Afficher la notification" "message": "Afficher la notification"
@@ -272,12 +275,12 @@
"errorCode": { "errorCode": {
"message": "Code d'erreur : " "message": "Code d'erreur : "
}, },
"noticeTitleNotSkipped": {
"message": "Passer le sponsor ?"
},
"skip": { "skip": {
"message": "Passer" "message": "Passer"
}, },
"skipped": {
"message": "Passé"
},
"disableAutoSkip": { "disableAutoSkip": {
"message": "Désactiver le passage automatique" "message": "Désactiver le passage automatique"
}, },
@@ -324,7 +327,7 @@
"message": "Vérifiez status.sponsor.ajay.app pour le status du serveur." "message": "Vérifiez status.sponsor.ajay.app pour le status du serveur."
}, },
"changeUserID": { "changeUserID": {
"message": "Importer/Exporter votre ID d'utilisateur" "message": "Importer/Exporter Votre ID d'Utilisateur"
}, },
"whatChangeUserID": { "whatChangeUserID": {
"message": "Gardez ça privé. C'est comme un mot de passe et ne devrait pas être partagé avec quiconque. Si quelqu'un l'obtiens, il peut vous usurper." "message": "Gardez ça privé. C'est comme un mot de passe et ne devrait pas être partagé avec quiconque. Si quelqu'un l'obtiens, il peut vous usurper."
@@ -350,6 +353,9 @@
"supportInvidious": { "supportInvidious": {
"message": "Soutenir Invidious" "message": "Soutenir Invidious"
}, },
"supportInvidiousDescription": {
"message": "Invidious (invidio.us) est un client tiers pour YouTube. Vous devez accepter des permissions supplémentaires pour activer son support. Cette fonctionnalité ne fonctionne pas en mode incognito sur Chrome et les autres variantes de Chromium."
},
"optionsInfo": { "optionsInfo": {
"message": "Activer Invidious, désactiver le passage automatique, masquer les boutons et plus encore." "message": "Activer Invidious, désactiver le passage automatique, masquer les boutons et plus encore."
}, },
@@ -374,12 +380,6 @@
"currentInstances": { "currentInstances": {
"message": "Instances actuelles:" "message": "Instances actuelles:"
}, },
"enableAutoUpvote": {
"message": "Vote automatique"
},
"whatAutoUpvote": {
"message": "Si cette option est activée, l'extension votera en faveur de tous les segments que vous visualiserez si vous ne les signalez pas. Si l'avis est désactivé, cela ne se produira pas."
},
"minDuration": { "minDuration": {
"message": "Durée minimale (en secondes):" "message": "Durée minimale (en secondes):"
}, },
@@ -392,11 +392,14 @@
"showUploadButton": { "showUploadButton": {
"message": "Afficher le bouton de téléchargement" "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": { "customServerAddress": {
"message": "Adresse du serveur SponsorBlock" "message": "Adresse du serveur SponsorBlock"
}, },
"customServerAddressDescription": { "customServerAddressDescription": {
"message": "L'adresse que SponsorBlock utilise pour passer des appels vers le serveur.\nSauf si vous avez votre propre instance de serveur, cela ne devrait pas être changé." "message": "L'adresse que SponsorBlock utilise pour faire des appels au serveur.\nSauf si vous avez votre propre instance de serveur, cela ne devrait pas être changé."
}, },
"save": { "save": {
"message": "Sauvegarder" "message": "Sauvegarder"
@@ -404,15 +407,42 @@
"reset": { "reset": {
"message": "Réinitialiser" "message": "Réinitialiser"
}, },
"customAddressError": {
"message": "Le format de l'adresse est incorrect. Assurez-vous qu'elle commence bien par http:// ou https:// et ne termine pas par un slash."
},
"areYouSureReset": {
"message": "Voulez-vous vraiment remettre à zéro ?"
},
"confirmPrivacy": {
"message": "Cette vidéo est non-listée. Appuyez sur annuler si vous ne voulez pas vérifier la présence de message commerciaux."
},
"unlistedCheck": { "unlistedCheck": {
"message": "Ignorer les vidéos non listées" "message": "Ignorer les vidéos non listées"
}, },
"whatUnlistedCheck": {
"message": "Cette fonctionnalité ralentie légèrement SponsorBlock. La recherche des message commerciaux nécessite l'envoie de l'ID de la vidéo au serveur. Si vous êtes préoccupé par l'envoi de l'ID des vidéos non listées sur Internet, activez cette option."
},
"mobileUpdateInfo": { "mobileUpdateInfo": {
"message": "m.youtube.com est maintenant pris en charge" "message": "m.youtube.com est maintenant pris en charge"
}, },
"exportOptions": { "exportOptions": {
"message": "Importer/Exporter toutes les options" "message": "Importer/Exporter toutes les options"
}, },
"whatExportOptions": {
"message": "C'est votre configuration complète au format JSON. Elle inclut votre identifiant utilisateur, gardez-la pour vous."
},
"setOptions": {
"message": "Définir les options"
},
"exportOptionsWarning": {
"message": "Attention : La modification des options est permanente et peut casser votre installation. Êtes-vous sûr de vouloir faire ça ? Sauvegardez les anciennes au cas où."
},
"incorrectlyFormattedOptions": {
"message": "Ce JSON n'est pas formaté correctement. Vos options n'ont pas été modifiées."
},
"confirmNoticeTitle": {
"message": "Soumettre le segment"
},
"submit": { "submit": {
"message": "Soumettre" "message": "Soumettre"
}, },
@@ -422,14 +452,29 @@
"delete": { "delete": {
"message": "Supprimer" "message": "Supprimer"
}, },
"preview": {
"message": "Aperçu"
},
"edit": { "edit": {
"message": "Éditer" "message": "Éditer"
}, },
"copyDebugInformation": {
"message": "Copier les informations de débogage dans le presse-papiers"
},
"copyDebugInformationFailed": {
"message": "Impossible de copier dans le presse-papiers"
},
"copyDebugInformationOptions": {
"message": "Copie les informations dans le presse-papiers pour les fournir aux développeurs lors d'un rapport de bug ou lorsqu'un développeur le demande. Les informations sensibles telles que l'ID d'utilisateur, les chaînes sur liste blanche ou l'adresse du serveur personnalisé ont été supprimées. Cependant, ça contient des informations telles que votre user-agent, votre navigateur, votre système d'exploitation et le numéro de version d'extension. "
},
"copyDebugInformationComplete": {
"message": "Les informations de débogage ont été copiées dans le presse-papiers. N'hésitez pas à supprimer toute information que vous ne préférez pas partager. Enregistrez-les dans un fichier texte ou collez-les dans le rapport de bug."
},
"theKey": { "theKey": {
"message": "La clé" "message": "La clé"
}, },
"keyAlreadyUsedByYouTube": { "keyAlreadyUsedByYouTube": {
"message": "est déjà utilisé par youtube. Veuillez sélectionner une autre clé." "message": "est déjà utilisé par YouTube. Veuillez sélectionner une autre clé."
}, },
"keyAlreadyUsed": { "keyAlreadyUsed": {
"message": "est lié à une autre action. Veuillez sélectionner une autre clé." "message": "est lié à une autre action. Veuillez sélectionner une autre clé."
@@ -438,13 +483,88 @@
"message": "à", "message": "à",
"description": "Used between sponsor times. Example: 1:20 to 1:30" "description": "Used between sponsor times. Example: 1:20 to 1:30"
}, },
"category_sponsor": {
"message": "Message commercial"
},
"category_intro": {
"message": "Générique d'introduction"
},
"category_outro": {
"message": "Générique de fin"
},
"category_interaction": {
"message": "Rappel d'interaction (abonnement)"
},
"category_selfpromo": {
"message": "Auto-promotion et produits dérivés"
},
"category_music_offtopic": {
"message": "Musique : Segment non-musicale"
},
"category_livestream_messages": {
"message": "Stream : lecture de dons et messages"
},
"disable": {
"message": "Désactiver"
},
"manualSkip": {
"message": "Passer manuellement"
},
"showOverlay": {
"message": "Afficher dans la barre de progression"
},
"enableTestingServer": { "enableTestingServer": {
"message": "Activer le serveur de test bêta" "message": "Activer le serveur de test bêta"
}, },
"whatEnableTestingServer": {
"message": "Vos soumissions et votes NE COMPTERONT PAS sur le serveur principal. Utilisez ceci uniquement pour faire des tests."
},
"testingServerWarning": {
"message": "AUCUNE SOUMISSION OU VOTE DE COMPTERA sur le serveur principal tant que vous serez connecté au serveur de test. Désactivez ceci quand vous voudrez réellement soumettre ou voter."
},
"bracketNow": { "bracketNow": {
"message": "(Maintenant)" "message": "(Maintenant)"
}, },
"moreCategories": { "moreCategories": {
"message": "Autres catégories" "message": "Autres catégories"
},
"bracketEnd": {
"message": "(Fin)"
},
"hiddenDueToDownvote": {
"message": "masqué : vote négatif"
},
"hiddenDueToDuration": {
"message": "masqué : trop court"
},
"channelDataNotFound": {
"message": "L'ID de la chaîne n'a pas encore été chargé."
},
"adblockerIssue": {
"message": "Il semble que quelque chose empêche SponsorBlock de récupérer les données de la vidéo. C'est probablement votre bloqueur de publicités. Veuillez consulter https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests"
},
"itCouldBeAdblockerIssue": {
"message": "Si ça se reproduit, c'est peut-être causé par votre bloqueur de publicités. Veuillez consulter https://github.com/ajayyy/SponsorBlock/wiki/Fix-Ad-Blocker-Blocking-SponsorBlock's-Requests"
},
"forceChannelCheck": {
"message": "Forcer la vérification de la chaîne avant de passer les message commerciaux"
},
"whatForceChannelCheck": {
"message": "Par défaut, les sponsors seront passés immédiatement, avant même que la chaîne soit connue. Des sponsors au début de la vidéo peuvent être passés sur des chaînes sur liste blanche. Activer cette option empêchera cela mais fera que les messages sponsorisés seront passés avec un petit délai, car la récupération du channelID peut prendre du temps. Ce délai peut être imperceptible si vous avez une connexion rapide."
},
"forceChannelCheckPopup": {
"message": "Envisagez d'activer la vérification forcée de la chaîne avant de passer les messages commerciaux"
},
"downvoteDescription": {
"message": "Segment de mauvaise qualité"
},
"incorrectCategory": {
"message": "Mauvaise catégorie"
},
"nonMusicCategoryOnMusic": {
"message": "Cette vidéo est classée dans les musiques. Êtes-vous sûr de vouloir soumettre des segments non-musicaux ? Vous devriez soumettre ce segment uniquement si la vidéo est de la musique. Veuillez lire les recommandations en cas de confusion."
},
"multipleSegments": {
"message": "Plusieurs segments"
} }
} }

View File

@@ -1 +1,22 @@
{} {
"Name": {
"message": "સ્પોન્સરબ્લોક",
"description": "Name of the extension."
},
"fullName": {
"message": "યુટ્યુબ માટે સ્પોન્સરબ્લોક - સ્પોન્સરશિપ છોડી દો",
"description": "Name of the extension."
},
"400": {
"message": "સર્વરે કહ્યું કે આ વિનંતી અમાન્ય છે"
},
"429": {
"message": "તમે આ એક વિડિઓ માટે ઘણી પ્રાયોજક વખત સબમિટ કરી છે, શું તમને ખાતરી છે કે આ ઘણા છે?"
},
"409": {
"message": "આ અગાઉ રજુ કરવામાં આવી છે"
},
"channelWhitelisted": {
"message": "ચેનલ વ્હાઇટલિસ્ટેડ!"
}
}

View File

@@ -31,15 +31,9 @@
"Segments": { "Segments": {
"message": "spezzoni sponsorizzati" "message": "spezzoni sponsorizzati"
}, },
"noticeTitle": {
"message": "Sponsorizzazione Saltata"
},
"reportButtonTitle": { "reportButtonTitle": {
"message": "Segnala" "message": "Segnala"
}, },
"reportButtonInfo": {
"message": "Segnala questo spezzone come non corretto."
},
"Dismiss": { "Dismiss": {
"message": "Chiudi" "message": "Chiudi"
}, },
@@ -100,9 +94,6 @@
"voteFail": { "voteFail": {
"message": "Hai già votato." "message": "Hai già votato."
}, },
"serverDown": {
"message": "Sembra che il server non funzioni. Contatta subito lo sviluppatore."
},
"connectionError": { "connectionError": {
"message": "Si è verificato un errore durante la connessione. Codice errore: " "message": "Si è verificato un errore durante la connessione. Codice errore: "
}, },

View File

@@ -1,4 +1,40 @@
{ {
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": {
"message": "SponsorBlock voor YouTube - Sla sponsorberichten over",
"description": "Name of the extension."
},
"Description": {
"message": "Sla sponsoring over op YouTube video's. Rapporteer sponsors van video's die je bekijkt om tijd van anderen te besparen.",
"description": "Description of the extension."
},
"Sponsor": {
"message": "sponsor"
},
"Sponsors": {
"message": "sponsoren"
},
"reportButtonTitle": {
"message": "Melden"
},
"Dismiss": {
"message": "Negeren"
},
"Loading": {
"message": "Bezig met laden..."
},
"Mins": {
"message": "Minuten"
},
"Secs": {
"message": "Seconden"
},
"Hide": {
"message": "Nooit weergeven"
},
"paused": { "paused": {
"message": "Gepauzeerd" "message": "Gepauzeerd"
}, },
@@ -26,9 +62,6 @@
"voteFail": { "voteFail": {
"message": "U hebt al eerder op deze manier gestemd." "message": "U hebt al eerder op deze manier gestemd."
}, },
"serverDown": {
"message": "Het lijkt erop dat de server niet draait. Contacteer de ontwikkelaar onmiddellijk."
},
"connectionError": { "connectionError": {
"message": "Er is een verbindingsfout opgetreden. Foutcode: " "message": "Er is een verbindingsfout opgetreden. Foutcode: "
}, },
@@ -41,7 +74,120 @@
"clearTimes": { "clearTimes": {
"message": "Sponsortijden wissen" "message": "Sponsortijden wissen"
}, },
"viewLeaderboard": {
"message": "Bekijk de ranglijst"
},
"here": { "here": {
"message": "hier" "message": "hier"
},
"clearTimesButton": {
"message": "Wis tijden"
},
"submitTimesButton": {
"message": "Dien tijden in"
},
"setUsername": {
"message": "Gebruikersnaam instellen"
},
"Options": {
"message": "Opties"
},
"showButtons": {
"message": "Toon knoppen op YouTube Player"
},
"hideButtons": {
"message": "Verberg knoppen op YouTube Player"
},
"showInfoButton": {
"message": "Toon info-knop op YouTube-speler"
},
"hideInfoButton": {
"message": "Verberg info-knop op YouTube Player"
},
"website": {
"message": "Website",
"description": "Used on Firefox Store Page"
},
"sourceCode": {
"message": "Broncode",
"description": "Used on Firefox Store Page"
},
"disableSkipping": {
"message": "SponsorBlock uitschakelen"
},
"enableSkipping": {
"message": "SponsorBlock inschakelen"
},
"502": {
"message": "De server lijkt overbelast te zijn. Probeer het over een paar seconden opnieuw."
},
"errorCode": {
"message": "Foutcode: "
},
"skip": {
"message": "Overslaan"
},
"skipped": {
"message": "Overgeslagen"
},
"disableAutoSkip": {
"message": "Automatisch overslaan uitschakelen"
},
"enableAutoSkip": {
"message": "Automatisch overslaan inschakelen"
},
"autoSkipDescription": {
"message": "Automatisch Overslaan zal sponsors voor u overslaan. Indien uitgeschakeld, zal een bericht vragen of u wilt overslaan."
},
"audioNotification": {
"message": "Audiomelding bij Overslaan"
},
"audioNotificationDescription": {
"message": "Audiomelding bij overslaan zal een geluid afspelen wanneer een sponsor wordt overgeslagen. Indien uitgeschakeld (of automatisch overslaan is uitgeschakeld) wordt er geen geluid afgespeeld."
},
"minLower": {
"message": "minuut"
},
"minsLower": {
"message": "minuten"
},
"hourLower": {
"message": "uur"
},
"hoursLower": {
"message": "uren"
},
"guildlinesSummary": {
"message": "- Zorg ervoor dat uw segment alleen betaalde promoties bevat, niets anders.\n- Zorg ervoor dat het overslaan van dit segment geen waardevolle inhoud overslaat\n- Als de hele video een sponsorsegment is, rapporteer dit alstublieft niet. Binnenkort komt er een systeem om volledige video's te rapporteren.\n- Rapporteer alstublieft geen disclaimers die partijdig kunnen zijn (als een recensievideo gesponsord is, sla deze niet over wanneer ze dit vermelden)."
},
"whatChangeUserID": {
"message": "Dit moet privé blijven. Beschouw dit als wachtwoord en mag met niemand worden gedeeld. Als iemand dit heeft, kunnen ze je imiteren."
},
"autoSkip": {
"message": "Automatisch overslaan"
},
"showSkipNotice": {
"message": "Toon melding na een sponsor is overgeslagen"
},
"minDuration": {
"message": "Minimale duur (seconden):"
},
"showUploadButton": {
"message": "Toon Upload Knop"
},
"customServerAddress": {
"message": "SponsorBlock Serveradres"
},
"save": {
"message": "Bewaren"
},
"mobileUpdateInfo": {
"message": "m.youtube.com wordt nu ondersteund"
},
"submit": {
"message": "Bevestigen"
},
"cancel": {
"message": "Annuleren"
} }
} }

View File

@@ -1,42 +1,43 @@
{ {
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": { "fullName": {
"message": "SponsorBlock na YouTube - Omiń reklamy sponsorów", "message": "SponsorBlock na YouTube - Omiń reklamy sponsorów",
"description": "Name of the extension." "description": "Name of the extension."
}, },
"Description": { "Description": {
"message": "Przewijaj reklamy sponsorów w filmach na YouTube. Zgłaszaj reklamy w nagraniach żeby nie marnować czasu innych.", "message": "Przewijaj reklamy sponsorów w filmach na YouTube. Zgłaszaj sponsorzy w filmach żeby oszczędzać czas innych.",
"description": "Description of the extension." "description": "Description of the extension."
}, },
"400": { "400": {
"message": "Serwer odpowiedział, że to zapytanie jest niepoprawne" "message": "Serwer odpowiedział, że to zapytanie jest niepoprawne"
}, },
"429": { "429": {
"message": "Zgłosiłeś bardzo dużo segmentów reklamowych dla tego jednego nagrania, jesteś pewien, że jest ich tak dużo?" "message": "Zgłosiłeś za dużo segmentów sponsora dla tego jednego filmu. Jesteś pewien, że jest ich tak dużo?"
}, },
"409": { "409": {
"message": "Treść została już wcześniej zgłoszona" "message": "To już zostało wcześniej zgłoszone"
}, },
"channelWhitelisted": { "channelWhitelisted": {
"message": "Kanał dodany do wyjątków!" "message": "Kanał dodany do wyjątków!"
}, },
"Sponsor": {
"message": "sponsor"
},
"Sponsors": { "Sponsors": {
"message": "sponsorzy" "message": "sponsorzy"
}, },
"Segment": { "Segment": {
"message": "segmet sponsorowany" "message": "segment sponsorowany"
}, },
"Segments": { "Segments": {
"message": "segmenty sponsorowane" "message": "segmenty sponsorowane"
}, },
"noticeTitle": {
"message": "Segment przewinięty"
},
"reportButtonTitle": { "reportButtonTitle": {
"message": "Zgłoś" "message": "Zgłoś"
}, },
"reportButtonInfo": {
"message": "Zgłoś ten segment reklamowy jako nieprawidłowy."
},
"Dismiss": { "Dismiss": {
"message": "Odrzuć" "message": "Odrzuć"
}, },
@@ -74,16 +75,16 @@
"message": "Wystąpił błąd podczas przesyłania twojego zgłoszenia, proszę spróbować ponownie później." "message": "Wystąpił błąd podczas przesyłania twojego zgłoszenia, proszę spróbować ponownie później."
}, },
"sponsorFound": { "sponsorFound": {
"message": "Segmenty reklamowe dla tego nagrania są już w bazie!" "message": "Segmenty sponsora dla tego nagrania są już w bazie!"
}, },
"sponsor404": { "sponsor404": {
"message": "Nie znaleziono segmentów reklamowych" "message": "Nie znaleziono segmentów sponsora"
}, },
"sponsorStart": { "sponsorStart": {
"message": "Reklama zaczyna się teraz" "message": "Sponsor zaczyna się teraz"
}, },
"sponsorEnd": { "sponsorEnd": {
"message": "Reklama kończy się teraz" "message": "Sponsor kończy się teraz"
}, },
"noVideoID": { "noVideoID": {
"message": "Nie znaleziono nagrania wideo w tej karcie. Jeśli wiesz, że to karta YouTube'a, zamknij to okienko i otwórz je ponownie. Jeśli to nie zadziała spróbuj przeładować stronę." "message": "Nie znaleziono nagrania wideo w tej karcie. Jeśli wiesz, że to karta YouTube'a, zamknij to okienko i otwórz je ponownie. Jeśli to nie zadziała spróbuj przeładować stronę."
@@ -97,26 +98,23 @@
"voteFail": { "voteFail": {
"message": "Już na to głosowałeś." "message": "Już na to głosowałeś."
}, },
"serverDown": {
"message": "Wygląda na to, że serwer nie działa. Skontaktuj się z dewloperem."
},
"connectionError": { "connectionError": {
"message": "Błąd z połączeniem. Kod błędu: " "message": "Błąd z połączeniem. Kod błędu: "
}, },
"wantToSubmit": { "wantToSubmit": {
"message": "Chcesz zgłosić segment sponsorowany dla nagrania z id" "message": "Chcesz zgłosić segment sponsorowany dla filmu z id"
}, },
"leftTimes": { "leftTimes": {
"message": "Wygląda na to, że masz nie wysłane segmenty reklamowe. Cofnij się do tej strony i zgłoś je (nie zostały usunięte)." "message": "Wygląda na to, że masz nie wysłane segmenty sponsora. Cofnij się do tej strony żeby je zgłosić (nie zostały usunięte)."
}, },
"clearTimes": { "clearTimes": {
"message": "Wyczyść segmenty reklamowe" "message": "Usuń segmenty reklamowe"
}, },
"openPopup": { "openPopup": {
"message": "Otwórz okienko SponsorBlock" "message": "Otwórz okienko SponsorBlock"
}, },
"SubmitTimes": { "SubmitTimes": {
"message": "Zgłoś segmenty reklamowe" "message": "Zgłoś segmenty sponsora"
}, },
"submitCheck": { "submitCheck": {
"message": "Jesteś pewien, że chcesz to zgłosić?" "message": "Jesteś pewien, że chcesz to zgłosić?"
@@ -128,10 +126,10 @@
"message": "Usuń kanał z listy wyjątków" "message": "Usuń kanał z listy wyjątków"
}, },
"voteOnTime": { "voteOnTime": {
"message": "Głosuj na segment reklamowy" "message": "Głosuj na segment sponsora"
}, },
"recordTimes": { "recordTimes": {
"message": "Nagraj czasy segmentów reklamowych" "message": "Nagraj czasy segmentów sponsorowanych"
}, },
"soFarUHSubmited": { "soFarUHSubmited": {
"message": "Jak na razie zgłosiłeś:" "message": "Jak na razie zgłosiłeś:"
@@ -265,9 +263,6 @@
"errorCode": { "errorCode": {
"message": "Kod błędu: " "message": "Kod błędu: "
}, },
"noticeTitleNotSkipped": {
"message": "Przewinąć reklamę?"
},
"skip": { "skip": {
"message": "Przewiń" "message": "Przewiń"
}, },
@@ -337,6 +332,9 @@
"supportInvidious": { "supportInvidious": {
"message": "Wesprzyj Invidious" "message": "Wesprzyj Invidious"
}, },
"supportInvidiousDescription": {
"message": "Invidious (invidio.us) to nieoficjalny klient YouTube'a. Aby włączyć dla niego wsparcie musisz przyznać dodatkowe uprawnienia. W Chrome'ie i innych przeglądarkach bazujących na Chromium, ta opcja nie działa w trybie incognito."
},
"optionsInfo": { "optionsInfo": {
"message": "Wesprzyj Invidious, wyłącz auto przewijanie, ukryj guziki i więcej." "message": "Wesprzyj Invidious, wyłącz auto przewijanie, ukryj guziki i więcej."
}, },
@@ -361,10 +359,16 @@
"currentInstances": { "currentInstances": {
"message": "Obecne instancje:" "message": "Obecne instancje:"
}, },
"enableAutoUpvote": { "minDuration": {
"message": "Auto potwierdzanie" "message": "Minimalny czas trwania (sekundy):"
}, },
"whatAutoUpvote": { "mobileUpdateInfo": {
"message": "To ustawienie sprawia, że wszystkie przewinięte przez ciebie a nie zgłoszone jako błąd segmenty reklamowe zostaną potwierdzone jako prawidłowe. Ta opcja nie działa jeśli okienko z informacją o przewinięciu jest ukryte." "message": "m.youtube.com jest teraz wspierany"
},
"exportOptions": {
"message": "Importuj/Eksportuj wszystkie ustawienia"
},
"copyDebugInformationComplete": {
"message": "Informacje do debugowania zostały skopiowane do schowka. Możesz usunąć dane, których nie chcesz udostępniać. Zapisz je w pliku tekstowym albo wklej do raportu podczas zgłaszania błędu."
} }
} }

View File

@@ -35,15 +35,9 @@
"Segments": { "Segments": {
"message": "segmentos de patrocinadores" "message": "segmentos de patrocinadores"
}, },
"noticeTitle": {
"message": "Patrocinador pulado"
},
"reportButtonTitle": { "reportButtonTitle": {
"message": "Reportar" "message": "Reportar"
}, },
"reportButtonInfo": {
"message": "Reportar essa subimissão como inválida."
},
"Dismiss": { "Dismiss": {
"message": "Ignorar" "message": "Ignorar"
}, },
@@ -104,9 +98,6 @@
"voteFail": { "voteFail": {
"message": "Você já votou antes." "message": "Você já votou antes."
}, },
"serverDown": {
"message": "Parece que o servidor caiu. Contate o desenvolvedor o quanto antes."
},
"connectionError": { "connectionError": {
"message": "Um erro de conexão aconteceu: Código: " "message": "Um erro de conexão aconteceu: Código: "
}, },
@@ -272,9 +263,6 @@
"errorCode": { "errorCode": {
"message": "Código de erro: " "message": "Código de erro: "
}, },
"noticeTitleNotSkipped": {
"message": "Pular patrocinador?"
},
"skip": { "skip": {
"message": "Pular" "message": "Pular"
}, },
@@ -377,12 +365,6 @@
"currentInstances": { "currentInstances": {
"message": "Instâncias Atuais:" "message": "Instâncias Atuais:"
}, },
"enableAutoUpvote": {
"message": "Upvote automático"
},
"whatAutoUpvote": {
"message": "Com isto habilitado, a extensão dará upvote em todas as submissões que você ver se você não reportar. Não funcionará se o aviso estiver desativado."
},
"minDuration": { "minDuration": {
"message": "Duração mínima (segundos):" "message": "Duração mínima (segundos):"
}, },
@@ -558,9 +540,6 @@
"forceChannelCheckPopup": { "forceChannelCheckPopup": {
"message": "Considere habilitar a verificação de canal forçada antes de pular os patrocinadores" "message": "Considere habilitar a verificação de canal forçada antes de pular os patrocinadores"
}, },
"downvoteDescription": {
"message": "Incorreto"
},
"incorrectCategory": { "incorrectCategory": {
"message": "Categoria errada" "message": "Categoria errada"
}, },

View File

@@ -31,15 +31,9 @@
"Segments": { "Segments": {
"message": "segmentos de patrocínio" "message": "segmentos de patrocínio"
}, },
"noticeTitle": {
"message": "Patrocínio saltado"
},
"reportButtonTitle": { "reportButtonTitle": {
"message": "Reportar" "message": "Reportar"
}, },
"reportButtonInfo": {
"message": "Reportar subimissão como inválida."
},
"Dismiss": { "Dismiss": {
"message": "Ignorar" "message": "Ignorar"
}, },
@@ -100,9 +94,6 @@
"voteFail": { "voteFail": {
"message": "Já votou antes." "message": "Já votou antes."
}, },
"serverDown": {
"message": "Parece que o servidor caiu. Contacte o desenvolvedor o quanto antes."
},
"connectionError": { "connectionError": {
"message": "Deu-se um erro de conecção: Código: " "message": "Deu-se um erro de conecção: Código: "
}, },

View File

@@ -1,4 +1,8 @@
{ {
"Name": {
"message": "SponsorBlock",
"description": "Name of the extension."
},
"fullName": { "fullName": {
"message": "SponsorBlock для YouTube - Пропускайте спонсорские вставки", "message": "SponsorBlock для YouTube - Пропускайте спонсорские вставки",
"description": "Name of the extension." "description": "Name of the extension."
@@ -31,15 +35,9 @@
"Segments": { "Segments": {
"message": "спонсорские вставки" "message": "спонсорские вставки"
}, },
"noticeTitle": {
"message": "Спонсор пропущен"
},
"reportButtonTitle": { "reportButtonTitle": {
"message": "Ошибка" "message": "Ошибка"
}, },
"reportButtonInfo": {
"message": "Сообщить, что информация об этом спонсорском сегменте ошибочна."
},
"Dismiss": { "Dismiss": {
"message": "Закрыть" "message": "Закрыть"
}, },
@@ -100,9 +98,6 @@
"voteFail": { "voteFail": {
"message": "Вы уже проголосовали таким образом раньше." "message": "Вы уже проголосовали таким образом раньше."
}, },
"serverDown": {
"message": "Кажется, сервер не работает. Свяжитесь с разработчиком."
},
"connectionError": { "connectionError": {
"message": "Ошибка соединения. Код ошибки: " "message": "Ошибка соединения. Код ошибки: "
}, },
@@ -112,6 +107,12 @@
"leftTimes": { "leftTimes": {
"message": "Вы ещё не отправили отчёты о некоторых спонсорских вставках. Хотите вернуться на эту страницу, чтобы отправить их (они не удаляются)." "message": "Вы ещё не отправили отчёты о некоторых спонсорских вставках. Хотите вернуться на эту страницу, чтобы отправить их (они не удаляются)."
}, },
"clearTimes": {
"message": "Удалить отмеченные сегменты"
},
"SubmitTimes": {
"message": "Отправить отмеченные сегменты"
},
"submitCheck": { "submitCheck": {
"message": "Вы уверены, что хотите отправить эту информацию?" "message": "Вы уверены, что хотите отправить эту информацию?"
}, },
@@ -259,12 +260,12 @@
"errorCode": { "errorCode": {
"message": "Код ошибки: " "message": "Код ошибки: "
}, },
"noticeTitleNotSkipped": {
"message": "Пропустить спонсорскую вставку?"
},
"skip": { "skip": {
"message": "Пропустить" "message": "Пропустить"
}, },
"skipped": {
"message": "Пропущено"
},
"disableAutoSkip": { "disableAutoSkip": {
"message": "Отключить автоматический пропуск" "message": "Отключить автоматический пропуск"
}, },
@@ -274,6 +275,12 @@
"autoSkipDescription": { "autoSkipDescription": {
"message": "Автоматический пропуск будет пропускать спонсорские вставки за Вас. Если выключено, будет показываться уведомление с предложением пропустить." "message": "Автоматический пропуск будет пропускать спонсорские вставки за Вас. Если выключено, будет показываться уведомление с предложением пропустить."
}, },
"audioNotification": {
"message": "Аудио уведомление при пропуске"
},
"audioNotificationDescription": {
"message": "Аудио уведомление о пропуске будет воспроизводиться каждый раз, когда спонсор пропущен. Если отключено (или автоматическое пропуск отключен), звук не будет воспроизводиться."
},
"youHaveSkipped": { "youHaveSkipped": {
"message": "Вы пропустили " "message": "Вы пропустили "
}, },
@@ -331,6 +338,9 @@
"supportInvidious": { "supportInvidious": {
"message": "Поддержка Invidious" "message": "Поддержка Invidious"
}, },
"supportInvidiousDescription": {
"message": "Invidious (invidio.us) — это неофициальный клиент для YouTube. Чтобы включить поддержку, Вам понадобится принять дополнительные разрешения. Эта функция НЕ работает в режиме \"инкогнито\" в Chrome и браузерах, основанных на Chromium."
},
"optionsInfo": { "optionsInfo": {
"message": "Включить поддержку Invidious, выключить автоматический пропуск, скрыть кнопки и не только." "message": "Включить поддержку Invidious, выключить автоматический пропуск, скрыть кнопки и не только."
}, },
@@ -355,12 +365,6 @@
"currentInstances": { "currentInstances": {
"message": "Текущие инстансы:" "message": "Текущие инстансы:"
}, },
"enableAutoUpvote": {
"message": "Автоматически голосовать \"за\""
},
"whatAutoUpvote": {
"message": "Если это включено, расширение будет голосовать \"за\" все предложения других пользователей, если Вы на них не пожалуетесь. Если уведомление отключено, это не будет происходить."
},
"minDuration": { "minDuration": {
"message": "Минимальная длительность (секунд):" "message": "Минимальная длительность (секунд):"
}, },
@@ -405,5 +409,23 @@
}, },
"mobileUpdateInfo": { "mobileUpdateInfo": {
"message": "m.youtube.com теперь поддерживается" "message": "m.youtube.com теперь поддерживается"
},
"exportOptions": {
"message": "Импорт/Экспорт всех настроек"
},
"whatExportOptions": {
"message": "Это вся конфигурация в формате JSON. Этот файл содержит Ваш идентификатор пользователя, поэтому не забудьте общаться с этим разумно."
},
"bracketNow": {
"message": "(Сейчас)"
},
"moreCategories": {
"message": "Прочие категории"
},
"bracketEnd": {
"message": "(Конец)"
},
"incorrectCategory": {
"message": "Неверная категория"
} }
} }

View File

@@ -9,9 +9,6 @@
"Sponsors": { "Sponsors": {
"message": "sponzori" "message": "sponzori"
}, },
"noticeTitle": {
"message": "Sponzor bol Preskočený"
},
"reportButtonTitle": { "reportButtonTitle": {
"message": "Nahlásiť" "message": "Nahlásiť"
}, },
@@ -54,9 +51,6 @@
"errorCode": { "errorCode": {
"message": "Kód chyby: " "message": "Kód chyby: "
}, },
"noticeTitleNotSkipped": {
"message": "Preskočiť Sponzor?"
},
"skip": { "skip": {
"message": "Preskočiť" "message": "Preskočiť"
}, },

View File

@@ -28,15 +28,9 @@
"Segments": { "Segments": {
"message": "sponsorsegment" "message": "sponsorsegment"
}, },
"noticeTitle": {
"message": "Sponsormeddelande undvikt"
},
"reportButtonTitle": { "reportButtonTitle": {
"message": "Rapportera" "message": "Rapportera"
}, },
"reportButtonInfo": {
"message": "Rapportera det här sponsorsegmentet som inkorrekt."
},
"Dismiss": { "Dismiss": {
"message": "Avfärda" "message": "Avfärda"
}, },
@@ -97,9 +91,6 @@
"voteFail": { "voteFail": {
"message": "Du har redan röstat." "message": "Du har redan röstat."
}, },
"serverDown": {
"message": "Det ser ut som att servern är nere. Kontakta utvecklaren med en gång."
},
"connectionError": { "connectionError": {
"message": "Anslutningsfel. Felkod: " "message": "Anslutningsfel. Felkod: "
}, },
@@ -262,9 +253,6 @@
"errorCode": { "errorCode": {
"message": "Felkod: " "message": "Felkod: "
}, },
"noticeTitleNotSkipped": {
"message": "Hoppa över sponsormeddelande?"
},
"skip": { "skip": {
"message": "Hoppa över" "message": "Hoppa över"
}, },
@@ -364,12 +352,6 @@
"currentInstances": { "currentInstances": {
"message": "Nuvarande Instanser:" "message": "Nuvarande Instanser:"
}, },
"enableAutoUpvote": {
"message": "Rösta Upp Automatiskt"
},
"whatAutoUpvote": {
"message": "Med detta aktiverat kommer tillägget att rösta upp alla rapporterade sponsormeddelanden om du inte rapporterar dem som felaktiga. Om notisen är avaktiverad så kommer det inte att ske."
},
"minDuration": { "minDuration": {
"message": "Minsta varaktighet (sekunder):" "message": "Minsta varaktighet (sekunder):"
}, },

View File

@@ -35,14 +35,14 @@
"Segments": { "Segments": {
"message": "sponsor bölümleri" "message": "sponsor bölümleri"
}, },
"noticeTitle": { "upvoteButtonInfo": {
"message": "Sponsor Geçildi" "message": "Bu öneriye oy ver"
}, },
"reportButtonTitle": { "reportButtonTitle": {
"message": "Raporla" "message": "Raporla"
}, },
"reportButtonInfo": { "reportButtonInfo": {
"message": "Bu sponsor bölümünü hatalı olarak rapor et." "message": "Bu öneriyi hatalı olarak bildir."
}, },
"Dismiss": { "Dismiss": {
"message": "Yoksay" "message": "Yoksay"
@@ -71,6 +71,9 @@
"paused": { "paused": {
"message": "Duraklatıldı" "message": "Duraklatıldı"
}, },
"manualPaused": {
"message": "Zamanlayıcı Durduruldu"
},
"confirmMSG": { "confirmMSG": {
"message": "Değerleri tek başına düzenlemek ve silmek için, bilgi butonuna basın veya sağ yukarıdaki eklenti simgesine tıklayarak eklenti menüsünü açın." "message": "Değerleri tek başına düzenlemek ve silmek için, bilgi butonuna basın veya sağ yukarıdaki eklenti simgesine tıklayarak eklenti menüsünü açın."
}, },
@@ -272,12 +275,12 @@
"errorCode": { "errorCode": {
"message": "Hata Kodu: " "message": "Hata Kodu: "
}, },
"noticeTitleNotSkipped": {
"message": "Sponsoru Atla?"
},
"skip": { "skip": {
"message": "Atla" "message": "Atla"
}, },
"skipped": {
"message": "Atlandı"
},
"disableAutoSkip": { "disableAutoSkip": {
"message": "Otomatik Atlamayı Devredışı Bırak" "message": "Otomatik Atlamayı Devredışı Bırak"
}, },
@@ -377,12 +380,6 @@
"currentInstances": { "currentInstances": {
"message": "Mevcut Oluşumlar:" "message": "Mevcut Oluşumlar:"
}, },
"enableAutoUpvote": {
"message": "Otomatik Oy Ver"
},
"whatAutoUpvote": {
"message": "Eğer bu ayar açıksa, eklenti eğer rapor etmediyseniz gördüğünüz tüm önerileri oylayacaktır. Eğer bildirim kapalıysa, bu gerçekleşmeyecektir."
},
"minDuration": { "minDuration": {
"message": "Minimum süre (saniye):" "message": "Minimum süre (saniye):"
}, },
@@ -559,12 +556,15 @@
"message": "Sponsorları Atlamadan Önce Kanal Kontrolünü Zorlamayı Gözden Geçir" "message": "Sponsorları Atlamadan Önce Kanal Kontrolünü Zorlamayı Gözden Geçir"
}, },
"downvoteDescription": { "downvoteDescription": {
"message": "Hatalı" "message": "Hatalı/Yanlış Zaman"
}, },
"incorrectCategory": { "incorrectCategory": {
"message": "Yanlış Kategori" "message": "Yanlış Kategori"
}, },
"nonMusicCategoryOnMusic": { "nonMusicCategoryOnMusic": {
"message": "Bu videonun kategorisi müzik olarak belirlenmiş. Müzik içermeyen bölümleri göndermek istediğinize emin misiniz? Eğer bu bir müzik videosu değilse, bu bölümleri göndermemelisiniz. Eğer ayırt edemiyorsanız, lütfen rehberi okuyunuz." "message": "Bu videonun kategorisi müzik olarak belirlenmiş. Müzik içermeyen bölümleri göndermek istediğinize emin misiniz? Eğer bu bir müzik videosu değilse, bu bölümleri göndermemelisiniz. Eğer ayırt edemiyorsanız, lütfen rehberi okuyunuz."
},
"multipleSegments": {
"message": "Birden Çok Bölüm"
} }
} }

View File

@@ -35,15 +35,9 @@
"Segments": { "Segments": {
"message": "спонсорські вставки" "message": "спонсорські вставки"
}, },
"noticeTitle": {
"message": "Спонсор пропущений"
},
"reportButtonTitle": { "reportButtonTitle": {
"message": "Помилка" "message": "Помилка"
}, },
"reportButtonInfo": {
"message": "Повідомити, що інформація про це спонсорський сегменті є хибною."
},
"Dismiss": { "Dismiss": {
"message": "Закрити" "message": "Закрити"
}, },
@@ -104,9 +98,6 @@
"voteFail": { "voteFail": {
"message": "Ви вже проголосували таким чином раніше." "message": "Ви вже проголосували таким чином раніше."
}, },
"serverDown": {
"message": "Здається, сервер не працює. Зв'яжіться з розробником."
},
"connectionError": { "connectionError": {
"message": "Помилка з'єднання. Код помилки: " "message": "Помилка з'єднання. Код помилки: "
}, },
@@ -116,6 +107,15 @@
"leftTimes": { "leftTimes": {
"message": "Ви ще не надіслали звіти про деякі спонсорські вставки. Хочете повернутися на цю сторінку, щоб надіслати їх (вони не видаляються)." "message": "Ви ще не надіслали звіти про деякі спонсорські вставки. Хочете повернутися на цю сторінку, щоб надіслати їх (вони не видаляються)."
}, },
"clearTimes": {
"message": "Видалити відмічені сегменти"
},
"openPopup": {
"message": "Відкрийте спливаюче вікно SponsorBlock"
},
"SubmitTimes": {
"message": "Надіслати відмічені сегменти"
},
"submitCheck": { "submitCheck": {
"message": "Ви впевнені, що хочете надіслати цю інформацію?" "message": "Ви впевнені, що хочете надіслати цю інформацію?"
}, },
@@ -263,12 +263,12 @@
"errorCode": { "errorCode": {
"message": "Код помилки: " "message": "Код помилки: "
}, },
"noticeTitleNotSkipped": {
"message": "Пропустити спонсорську вставку?"
},
"skip": { "skip": {
"message": "Пропустити" "message": "Пропустити"
}, },
"skipped": {
"message": "Пропущено"
},
"disableAutoSkip": { "disableAutoSkip": {
"message": "Вимкнути автоматичний пропуск" "message": "Вимкнути автоматичний пропуск"
}, },
@@ -278,6 +278,12 @@
"autoSkipDescription": { "autoSkipDescription": {
"message": "Автоматичний пропуск буде пропускати спонсорські вставки за Вас. Якщо вимкнено, буде показуватися повідомлення з пропозицією пропустити." "message": "Автоматичний пропуск буде пропускати спонсорські вставки за Вас. Якщо вимкнено, буде показуватися повідомлення з пропозицією пропустити."
}, },
"audioNotification": {
"message": "Аудіо сповіщення при пропуску"
},
"audioNotificationDescription": {
"message": "Аудіо сповіщення про пропуск буде відтворюватися кожен раз, коли спонсор пропущений. Якщо відключено (або автоматичне пропуск відключений), звук не буде відтворюватися."
},
"youHaveSkipped": { "youHaveSkipped": {
"message": "Ви пропустили " "message": "Ви пропустили "
}, },
@@ -335,6 +341,9 @@
"supportInvidious": { "supportInvidious": {
"message": "Підтримка Invidious" "message": "Підтримка Invidious"
}, },
"supportInvidiousDescription": {
"message": "Invidious (invidio.us) - це неофіційний клієнт для YouTube. Щоб увімкнути підтримку, Вам знадобиться прийняти додаткові дозволи. Ця функція НЕ працює в режимі \"інкогніто\" в Chrome і браузерах, заснованих на Chromium."
},
"optionsInfo": { "optionsInfo": {
"message": "Увімкнути підтримку Invidious, вимкнути автоматичний пропуск, приховати кнопки і не тільки." "message": "Увімкнути підтримку Invidious, вимкнути автоматичний пропуск, приховати кнопки і не тільки."
}, },
@@ -359,12 +368,6 @@
"currentInstances": { "currentInstances": {
"message": "Поточні інстанси:" "message": "Поточні інстанси:"
}, },
"enableAutoUpvote": {
"message": "Автоматично голосувати \"за\""
},
"whatAutoUpvote": {
"message": "Якщо це увімкнено, розширення буде голосувати \"за\" всі пропозиції інших користувачів, якщо Ви на них не поскаржитеся. Якщо повідомлення вимкнуто, це не буде відбуватися."
},
"minDuration": { "minDuration": {
"message": "Мінімальна тривалість (секунд):" "message": "Мінімальна тривалість (секунд):"
}, },
@@ -410,6 +413,15 @@
"mobileUpdateInfo": { "mobileUpdateInfo": {
"message": "m.youtube.com тепер підтримується" "message": "m.youtube.com тепер підтримується"
}, },
"exportOptions": {
"message": "Імпорт/Експорт всіх налаштувань"
},
"whatExportOptions": {
"message": "Це вся конфігурація в форматі JSON. Цей файл містить Ваш ідентифікатор користувача, тому не забудьте ділитися з цим розумно."
},
"setOptions": {
"message": "Встановити параметри"
},
"confirmNoticeTitle": { "confirmNoticeTitle": {
"message": "Надіслати сегмент" "message": "Надіслати сегмент"
}, },
@@ -428,6 +440,9 @@
"edit": { "edit": {
"message": "Редагувати" "message": "Редагувати"
}, },
"theKey": {
"message": "Ключ"
},
"category_sponsor": { "category_sponsor": {
"message": "Спонсор" "message": "Спонсор"
}, },
@@ -445,5 +460,8 @@
}, },
"bracketEnd": { "bracketEnd": {
"message": "(Кінець)" "message": "(Кінець)"
},
"incorrectCategory": {
"message": "Невірна категорія"
} }
} }

View File

@@ -35,14 +35,14 @@
"Segments": { "Segments": {
"message": "赞助商广告片段" "message": "赞助商广告片段"
}, },
"noticeTitle": { "upvoteButtonInfo": {
"message": "已跳过赞助商广告" "message": "为这个提交点赞"
}, },
"reportButtonTitle": { "reportButtonTitle": {
"message": "报告" "message": "报告"
}, },
"reportButtonInfo": { "reportButtonInfo": {
"message": "报告这个被提交的赞助商广告不正确。" "message": "报告此提交不正确。"
}, },
"Dismiss": { "Dismiss": {
"message": "忽略" "message": "忽略"
@@ -71,6 +71,9 @@
"paused": { "paused": {
"message": "已暂停" "message": "已暂停"
}, },
"manualPaused": {
"message": "计时器已停止"
},
"confirmMSG": { "confirmMSG": {
"message": "要编辑或删除个别值,请点击信息按钮或通过点击右上角的扩展图标打开扩展弹窗。" "message": "要编辑或删除个别值,请点击信息按钮或通过点击右上角的扩展图标打开扩展弹窗。"
}, },
@@ -272,12 +275,12 @@
"errorCode": { "errorCode": {
"message": "错误代码: " "message": "错误代码: "
}, },
"noticeTitleNotSkipped": {
"message": "跳过赞助商广告?"
},
"skip": { "skip": {
"message": "跳过" "message": "跳过"
}, },
"skipped": {
"message": "跳过"
},
"disableAutoSkip": { "disableAutoSkip": {
"message": "禁用自动跳过" "message": "禁用自动跳过"
}, },
@@ -377,12 +380,6 @@
"currentInstances": { "currentInstances": {
"message": "当前实例:" "message": "当前实例:"
}, },
"enableAutoUpvote": {
"message": "自动点赞"
},
"whatAutoUpvote": {
"message": "启用此选项后,扩展将会为所有您观看过的提交点赞,如果您没有报告它们的话。如果通知被禁用,那就不会出现。"
},
"minDuration": { "minDuration": {
"message": "最小持续时间(秒)" "message": "最小持续时间(秒)"
}, },
@@ -490,7 +487,10 @@
"message": "赞助商广告" "message": "赞助商广告"
}, },
"category_intro": { "category_intro": {
"message": "介绍动画" "message": "开头动画"
},
"category_outro": {
"message": "结束画面/结尾职员表"
}, },
"category_interaction": { "category_interaction": {
"message": "互动提醒(订阅)" "message": "互动提醒(订阅)"
@@ -556,12 +556,15 @@
"message": "请考虑启用跳过赞助商广告前强制进行频道检查" "message": "请考虑启用跳过赞助商广告前强制进行频道检查"
}, },
"downvoteDescription": { "downvoteDescription": {
"message": "不正确" "message": "不正确/错误的时间"
}, },
"incorrectCategory": { "incorrectCategory": {
"message": "错误的类别" "message": "错误的类别"
}, },
"nonMusicCategoryOnMusic": { "nonMusicCategoryOnMusic": {
"message": "此视频被归类为音乐。您确定要提交带有非音乐类别的片段吗?除非此视频实际上不是音乐,否则您不应提交此片段。如果您感到困惑,请阅读指南。" "message": "此视频被归类为音乐。您确定要提交带有非音乐类别的片段吗?除非此视频实际上不是音乐,否则您不应提交此片段。如果您感到困惑,请阅读指南。"
},
"multipleSegments": {
"message": "多个片段"
} }
} }

View File

@@ -1,4 +1,4 @@
import * as Types from "./types"; import * as CompileConfig from "../config.json";
import Config from "./config"; import Config from "./config";
// Make the config public for debugging purposes // Make the config public for debugging purposes
@@ -30,7 +30,17 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
switch(request.message) { switch(request.message) {
case "openConfig": case "openConfig":
chrome.runtime.openOptionsPage(); chrome.runtime.openOptionsPage();
return return;
case "sendRequest":
sendRequestToCustomServer(request.type, request.url, request.data).then(async (response) => {
callback({
responseText: await response.text(),
status: response.status,
ok: response.ok
});
});
return true;
case "addSponsorTime": case "addSponsorTime":
addSponsorTime(request.time, request.videoID, callback); addSponsorTime(request.time, request.videoID, callback);
@@ -47,7 +57,7 @@ chrome.runtime.onMessage.addListener(function (request, sender, callback) {
//this allows the callback to be called later //this allows the callback to be called later
return true; return true;
case "submitVote": case "submitVote":
submitVote(request.type, request.UUID, request.category, callback); submitVote(request.type, request.UUID, request.category).then(callback);
//this allows the callback to be called later //this allows the callback to be called later
return true; return true;
@@ -147,7 +157,7 @@ function addSponsorTime(time, videoID, callback) {
}); });
} }
function submitVote(type, UUID, category, callback) { async function submitVote(type: number, UUID: string, category: string) {
let userID = Config.config.userID; let userID = Config.config.userID;
if (userID == undefined || userID === "undefined") { if (userID == undefined || userID === "undefined") {
@@ -159,24 +169,60 @@ function submitVote(type, UUID, category, callback) {
let typeSection = (type !== undefined) ? "&type=" + type : "&category=" + category; let typeSection = (type !== undefined) ? "&type=" + type : "&category=" + category;
//publish this vote //publish this vote
utils.sendRequestToServer("POST", "/api/voteOnSponsorTime?UUID=" + UUID + "&userID=" + userID + typeSection, function(xmlhttp, error) { let response = await asyncRequestToServer("POST", "/api/voteOnSponsorTime?UUID=" + UUID + "&userID=" + userID + typeSection);
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
callback({ if (response.ok) {
return {
successType: 1 successType: 1
}); };
} else if (xmlhttp.readyState == 4 && xmlhttp.status == 405) { } else if (response.status == 405) {
//duplicate vote //duplicate vote
callback({ return {
successType: 0, successType: 0,
statusCode: xmlhttp.status statusCode: response.status
}); };
} else if (error) { } else {
//error while connect //error while connect
callback({ return {
successType: -1, successType: -1,
statusCode: xmlhttp.status statusCode: response.status
}); };
}
}
async function asyncRequestToServer(type: string, address: string, data = {}) {
let serverAddress = Config.config.testingServer ? CompileConfig.testingServerAddress : Config.config.serverAddress;
return await (sendRequestToCustomServer(type, serverAddress + address, data));
}
/**
* Sends a request to the specified url
*
* @param type The request type "GET", "POST", etc.
* @param address The address to add to the SponsorBlock server address
* @param callback
*/
async function sendRequestToCustomServer(type: string, url: string, data = {}) {
// If GET, convert JSON to parameters
if (type.toLowerCase() === "get") {
for (const key in data) {
let seperator = url.includes("?") ? "&" : "?";
let value = (typeof(data[key]) === "string") ? data[key]: JSON.stringify(data[key]);
url += seperator + key + "=" + value;
} }
data = null;
}
const response = await fetch(url, {
method: type,
headers: {
'Content-Type': 'application/json'
},
redirect: 'follow',
body: data ? JSON.stringify(data) : null
}); });
return response;
} }

View File

@@ -268,7 +268,7 @@ async function migrateOldFormats() {
let response = await utils.asyncRequestToCustomServer("GET", "https://sponsor.ajay.app/invidious/api/v1/channels/" + item.split("/")[2] + "?fields=authorId"); let response = await utils.asyncRequestToCustomServer("GET", "https://sponsor.ajay.app/invidious/api/v1/channels/" + item.split("/")[2] + "?fields=authorId");
if (response.ok) { if (response.ok) {
newChannelList.push((await response.json()).authorId); newChannelList.push((JSON.parse(response.responseText)).authorId);
} else { } else {
// Add it at the beginning so it gets converted later // Add it at the beginning so it gets converted later
newChannelList.unshift(item); newChannelList.unshift(item);

View File

@@ -1,6 +1,6 @@
import Config from "./config"; import Config from "./config";
import { SponsorTime, CategorySkipOption, CategorySelection, VideoID, SponsorHideType } from "./types"; import { SponsorTime, CategorySkipOption, CategorySelection, VideoID, SponsorHideType, FetchResponse } from "./types";
import { ContentContainer } from "./types"; import { ContentContainer } from "./types";
import Utils from "./utils"; import Utils from "./utils";
@@ -64,10 +64,6 @@ var channelWhitelisted = false;
// create preview bar // create preview bar
var previewBar: PreviewBar = null; var previewBar: PreviewBar = null;
// When not null, a sponsor is currently being previewed and auto skip should be enabled.
// This is set to a timeout function when that happens that will reset it after 3 seconds.
var previewResetter: NodeJS.Timeout = null;
//the player controls on the YouTube player //the player controls on the YouTube player
var controls = null; var controls = null;
@@ -164,14 +160,7 @@ function messageListener(request: any, sender: any, sendResponse: (response: any
video.play(); video.play();
} }
// Start preview resetter return;
if (previewResetter !== null){
clearTimeout(previewResetter);
}
previewResetter = setTimeout(() => previewResetter = null, 4000);
return
case "getCurrentTime": case "getCurrentTime":
sendResponse({ sendResponse({
currentTime: getRealCurrentTime() currentTime: getRealCurrentTime()
@@ -628,9 +617,9 @@ function sponsorsLookup(id: string) {
utils.asyncRequestToServer('GET', "/api/skipSegments", { utils.asyncRequestToServer('GET', "/api/skipSegments", {
videoID: id, videoID: id,
categories categories
}).then(async (response: Response) => { }).then(async (response: FetchResponse) => {
if (response.status === 200) { if (response.ok) {
let recievedSegments: SponsorTime[] = await response.json(); let recievedSegments: SponsorTime[] = JSON.parse(response.responseText);
if (!recievedSegments.length) { if (!recievedSegments.length) {
console.error("[SponsorBlock] Server returned malformed response: " + JSON.stringify(recievedSegments)); console.error("[SponsorBlock] Server returned malformed response: " + JSON.stringify(recievedSegments));
return; return;
@@ -866,7 +855,7 @@ function getNextSkipIndex(currentTime: number, includeIntersectingSegments: bool
let endTimeIndex = getLatestEndTimeIndex(sponsorTimes, minSponsorTimeIndex); let endTimeIndex = getLatestEndTimeIndex(sponsorTimes, minSponsorTimeIndex);
let previewSponsorStartTimes = getStartTimes(sponsorTimesSubmitting, includeIntersectingSegments); let previewSponsorStartTimes = getStartTimes(sponsorTimesSubmitting, includeIntersectingSegments);
let previewSponsorStartTimesAfterCurrentTime = getStartTimes(sponsorTimesSubmitting, includeIntersectingSegments, currentTime, true, false); let previewSponsorStartTimesAfterCurrentTime = getStartTimes(sponsorTimesSubmitting, includeIntersectingSegments, currentTime, false, false);
let minPreviewSponsorTimeIndex = previewSponsorStartTimes.indexOf(Math.min(...previewSponsorStartTimesAfterCurrentTime)); let minPreviewSponsorTimeIndex = previewSponsorStartTimes.indexOf(Math.min(...previewSponsorStartTimesAfterCurrentTime));
let previewEndTimeIndex = getLatestEndTimeIndex(sponsorTimesSubmitting, minPreviewSponsorTimeIndex); let previewEndTimeIndex = getLatestEndTimeIndex(sponsorTimesSubmitting, minPreviewSponsorTimeIndex);
@@ -970,13 +959,6 @@ function previewTime(time: number) {
if (video.paused){ if (video.paused){
video.play(); video.play();
} }
// Start preview resetter
if (previewResetter !== null){
clearTimeout(previewResetter);
}
previewResetter = setTimeout(() => previewResetter = null, 4000);
} }
//skip from the start time to the end time for a certain index sponsor time //skip from the start time to the end time for a certain index sponsor time
@@ -984,7 +966,7 @@ function skipToTime(v: HTMLVideoElement, skipTime: number[], skippingSegments: S
// There will only be one submission if it is manual skip // There will only be one submission if it is manual skip
let autoSkip: boolean = utils.getCategorySelection(skippingSegments[0].category).option === CategorySkipOption.AutoSkip; let autoSkip: boolean = utils.getCategorySelection(skippingSegments[0].category).option === CategorySkipOption.AutoSkip;
if (autoSkip || previewResetter !== null) { if (autoSkip || sponsorTimesSubmitting.includes(skippingSegments[0])) {
v.currentTime = skipTime[1]; v.currentTime = skipTime[1];
} }
@@ -993,6 +975,7 @@ function skipToTime(v: HTMLVideoElement, skipTime: number[], skippingSegments: S
if (!Config.config.dontShowNotice || !autoSkip) { if (!Config.config.dontShowNotice || !autoSkip) {
let skipNotice = new SkipNotice(skippingSegments, autoSkip, skipNoticeContentContainer); let skipNotice = new SkipNotice(skippingSegments, autoSkip, skipNoticeContentContainer);
} }
}
//send telemetry that a this sponsor was skipped //send telemetry that a this sponsor was skipped
if (Config.config.trackViewCount && autoSkip) { if (Config.config.trackViewCount && autoSkip) {
@@ -1002,14 +985,14 @@ function skipToTime(v: HTMLVideoElement, skipTime: number[], skippingSegments: S
for (const segment of skippingSegments) { for (const segment of skippingSegments) {
let index = sponsorTimes.indexOf(segment); let index = sponsorTimes.indexOf(segment);
if (index !== -1 && !sponsorSkipped[index]) { if (index !== -1 && !sponsorSkipped[index]) {
utils.sendRequestToServer("POST", "/api/viewedVideoSponsorTime?UUID=" + segment.UUID); utils.asyncRequestToServer("POST", "/api/viewedVideoSponsorTime?UUID=" + segment.UUID);
sponsorSkipped[index] = true; sponsorSkipped[index] = true;
} else if (sponsorSkipped[index]) { } else if (sponsorSkipped[index]) {
alreadySkipped = true; alreadySkipped = true;
} }
if (index !== -1) isPreviewSegment = true; if (index === -1) isPreviewSegment = true;
} }
// Count this as a skip // Count this as a skip
@@ -1018,7 +1001,6 @@ function skipToTime(v: HTMLVideoElement, skipTime: number[], skippingSegments: S
Config.config.skipCount = Config.config.skipCount + 1; Config.config.skipCount = Config.config.skipCount + 1;
} }
} }
}
} }
function unskipSponsorTime(segment: SponsorTime) { function unskipSponsorTime(segment: SponsorTime) {
@@ -1395,10 +1377,6 @@ function vote(type: number, UUID: string, category?: string, skipNotice?: SkipNo
if (response.successType == 1 || (response.successType == -1 && response.statusCode == 429)) { if (response.successType == 1 || (response.successType == -1 && response.statusCode == 429)) {
//success (treat rate limits as a success) //success (treat rate limits as a success)
skipNotice.afterVote.bind(skipNotice)(utils.getSponsorTimeFromUUID(sponsorTimes, UUID), type, category); skipNotice.afterVote.bind(skipNotice)(utils.getSponsorTimeFromUUID(sponsorTimes, UUID), type, category);
} else if (response.successType == 0) {
//failure: duplicate vote
skipNotice.setNoticeInfoMessage.bind(skipNotice)(chrome.i18n.getMessage("voteFail"))
skipNotice.resetVoteButtonInfo.bind(skipNotice)();
} else if (response.successType == -1) { } else if (response.successType == -1) {
skipNotice.setNoticeInfoMessage.bind(skipNotice)(utils.getErrorMessage(response.statusCode)) skipNotice.setNoticeInfoMessage.bind(skipNotice)(utils.getErrorMessage(response.statusCode))
skipNotice.resetVoteButtonInfo.bind(skipNotice)(); skipNotice.resetVoteButtonInfo.bind(skipNotice)();
@@ -1525,7 +1503,7 @@ async function sendSubmitMessage(){
document.getElementById("submitButton").style.animation = "unset"; document.getElementById("submitButton").style.animation = "unset";
(<HTMLImageElement> document.getElementById("submitImage")).src = chrome.extension.getURL("icons/PlayerUploadFailedIconSponsorBlocker256px.png"); (<HTMLImageElement> document.getElementById("submitImage")).src = chrome.extension.getURL("icons/PlayerUploadFailedIconSponsorBlocker256px.png");
alert(utils.getErrorMessage(response.status) + "\n\n" + (await response.text())); alert(utils.getErrorMessage(response.status) + "\n\n" + (response.responseText));
} }
} }

View File

@@ -168,9 +168,9 @@ async function runThePopup(messageListener?: MessageListener) {
if (userID != undefined) { if (userID != undefined) {
//there are probably some views on these submissions then //there are probably some views on these submissions then
//get the amount of views from the sponsors submitted //get the amount of views from the sponsors submitted
utils.sendRequestToServer("GET", "/api/getViewsForUser?userID=" + userID, function(xmlhttp) { utils.sendRequestToServer("GET", "/api/getViewsForUser?userID=" + userID, function(response) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { if (response.status == 200) {
let viewCount = JSON.parse(xmlhttp.responseText).viewCount; let viewCount = JSON.parse(response.responseText).viewCount;
if (viewCount != 0) { if (viewCount != 0) {
if (viewCount > 1) { if (viewCount > 1) {
PageElements.sponsorTimesViewsDisplayEndWord.innerText = chrome.i18n.getMessage("Segments"); PageElements.sponsorTimesViewsDisplayEndWord.innerText = chrome.i18n.getMessage("Segments");
@@ -185,9 +185,9 @@ async function runThePopup(messageListener?: MessageListener) {
}); });
//get this time in minutes //get this time in minutes
utils.sendRequestToServer("GET", "/api/getSavedTimeForUser?userID=" + userID, function(xmlhttp) { utils.sendRequestToServer("GET", "/api/getSavedTimeForUser?userID=" + userID, function(response) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { if (response.status == 200) {
let minutesSaved = JSON.parse(xmlhttp.responseText).timeSaved; let minutesSaved = JSON.parse(response.responseText).timeSaved;
if (minutesSaved != 0) { if (minutesSaved != 0) {
if (minutesSaved != 1) { if (minutesSaved != 1) {
PageElements.sponsorTimesOthersTimeSavedEndWord.innerText = chrome.i18n.getMessage("minsLower"); PageElements.sponsorTimesOthersTimeSavedEndWord.innerText = chrome.i18n.getMessage("minsLower");
@@ -797,9 +797,9 @@ async function runThePopup(messageListener?: MessageListener) {
//make the options username setting option visible //make the options username setting option visible
function setUsernameButton() { function setUsernameButton() {
//get username from the server //get username from the server
utils.sendRequestToServer("GET", "/api/getUsername?userID=" + Config.config.userID, function (xmlhttp, error) { utils.sendRequestToServer("GET", "/api/getUsername?userID=" + Config.config.userID, function (response) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { if (response.status == 200) {
PageElements.usernameInput.value = JSON.parse(xmlhttp.responseText).userName; PageElements.usernameInput.value = JSON.parse(response.responseText).userName;
PageElements.submitUsername.style.display = "unset"; PageElements.submitUsername.style.display = "unset";
PageElements.usernameInput.style.display = "unset"; PageElements.usernameInput.style.display = "unset";
@@ -808,13 +808,13 @@ async function runThePopup(messageListener?: MessageListener) {
PageElements.setUsername.style.display = "unset"; PageElements.setUsername.style.display = "unset";
PageElements PageElements
PageElements.setUsernameStatusContainer.style.display = "none"; PageElements.setUsernameStatusContainer.style.display = "none";
} else if (xmlhttp.readyState == 4) { } else {
PageElements.setUsername.style.display = "unset"; PageElements.setUsername.style.display = "unset";
PageElements.submitUsername.style.display = "none"; PageElements.submitUsername.style.display = "none";
PageElements.usernameInput.style.display = "none"; PageElements.usernameInput.style.display = "none";
PageElements.setUsernameStatusContainer.style.display = "unset"; PageElements.setUsernameStatusContainer.style.display = "unset";
PageElements.setUsernameStatus.innerText = utils.getErrorMessage(xmlhttp.status); PageElements.setUsernameStatus.innerText = utils.getErrorMessage(response.status);
} }
}); });
} }
@@ -826,15 +826,15 @@ async function runThePopup(messageListener?: MessageListener) {
PageElements.setUsernameStatus.innerText = "Loading..."; PageElements.setUsernameStatus.innerText = "Loading...";
//get the userID //get the userID
utils.sendRequestToServer("POST", "/api/setUsername?userID=" + Config.config.userID + "&username=" + PageElements.usernameInput.value, function (xmlhttp, error) { utils.sendRequestToServer("POST", "/api/setUsername?userID=" + Config.config.userID + "&username=" + PageElements.usernameInput.value, function (response) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { if (response.status == 200) {
//submitted //submitted
PageElements.submitUsername.style.display = "none"; PageElements.submitUsername.style.display = "none";
PageElements.usernameInput.style.display = "none"; PageElements.usernameInput.style.display = "none";
PageElements.setUsernameStatus.innerText = chrome.i18n.getMessage("success"); PageElements.setUsernameStatus.innerText = chrome.i18n.getMessage("success");
} else if (xmlhttp.readyState == 4) { } else {
PageElements.setUsernameStatus.innerText = utils.getErrorMessage(xmlhttp.status); PageElements.setUsernameStatus.innerText = utils.getErrorMessage(response.status);
} }
}); });
@@ -883,9 +883,6 @@ async function runThePopup(messageListener?: MessageListener) {
if (response.successType == 1 || (response.successType == -1 && response.statusCode == 429)) { if (response.successType == 1 || (response.successType == -1 && response.statusCode == 429)) {
//success (treat rate limits as a success) //success (treat rate limits as a success)
addVoteMessage(chrome.i18n.getMessage("voted"), UUID) addVoteMessage(chrome.i18n.getMessage("voted"), UUID)
} else if (response.successType == 0) {
//failure: duplicate vote
addVoteMessage(chrome.i18n.getMessage("voteFail"), UUID)
} else if (response.successType == -1) { } else if (response.successType == -1) {
addVoteMessage(utils.getErrorMessage(response.statusCode), UUID) addVoteMessage(utils.getErrorMessage(response.statusCode), UUID)
} }

View File

@@ -22,6 +22,12 @@ interface ContentContainer {
} }
} }
interface FetchResponse {
responseText: string,
status: number,
ok: boolean
}
interface VideoDurationResponse { interface VideoDurationResponse {
duration: number; duration: number;
} }
@@ -55,6 +61,7 @@ interface SponsorTime {
type VideoID = string; type VideoID = string;
export { export {
FetchResponse,
VideoDurationResponse, VideoDurationResponse,
ContentContainer, ContentContainer,
CategorySelection, CategorySelection,

View File

@@ -1,5 +1,5 @@
import Config from "./config"; import Config from "./config";
import { CategorySelection, SponsorTime } from "./types"; import { CategorySelection, SponsorTime, FetchResponse } from "./types";
import * as CompileConfig from "../config.json"; import * as CompileConfig from "../config.json";
@@ -276,29 +276,18 @@ class Utils {
* @param address The address to add to the SponsorBlock server address * @param address The address to add to the SponsorBlock server address
* @param callback * @param callback
*/ */
async asyncRequestToCustomServer(type: string, url: string, data = {}) { async asyncRequestToCustomServer(type: string, url: string, data = {}): Promise<FetchResponse> {
return new Promise((resolve) => {
// If GET, convert JSON to parameters // Ask the background script to do the work
if (type.toLowerCase() === "get") { chrome.runtime.sendMessage({
for (const key in data) { message: "sendRequest",
let seperator = url.includes("?") ? "&" : "?"; type,
let value = (typeof(data[key]) === "string") ? data[key]: JSON.stringify(data[key]); url,
url += seperator + key + "=" + value; data
} }, (response) => {
resolve(response);
data = null;
}
const response = await fetch(url, {
method: type,
headers: {
'Content-Type': 'application/json'
},
redirect: 'follow',
body: data ? JSON.stringify(data) : null
}); });
})
return response;
} }
/** /**
@@ -308,7 +297,7 @@ class Utils {
* @param address The address to add to the SponsorBlock server address * @param address The address to add to the SponsorBlock server address
* @param callback * @param callback
*/ */
async asyncRequestToServer(type: string, address: string, data = {}) { async asyncRequestToServer(type: string, address: string, data = {}): Promise<FetchResponse> {
let serverAddress = Config.config.testingServer ? CompileConfig.testingServerAddress : Config.config.serverAddress; let serverAddress = Config.config.testingServer ? CompileConfig.testingServerAddress : Config.config.serverAddress;
return await (this.asyncRequestToCustomServer(type, serverAddress + address, data)); return await (this.asyncRequestToCustomServer(type, serverAddress + address, data));
@@ -321,25 +310,17 @@ class Utils {
* @param address The address to add to the SponsorBlock server address * @param address The address to add to the SponsorBlock server address
* @param callback * @param callback
*/ */
sendRequestToServer(type: string, address: string, callback?: (xmlhttp: XMLHttpRequest, err: boolean) => any) { sendRequestToServer(type: string, address: string, callback?: (response: FetchResponse) => void) {
let xmlhttp = new XMLHttpRequest();
let serverAddress = Config.config.testingServer ? CompileConfig.testingServerAddress : Config.config.serverAddress; let serverAddress = Config.config.testingServer ? CompileConfig.testingServerAddress : Config.config.serverAddress;
xmlhttp.open(type, serverAddress + address, true); // Ask the background script to do the work
chrome.runtime.sendMessage({
if (callback != undefined) { message: "sendRequest",
xmlhttp.onreadystatechange = function () { type,
callback(xmlhttp, false); url: serverAddress + address
}; }, (response) => {
callback(response);
xmlhttp.onerror = function(ev) { });
callback(xmlhttp, true);
};
}
//submit this request
xmlhttp.send();
} }
getFormattedMinutes(seconds: number) { getFormattedMinutes(seconds: number) {