// ==UserScript==
// @name Crunchyroll Auto Skip with Settings
// @name:fr Crunchyroll Saut Automatique avec Paramètres
// @name:ar تخطي تلقائي لـ Crunchyroll مع الإعدادات
// @name:ca Crunchyroll Auto Skip amb Configuracions
// @name:zh-CN Crunchyroll 自动跳过设置
// @name:de Crunchyroll Automatisches Überspringen mit Einstellungen
// @name:hi क्रंचीरोल ऑटो स्किप सेटिंग्स के साथ
// @name:id Crunchyroll Lewati Otomatis dengan Pengaturan
// @name:it Crunchyroll Salta Automaticamente con Impostazioni
// @name:ja Crunchyroll 自動スキップ設定付き
// @name:ms Crunchyroll Langkau Auto dengan Tetapan
// @name:pl Crunchyroll Automatyczne Pomijanie z Ustawieniami
// @name:pt-PT Crunchyroll Pular Automático com Configurações
// @name:ru Crunchyroll Автоматическое Пропускание с Настройками
// @name:es Crunchyroll Salto Automático con Configuraciones
// @name:ta க்ரஞ்சிரோல் தானியங்கி தவிர்க்கும் அமைப்புகளுடன்
// @name:te క్రంచిరోల్ ఆటో స్కిప్ సెట్టింగులతో
// @name:th Crunchyroll ข้ามอัตโนมัติพร้อมการตั้งค่า
// @name:tr Crunchyroll Ayarlarla Otomatik Geçiş
// @name:vi Crunchyroll Tự động Bỏ qua với Cài đặt
// @description Automatically skip the intro and ending if available.
// @description:fr Sauter automatiquement l'intro et la fin si elles sont disponibles.
// @description:ar تخطي تلقائي للمقدمة والنهاية إذا كانت متوفرة.
// @description:ca Salta automàticament la introducció i el final si estan disponibles。
// @description:zh-CN 自动跳过片头和片尾(如果可用)。
// @description:de Überspringt automatisch das Intro und Ende, wenn verfügbar。
// @description:hi परिचय और अंत को स्वचालित रूप से छोड़ें, यदि उपलब्ध हो。
// @description:id Lewati intro dan akhir secara otomatis jika tersedia。
// @description:it Salta automaticamente l'intro e il finale se disponibili。
// @description:ja イントロとエンディングを自動的にスキップします(利用可能な場合)。
// @description:ms Langkau intro dan akhir secara automatik jika tersedia。
// @description:pl Automatycznie pomija intro i zakończenie, jeśli są dostępne。
// @description:pt-PT Pule automaticamente a introdução e o final, se disponível。
// @description:ru Автоматически пропускать вступление и концовку, если они доступны。
// @description:es Omite automáticamente la introducción y el final si están disponibles。
// @description:ta தொடக்கமும் முடிவும் கிடைத்தால் தானாகவே தவிர்க்கப்படும்。
// @description:te యింట్రో మరియు ఎండింగ్ను ఆటోమేటిక్గా స్కిప్ చేయండి, అందుబాటులో ఉంటే。
// @description:th ข้ามส่วนเปิดและส่วนท้ายโดยอัตโนมัติหากมีให้。
// @description:tr Giriş ve bitişi otomatik olarak atlar (eğer mevcutsa)。
// @description:vi Tự động bỏ qua phần giới thiệu và phần kết nếu có。
// @namespace https://greasyfork.org/scripts/513644
// @version 2.0
// @author MASTERD
// @match *://*.crunchyroll.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=crunchyroll.com
// @grant none
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
// Langues prises en charge
const supportedLanguages = ['ar', 'ca', 'zh', 'en', 'fr', 'de', 'hi', 'id', 'it', 'ja', 'ms', 'pl', 'pt', 'ru', 'es', 'ta', 'te', 'th', 'tr', 'vi'];
const userLanguage = supportedLanguages.find(lang => navigator.language.startsWith(lang)) || 'en';
['active', 'delay', 'exsave', 'show'].forEach((key, index) => {
if (localStorage.getItem(key) === null) {
localStorage.setItem(key, ['true', '0', 'false', 'true'][index]);
}
});
// Variables pour gérer les paramètres stockés
let settings = {
active: localStorage.getItem('active') === 'true',
delay: parseInt(localStorage.getItem('delay'), 10) || 0,
exsave: localStorage.getItem('exsave') === 'true',
show: localStorage.getItem('show') === 'true'
};
let previousDelay = localStorage.getItem('delay') || '0';
let previousActive = localStorage.getItem('active') || 'true';
let firstLoad = true;
let ObsSettingsButton = true, observerSkipButt = true;
new MutationObserver(() => {
if (ObsSettingsButton) addSettingsButton();
if (observerSkipButt) observeSkipButton();
}).observe(document.body, { childList: true, subtree: true });
const applyHoverFocusStyles = (element, OnBackColor, OffBackColor, boxShadow) => {
const addStyles = () => {
element.style.backgroundColor = OnBackColor;
element.style.boxShadow = boxShadow;
};
const removeStyles = () => {
element.style.backgroundColor = OffBackColor;
element.style.boxShadow = '';
};
element.addEventListener('mouseover', addStyles);
element.addEventListener('mouseout', removeStyles);
element.addEventListener('focus', addStyles);
element.addEventListener('blur', removeStyles);
};
function addSettingsButton() {
const userActionsList = document.querySelector('.erc-user-actions');
if (userActionsList) {
const svgDiv = document.createElement('div');
svgDiv.innerHTML = `
`;
svgDiv.classList.add('erc-header-svg');
const settingsButton = document.createElement('div');
settingsButton.classList.add('erc-header-tile');
settingsButton.classList.add('state-icon-only');
settingsButton.setAttribute('tabindex', '0');
settingsButton.addEventListener('keydown', (event) => {
if (event.key === ' ' || event.key === 'Enter') {
event.preventDefault();
showSettingsWindow(); // Ouvrir la fenêtre de paramètres
}
});
settingsButton.addEventListener('click', showSettingsWindow);
// Créer un nouvel élément
et y ajouter le bouton
const newLi = document.createElement('li');
newLi.classList.add('user-actions-item');
settingsButton.appendChild(svgDiv);
newLi.appendChild(settingsButton);
userActionsList.appendChild(newLi);
ObsSettingsButton = false;
}
}
// Fonction pour afficher la fenêtre de paramètres
function showSettingsWindow() {
const overlay = document.createElement('div');
overlay.id = 'settingsOverlay';
overlay.style.position = 'fixed';
overlay.style.top = '0';
overlay.style.left = '0';
overlay.style.width = '100%';
overlay.style.height = '100%';
overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.4)';
overlay.style.zIndex = '9994';
const settingsWindow = document.createElement('div');
settingsWindow.id = 'settingsWindow';
settingsWindow.style.position = 'fixed';
settingsWindow.style.top = '10%';
settingsWindow.style.left = '25%';
settingsWindow.style.width = '50%';
settingsWindow.style.backgroundColor = 'white';
settingsWindow.style.zIndex = '9995';
settingsWindow.style.boxShadow = '0px 0px 10px rgba(0,0,0,0.5)';
settingsWindow.style.borderRadius = '10px';
settingsWindow.style.padding = '20px';
// Bouton de fermeture "X"
const closeButton = document.createElement('span');
closeButton.tabIndex = '1';
closeButton.textContent = 'X';
closeButton.style.position = 'absolute';
closeButton.style.top = '10px';
closeButton.style.right = '20px';
closeButton.style.cursor = 'pointer';
closeButton.style.fontSize = '200%';
closeButton.style.color = 'black';
closeButton.style.backgroundColor = 'lightgray';
closeButton.style.padding = '5px';
closeButton.style.border = '2px solid';
closeButton.style.borderRadius = 'inherit';
closeButton.style.transition = 'background-color 0.2s ease';
applyHoverFocusStyles(closeButton, '#ff640a', 'lightgrey', '0 0 15px rgba(255, 124, 0, 1)');
// Formulaire de paramètres
const activeToggle = createToggle(translations[userLanguage].activeToggle, settings.active, (value) => settings.active = value);
const showToggle = createToggle(translations[userLanguage].showToggle, settings.show, (value) => settings.show = value);
const exsaveToggle = createToggle(translations[userLanguage].exsaveToggle, settings.exsave, (value) => settings.exsave = value);
const delayInput = createInput(translations[userLanguage].delayInput, settings.delay, (value) => settings.delay = parseInt(value, 10));
// Boutons de gestion des paramètres
const saveButton = createButton(translations[userLanguage].saveButton, saveAndClose);
const cancelButton = createButton(translations[userLanguage].cancelButton, hideSettingsWindow);
const defaultButton = createButton(translations[userLanguage].defaultButton, resetDefaults);
defaultButton.addEventListener('keydown', (event) => {
if (event.key === 'Tab') {
event.preventDefault();
closeButton.focus();
}
});
// Ajouter les éléments à la fenêtre
settingsWindow.appendChild(closeButton);
settingsWindow.appendChild(activeToggle);
settingsWindow.appendChild(delayInput);
settingsWindow.appendChild(document.createElement("br"));
settingsWindow.appendChild(showToggle);
settingsWindow.appendChild(exsaveToggle);
settingsWindow.appendChild(document.createElement("br"));
settingsWindow.appendChild(saveButton);
settingsWindow.appendChild(cancelButton);
settingsWindow.appendChild(defaultButton);
document.body.appendChild(overlay);
document.body.appendChild(settingsWindow);
// Gestion des événements
closeButton.addEventListener('click', hideSettingsWindow);
overlay.addEventListener('click', handleOverlayClick);
closeButton.addEventListener('keydown', (event) => {
if (event.key === ' ' || event.key === 'Enter') {
event.preventDefault();
document.activeElement.click();
}
});
closeButton.focus();
}
// Création des éléments de formulaire
function createToggle(labelText, isChecked, onChange) {
const container = document.createElement('div');
container.style.display = 'flex';
container.style.alignItems = 'center';
container.style.cursor = 'pointer';
container.tabIndex = '1';
container.style.padding = '5px';
container.style.width = 'fit-content';
container.style.transition = 'background-color 0.2s ease';
container.style.borderRadius = 'inherit';
applyHoverFocusStyles(container, '#ff640a', '', '0 0 15px rgba(255, 124, 0, 1)');
container.addEventListener('click', () => {
checkbox.checked = !checkbox.checked;
onChange(checkbox.checked);
});
container.addEventListener('keydown', (event) => {
if (event.key === ' ' || event.key === 'Enter') {
event.preventDefault();
checkbox.checked = !checkbox.checked;
onChange(checkbox.checked);
}
});
const checkbox = document.createElement('input');
checkbox.type = 'checkbox';
checkbox.checked = isChecked;
checkbox.style.cursor = 'pointer';
applyHoverFocusStyles(checkbox, '', '', '0 0 15px rgba(255, 124, 0, 1)');
checkbox.addEventListener('click', () => {
checkbox.checked = !checkbox.checked;
onChange(checkbox.checked);
});
const label = document.createElement('label');
label.textContent = labelText;
label.style.color = 'black';
label.style.padding = '0 10px';
label.style.cursor = 'pointer';
container.appendChild(label);
container.appendChild(checkbox);
return container;
}
function createInput(labelText, value, onChange) {
const container = document.createElement('div');
container.style.display = 'flex';
container.style.alignItems = 'center';
container.style.padding = '5px';
container.style.width = 'fit-content';
container.style.transition = 'background-color 0.2s ease';
container.style.borderRadius = 'inherit';
container.style.cursor = 'pointer';
container.addEventListener('click', () => {
if (document.activeElement !== input) {
input.focus();
input.select();
}
});
applyHoverFocusStyles(container, '#ff640a', '', '0 0 15px rgba(255, 124, 0, 1)');
const input = document.createElement('input');
input.type = 'text';
input.value = value;
input.tabIndex = '1';
applyHoverFocusStyles(input, '', '', '0 0 15px rgba(255, 124, 0, 1)');
input.addEventListener('input', () => onChange(input.value));
const label = document.createElement('label');
label.textContent = labelText;
label.style.color = 'black';
label.style.padding = '0 10px';
label.style.cursor = 'pointer';
container.appendChild(label);
container.appendChild(input);
return container;
}
function createButton(text, onClick) {
const button = document.createElement('button');
button.textContent = text;
button.tabIndex = '1';
button.style.cursor = 'pointer';
button.style.padding = '10px';
button.style.margin = '3px';
button.style.border = 'revert';
button.style.borderRadius = 'inherit';
button.style.backgroundColor = 'lightgrey';
button.style.transition = 'background-color 0.2s ease';
applyHoverFocusStyles(button, '#ff640a', 'lightgrey', '0 0 15px rgba(255, 124, 0, 1)');
button.addEventListener('click', onClick);
button.addEventListener('keydown', (event) => {
if (event.key === ' ' || event.key === 'Enter') {
event.preventDefault();
document.activeElement.click();
}
});
return button;
}
// Gérer les actions du formulaire
function saveAndClose() {
saveSettings();
hideSettingsWindow();
}
function resetDefaults() {
settings.active = true;
settings.delay = 0;
settings.exsave = false;
settings.show = true;
saveSettings();
hideSettingsWindow();
}
function hideSettingsWindow() {
const overlay = document.getElementById('settingsOverlay');
const settingsWindow = document.getElementById('settingsWindow');
if (overlay) {
document.body.removeChild(overlay);
}
if (settingsWindow) {
document.body.removeChild(settingsWindow);
}
settings = {
active: localStorage.getItem('active') === 'true',
delay: parseInt(localStorage.getItem('delay'), 10) || 0,
exsave: localStorage.getItem('exsave') === 'true',
show: localStorage.getItem('show') === 'true'
};
}
// Fonction pour sauvegarder les paramètres dans localStorage
function saveSettings() {
localStorage.setItem('active', settings.active);
localStorage.setItem('delay', settings.delay);
localStorage.setItem('exsave', settings.exsave);
localStorage.setItem('show', settings.show);
waitForIframe();
}
// Gérer le clic sur l'overlay
function handleOverlayClick() {
if (localStorage.getItem('show') === 'true') {
// Créer l'overlay
const overlay = document.createElement('div');
overlay.id = 'customOverlay';
overlay.style.position = 'fixed';
overlay.style.top = '0';
overlay.style.left = '0';
overlay.style.width = '100%';
overlay.style.height = '100%';
overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)'; // Fond semi-transparent
overlay.style.zIndex = '9998'; // Derrière la boîte de dialogue
// Créer le conteneur pour l'alerte
const alertDiv = document.createElement('div');
alertDiv.id = 'customAlert';
alertDiv.style.position = 'fixed';
alertDiv.style.top = '50%';
alertDiv.style.left = '50%';
alertDiv.style.transform = 'translate(-50%, -50%)';
alertDiv.style.padding = '20px';
alertDiv.style.backgroundColor = '#fff';
alertDiv.style.border = '1px solid #ccc';
alertDiv.style.borderRadius = '10px';
alertDiv.style.zIndex = '9999';
alertDiv.style.boxShadow = '0px 0px 10px rgba(0, 0, 0, 0.1)';
alertDiv.style.color = '#000'; // Texte noir
// Ajouter le texte du message
const message = document.createElement('p');
message.textContent = translations[userLanguage].confirmExit;
alertDiv.appendChild(message);
// Ajouter une checkbox avec le texte "Sauvegarder votre choix"
const checkboxDiv = createToggle(translations[userLanguage].saveChoice, false, '');
checkboxDiv.style.justifySelf = 'center';
// Ajouter les boutons Oui et Non
const buttonContainer = document.createElement('div');
buttonContainer.style.marginTop = '10px';
buttonContainer.style.display = 'flex';
buttonContainer.style.borderRadius = '10px';
buttonContainer.style.justifyContent = 'space-between';
// Bouton Oui
const yesButton = createButton(translations[userLanguage].yes, saveAndClose);
yesButton.onclick = function () {
if (checkboxDiv.querySelector('input[type="checkbox"]').checked) {
settings.show = false;
localStorage.setItem('show', settings.show);
}
settings.exsave = true;
localStorage.setItem('exsave', settings.exsave);
saveSettings();
hideSettingsWindow();
closeAlert();
};
// Bouton Non
const noButton = createButton(translations[userLanguage].no, hideSettingsWindow);
noButton.onclick = function () {
if (checkboxDiv.querySelector('input[type="checkbox"]').checked) {
settings.show = false;
localStorage.setItem('show', settings.show);
}
settings.exsave = false;
localStorage.setItem('exsave', settings.exsave);
hideSettingsWindow();
closeAlert();
// Rechargement des paramètres depuis le localStorage
settings = {
active: localStorage.getItem('active') === 'true',
delay: parseInt(localStorage.getItem('delay'), 10) || 0,
exsave: localStorage.getItem('exsave') === 'true',
show: localStorage.getItem('show') === 'true',
};
};
noButton.addEventListener('keydown', (event) => {
if (event.key === 'Tab') {
event.preventDefault();
checkboxDiv.focus();
}
});
// Ajouter les boutons au conteneur
buttonContainer.appendChild(yesButton);
buttonContainer.appendChild(noButton);
alertDiv.appendChild(checkboxDiv);
alertDiv.appendChild(buttonContainer);
// Ajouter la boîte de dialogue et l'overlay à la page
document.body.appendChild(overlay);
document.body.appendChild(alertDiv);
checkboxDiv.focus();
// Fonction pour fermer l'alerte
function closeAlert() {
document.body.removeChild(alertDiv);
document.body.removeChild(overlay);
}
} else {
if (settings.exsave) {
saveSettings();
}
hideSettingsWindow();
}
}
// Observer les changements de style sur le bouton "Passer l'intro"
function observeSkipButton() {
const skipButton = document.querySelector('div[data-testid="skipButton"]');
if (skipButton) {
let noSkipButton = document.querySelector('#noSkipButton');
if (!noSkipButton) {
noSkipButton = document.createElement('button');
noSkipButton.id = 'noSkipButton';
noSkipButton.textContent = translations[userLanguage].AutoSkOff;
noSkipButton.style.position = 'absolute';
noSkipButton.style.right = '200px';
noSkipButton.style.bottom = '100px';
noSkipButton.style.height = '40px';
noSkipButton.style.padding = '0 16px';
noSkipButton.style.zIndex = '1';
noSkipButton.style.display = 'block';
noSkipButton.classList.add("css-1dbjc4n");
noSkipButton.style.cursor = 'pointer';
noSkipButton.value = '0';
skipButton.parentNode.insertBefore(noSkipButton, skipButton);
// Gérer le clic sur le bouton "no skip"
noSkipButton.addEventListener('click', () => {
if (noSkipButton.value === "0") {
noSkipButton.value = '1';
noSkipButton.textContent = translations[userLanguage].AutoSkON;
const message = { type: 'noskip', value: noSkipButton.value };
sendMessageToParent(message);
} else {
noSkipButton.value = '0';
noSkipButton.textContent = translations[userLanguage].AutoSkOff;
const message = { type: 'noskip', value: noSkipButton.value };
sendMessageToParent(message);
}
});
// Variable pour stocker temporairement l'observateur
let mutationObserverActive = true;
// Observer les changements de style du bouton "Passer l'intro"
const observerSkipButtAtt = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (!mutationObserverActive) return; // Désactiver les mutations pendant le survol du bouton "No Skip"
const skipButt = document.querySelector('div[data-testid="skipButton"]');
const innerButton = skipButt.querySelector('div[tabindex="0"]');
if (innerButton) {
if (localStorage.getItem('active') === 'true' && noSkipButton.value === "0") {
const x = parseInt(localStorage.getItem('delay'), 10) || 0;
setTimeout(function() {
if (noSkipButton.value === "0" && mutationObserverActive) {
observerSkipButtAtt.disconnect();
innerButton.click(); // Ne pas exécuter si "no skip" est activé
}
}, x);
}
}
// Gérer l'affichage du bouton "no skip"
if (skipButt.style.opacity === '0') {
if (noSkipButton) {
noSkipButton.style.display = 'none';
}
} else {
if (noSkipButton) {
noSkipButton.style.display = 'block';
}
}
});
});
observerSkipButtAtt.observe(skipButton, { attributes: true });
// Observer si le bouton "Passer l'intro" est supprimé du DOM
const skipButtonRemovalObserver = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
mutation.removedNodes.forEach((removedNode) => {
if (removedNode === skipButton) {
if (noSkipButton) {
skipButtonRemovalObserver.disconnect();
noSkipButton.remove(); // Supprimer le bouton "No Skip" quand "skipButton" disparaît
}
}
});
});
});
skipButtonRemovalObserver.observe(document.body, { childList: true, subtree: true });
// Désactiver temporairement l'observateur lorsque la souris est sur "noSkipButton"
noSkipButton.addEventListener('mouseover', () => {
mutationObserverActive = false; // Désactive l'observateur temporairement
if (skipButton) {
// Ajouter un MutationObserver pour surveiller les changements du style
const observerSkipOpa = new MutationObserver(() => {
// Vérifier et forcer l'affichage du bouton "skipButton"
if (getComputedStyle(skipButton).opacity !== '1') {
skipButton.style.opacity = '1'; // Forcer l'affichage
}
});
// Observer uniquement les modifications d'attributs de "skipButton"
observerSkipOpa.observe(skipButton, { attributes: true, attributeFilter: ['style'] });
// Arrêter l'observation après un certain temps ou à la sortie de la souris
noSkipButton.addEventListener('mouseout', () => {
mutationObserverActive = true; // Réactiver l'observateur principal
observerSkipOpa.disconnect(); // Arrêter l'observation
if (skipButton) {
skipButton.style.opacity = ''; // Rétablir l'état initial
}
}, { once: true });
}
});
}
}
}
// Fonction pour envoyer un message au parent
function sendMessageToParent(message) {
window.parent.postMessage(message, '*');
}
// Fonction pour envoyer les valeurs de delay et active à l'iframe
function sendValuesToIframe(iframe) {
const delayValue = localStorage.getItem('delay') || '0'; // Valeur de delay
const activeValue = localStorage.getItem('active') || 'true'; // Valeur de active
// Envoyer seulement si la valeur de delay a changé
if (delayValue !== previousDelay || firstLoad == true) {
const message = {
type: 'delay',
value: delayValue
};
iframe.contentWindow.postMessage(message, 'https://static.crunchyroll.com');
previousDelay = delayValue; // Mettre à jour la valeur précédente
}
// Envoyer seulement si la valeur de active a changé
if (activeValue !== previousActive || firstLoad == true) {
const message = {
type: 'active',
value: activeValue
};
iframe.contentWindow.postMessage(message, 'https://static.crunchyroll.com');
previousActive = activeValue; // Mettre à jour la valeur précédente
firstLoad = false;
}
}
// Vérifier si l'iframe est chargé et disponible
function waitForIframe() {
const iframe = document.querySelector('.video-player');
if (iframe && iframe.src.includes('https://static.crunchyroll.com')) {
// Envoyer les valeurs lors du premier chargement de l'iframe
iframe.onload = function() {
sendValuesToIframe(iframe);
};
// Vérifier périodiquement si les valeurs de delay ou active ont changé
setInterval(function() {
sendValuesToIframe(iframe); // Envoyer à chaque changement de delay ou active
}, 1000); // Vérifier toutes les secondes
} else {
setTimeout(waitForIframe, 500); // Réessayer après 500 ms si l'iframe n'est pas trouvé
}
}
// Lancer la fonction de vérification lorsque la page est complètement chargée
window.addEventListener('load', waitForIframe);
// Récupérer les données envoyées à l'iframe
window.addEventListener('message', function(event) {
if (event.origin !== 'https://www.crunchyroll.com') {
return;
}
const receivedMessage = event.data;
if (receivedMessage.type === 'delay') {
const delay = receivedMessage.value;
localStorage.setItem('delay', delay);
}
if (receivedMessage.type === 'active') {
const active = receivedMessage.value;
localStorage.setItem('active', active);
}
});
//traduction
const translations = {
ar: {
activeToggle: "تفعيل التخطي التلقائي",
showToggle: "عرض تنبيه التراكب",
exsaveToggle: "حفظ عند الخروج من التراكب",
delayInput: "التأخير قبل التخطي (مللي ثانية)",
saveButton: "حفظ",
cancelButton: "إلغاء",
defaultButton: "الإفتراضي",
confirmExit: "هل تريد الخروج وحفظ الإعدادات؟",
saveChoice: "حفظ اختيارك",
yes: "نعم",
no: "لا",
AutoSkOff: "تعطيل التخطي التلقائي",
AutoSkON: "إعادة تفعيل التخطي التلقائي"
},
ca: {
activeToggle: "Activar el salt automàtic",
showToggle: "Mostra l'alerta de superposició",
exsaveToggle: "Desa en sortir de la superposició",
delayInput: "Retard abans de saltar (ms)",
saveButton: "Desa",
cancelButton: "Cancel·lar",
defaultButton: "Per defecte",
confirmExit: "Vols sortir i desar la configuració?",
saveChoice: "Desa la teva elecció",
yes: "Sí",
no: "No",
AutoSkOff: "Desactivar Salt Automàtic",
AutoSkON: "Reactivar Salt Automàtic"
},
zh: {
activeToggle: "启用自动跳过",
showToggle: "显示覆盖警报",
exsaveToggle: "退出覆盖时保存",
delayInput: "跳过前的延迟(毫秒)",
saveButton: "保存",
cancelButton: "取消",
defaultButton: "默认",
confirmExit: "是否要退出并保存设置?",
saveChoice: "保存您的选择",
yes: "是",
no: "否",
AutoSkOff: "禁用自动跳过",
AutoSkON: "重新启用自动跳过"
},
en: {
activeToggle: "Enable automatic skip",
showToggle: "Show overlay alert",
exsaveToggle: "Save when exiting overlay",
delayInput: "Delay before skipping (ms)",
saveButton: "Save",
cancelButton: "Cancel",
defaultButton: "Default",
confirmExit: "Do you want to quit and save the settings?",
saveChoice: "Save your choice",
yes: "Yes",
no: "No",
AutoSkOff: "Disable Auto Skip",
AutoSkON: "Re-enable Auto Skip"
},
fr: {
activeToggle: "Activer le skip automatique",
showToggle: "Afficher l'alerte de l'overlay",
exsaveToggle: "Sauvegarder en quittant l'overlay",
delayInput: "Délai avant de skip (ms)",
saveButton: "Sauvegarder",
cancelButton: "Annuler",
defaultButton: "Défaut",
confirmExit: "Voulez-vous quitter et sauvegarder les paramètres?",
saveChoice: "Sauvegarder votre choix",
yes: "Oui",
no: "Non",
AutoSkOff: "Désactiver Auto Skip",
AutoSkON: "Réactiver Auto Skip"
},
de: {
activeToggle: "Automatisches Überspringen aktivieren",
showToggle: "Overlay-Warnung anzeigen",
exsaveToggle: "Beim Verlassen des Overlays speichern",
delayInput: "Verzögerung vor dem Überspringen (ms)",
saveButton: "Speichern",
cancelButton: "Abbrechen",
defaultButton: "Standard",
confirmExit: "Möchten Sie beenden und die Einstellungen speichern?",
saveChoice: "Speichern Sie Ihre Wahl",
yes: "Ja",
no: "Nein",
AutoSkOff: "Automatisches Überspringen deaktivieren",
AutoSkON: "Automatisches Überspringen erneut aktivieren"
},
hi: {
activeToggle: "स्वचालित स्किप सक्षम करें",
showToggle: "ओवरले चेतावनी दिखाएं",
exsaveToggle: "ओवरले से बाहर निकलते समय सहेजें",
delayInput: "स्किप करने से पहले विलंब (मिलीसेकंड)",
saveButton: "सहेजें",
cancelButton: "रद्द करें",
defaultButton: "डिफ़ॉल्ट",
confirmExit: "क्या आप बाहर निकलना और सेटिंग्स सहेजना चाहते हैं?",
saveChoice: "अपनी पसंद सहेजें",
yes: "हां",
no: "नहीं",
AutoSkOff: "स्वचालित स्किप अक्षम करें",
AutoSkON: "स्वचालित स्किप फिर से सक्षम करें"
},
id: {
activeToggle: "Aktifkan lewati otomatis",
showToggle: "Tampilkan peringatan overlay",
exsaveToggle: "Simpan saat keluar dari overlay",
delayInput: "Tunda sebelum melewati (ms)",
saveButton: "Simpan",
cancelButton: "Batal",
defaultButton: "Default",
confirmExit: "Apakah Anda ingin keluar dan menyimpan pengaturan?",
saveChoice: "Simpan pilihan Anda",
yes: "Ya",
no: "Tidak",
AutoSkOff: "Nonaktifkan Lewati Otomatis",
AutoSkON: "Aktifkan kembali Lewati Otomatis"
},
it: {
activeToggle: "Abilita salto automatico",
showToggle: "Mostra avviso sovrapposizione",
exsaveToggle: "Salva quando esci dalla sovrapposizione",
delayInput: "Ritardo prima del salto (ms)",
saveButton: "Salva",
cancelButton: "Annulla",
defaultButton: "Predefinito",
confirmExit: "Vuoi uscire e salvare le impostazioni?",
saveChoice: "Salva la tua scelta",
yes: "Sì",
no: "No",
AutoSkOff: "Disabilita Salto Automatico",
AutoSkON: "Riattiva Salto Automatico"
},
ja: {
activeToggle: "自動スキップを有効にする",
showToggle: "オーバーレイ警告を表示",
exsaveToggle: "オーバーレイを終了するときに保存",
delayInput: "スキップ前の遅延 (ミリ秒)",
saveButton: "保存",
cancelButton: "キャンセル",
defaultButton: "デフォルト",
confirmExit: "終了して設定を保存しますか?",
saveChoice: "選択を保存する",
yes: "はい",
no: "いいえ",
AutoSkOff: "自動スキップを無効にする",
AutoSkON: "自動スキップを再度有効にする"
},
ms: {
activeToggle: "Aktifkan lompat automatik",
showToggle: "Tunjukkan amaran overlay",
exsaveToggle: "Simpan apabila keluar dari overlay",
delayInput: "Kelewatan sebelum melompat (ms)",
saveButton: "Simpan",
cancelButton: "Batal",
defaultButton: "Lalai",
confirmExit: "Adakah anda mahu keluar dan menyimpan tetapan?",
saveChoice: "Simpan pilihan anda",
yes: "Ya",
no: "Tidak",
AutoSkOff: "Lumpuhkan Lompat Automatik",
AutoSkON: "Dayakan semula Lompat Automatik"
},
pl: {
activeToggle: "Włącz automatyczne pomijanie",
showToggle: "Pokaż alert nakładki",
exsaveToggle: "Zapisz przy wychodzeniu z nakładki",
delayInput: "Opóźnienie przed pominięciem (ms)",
saveButton: "Zapisz",
cancelButton: "Anuluj",
defaultButton: "Domyślnie",
confirmExit: "Czy chcesz zakończyć i zapisać ustawienia?",
saveChoice: "Zapisz swój wybór",
yes: "Tak",
no: "Nie",
AutoSkOff: "Wyłącz automatyczne pomijanie",
AutoSkON: "Włącz ponownie automatyczne pomijanie"
},
pt: {
activeToggle: "Ativar pulo automático",
showToggle: "Mostrar alerta de sobreposição",
exsaveToggle: "Salvar ao sair da sobreposição",
delayInput: "Atraso antes de pular (ms)",
saveButton: "Salvar",
cancelButton: "Cancelar",
defaultButton: "Padrão",
confirmExit: "Deseja sair e salvar as configurações?",
saveChoice: "Salve sua escolha",
yes: "Sim",
no: "Não",
AutoSkOff: "Desativar Pulo Automático",
AutoSkON: "Reativar Pulo Automático"
},
ru: {
activeToggle: "Включить автоматический пропуск",
showToggle: "Показать предупреждение наложения",
exsaveToggle: "Сохранить при выходе из наложения",
delayInput: "Задержка перед пропуском (мс)",
saveButton: "Сохранить",
cancelButton: "Отмена",
defaultButton: "По умолчанию",
confirmExit: "Вы хотите выйти и сохранить настройки?",
saveChoice: "Сохраните свой выбор",
yes: "Да",
no: "Нет",
AutoSkOff: "Отключить автоматический пропуск",
AutoSkON: "Повторно включить автоматический пропуск"
},
es: {
activeToggle: "Habilitar omisión automática",
showToggle: "Mostrar alerta de superposición",
exsaveToggle: "Guardar al salir de la superposición",
delayInput: "Retraso antes de omitir (ms)",
saveButton: "Guardar",
cancelButton: "Cancelar",
defaultButton: "Por defecto",
confirmExit: "¿Quieres salir y guardar la configuración?",
saveChoice: "Guarda tu elección",
yes: "Sí",
no: "No",
AutoSkOff: "Desactivar Omisión Automática",
AutoSkON: "Reactivar Omisión Automática"
},
ta: {
activeToggle: "தானியங்கி குதிப்பை இயக்கவும்",
showToggle: "மேல்பட வருகையை காட்டவும்",
exsaveToggle: "மேல்பட வருகையை விட்டு வெளியேறும்போது சேமிக்கவும்",
delayInput: "குதிக்கும் முன் தாமதம் (மில்லி வினாடிகள்)",
saveButton: "சேமிக்கவும்",
cancelButton: "ரத்துசெய்",
defaultButton: "இயல்புநிலை",
confirmExit: "வெளியேறி அமைப்புகளைச் சேமிக்க விரும்புகிறீர்களா?",
saveChoice: "உங்கள் தேர்வைச் சேமிக்கவும்",
yes: "ஆம்",
no: "இல்லை",
AutoSkOff: "தானியங்கி குதிப்பை முடக்கு",
AutoSkON: "தானியங்கி குதிப்பை மீண்டும் இயக்கவும்"
},
te: {
activeToggle: "ఆటోమేటిక్ స్కిప్ని ఎనేబుల్ చేయండి",
showToggle: "ఓవర్లే అలర్ట్ను చూపించండి",
exsaveToggle: "ఓవర్లే నుండి నిష్క్రమించే సమయంలో సేవ్ చేయండి",
delayInput: "స్కిప్ చేయడానికి ముందు ఆలస్యం (మిల్లీసెకన్లు)",
saveButton: "సేవ్ చేయండి",
cancelButton: "రద్దు చేయండి",
defaultButton: "డిఫాల్ట్",
confirmExit: "మీరు నిష్క్రమించి సెట్టింగ్లను సేవ్ చేయాలనుకుంటున్నారా?",
saveChoice: "మీ ఎంపికను సేవ్ చేయండి",
yes: "అవును",
no: "కాదు",
AutoSkOff: "ఆటోమేటిక్ స్కిప్ని ఆపివేయండి",
AutoSkON: "ఆటోమేటిక్ స్కిప్ని తిరిగి ఎనేబుల్ చేయండి"
},
th: {
activeToggle: "เปิดใช้งานข้ามอัตโนมัติ",
showToggle: "แสดงการแจ้งเตือนซ้อนทับ",
exsaveToggle: "บันทึกเมื่อออกจากการซ้อนทับ",
delayInput: "ความล่าช้าก่อนข้าม (ms)",
saveButton: "บันทึก",
cancelButton: "ยกเลิก",
defaultButton: "ค่าเริ่มต้น",
confirmExit: "คุณต้องการออกและบันทึกการตั้งค่าหรือไม่?",
saveChoice: "บันทึกการเลือกของคุณ",
yes: "ใช่",
no: "ไม่",
AutoSkOff: "ปิดใช้งานการข้ามอัตโนมัติ",
AutoSkON: "เปิดใช้งานการข้ามอัตโนมัติอีกครั้ง"
},
tr: {
activeToggle: "Otomatik atlamayı etkinleştir",
showToggle: "Bindirme uyarısını göster",
exsaveToggle: "Bindirmeden çıkarken kaydet",
delayInput: "Atlamadan önce gecikme (ms)",
saveButton: "Kaydet",
cancelButton: "İptal",
defaultButton: "Varsayılan",
confirmExit: "Çıkmak ve ayarları kaydetmek istiyor musunuz?",
saveChoice: "Seçiminizi kaydedin",
yes: "Evet",
no: "Hayır",
AutoSkOff: "Otomatik Atlama'yı devre dışı bırak",
AutoSkON: "Otomatik Atlama'yı yeniden etkinleştir"
},
vi: {
activeToggle: "Bật bỏ qua tự động",
showToggle: "Hiển thị cảnh báo lớp phủ",
exsaveToggle: "Lưu khi thoát lớp phủ",
delayInput: "Độ trễ trước khi bỏ qua (ms)",
saveButton: "Lưu",
cancelButton: "Hủy bỏ",
defaultButton: "Mặc định",
confirmExit: "Bạn có muốn thoát và lưu cài đặt không?",
saveChoice: "Lưu lựa chọn của bạn",
yes: "Có",
no: "Không",
AutoSkOff: "Tắt bỏ qua tự động",
AutoSkON: "Bật lại bỏ qua tự động"
}
};
})();