From c10a87dc74bc668fa20ee1e46e59aace679c10e9 Mon Sep 17 00:00:00 2001 From: Staninna <26458805+Staninna@users.noreply.github.com> Date: Thu, 28 Aug 2025 00:25:51 +0200 Subject: [PATCH] Claude limit reached. WIP English copied text from JSON; translation to native language in progress --- Auto-Image.js | 108 ++++++++++++++++++++++++------------------------ lang/en.json | 64 +++++++++++++++++++++++++++- lang/fr.json | 75 +++++++++++++++++++++++++++++---- lang/id.json | 64 +++++++++++++++++++++++++++- lang/ja.json | 65 ++++++++++++++++++++++++++++- lang/ko.json | 65 ++++++++++++++++++++++++++++- lang/pt.json | 64 +++++++++++++++++++++++++++- lang/ru.json | 64 +++++++++++++++++++++++++++- lang/tr.json | 65 ++++++++++++++++++++++++++++- lang/uk.json | 65 ++++++++++++++++++++++++++++- lang/vi.json | 67 ++++++++++++++++++++++++++++-- lang/zh-CN.json | 67 ++++++++++++++++++++++++++++-- lang/zh-TW.json | 65 ++++++++++++++++++++++++++++- 13 files changed, 814 insertions(+), 84 deletions(-) diff --git a/Auto-Image.js b/Auto-Image.js index e795118..d316d69 100644 --- a/Auto-Image.js +++ b/Auto-Image.js @@ -871,7 +871,7 @@ if (source === 'turnstile-capture' && token) { setTurnstileToken(token); if (document.querySelector("#statusText")?.textContent.includes("CAPTCHA")) { - Utils.showAlert("Token captured successfully! You can start the bot now.", "success"); + Utils.showAlert(Utils.t("tokenCapturedSuccess"), "success"); updateUI("colorsFound", "success", { count: state.availableColors.length }); } } @@ -991,7 +991,7 @@ `; const title = document.createElement('div'); - title.textContent = 'Cloudflare Turnstile — please complete the check if shown'; + title.textContent = Utils.t('turnstileInstructions'); title.style.cssText = 'font: 600 12px/1.3 "Segoe UI",sans-serif; margin-bottom: 8px; opacity: 0.9;'; const host = document.createElement('div'); @@ -999,7 +999,7 @@ host.style.cssText = 'width: 100%; min-height: 70px;'; const hideBtn = document.createElement('button'); - hideBtn.textContent = 'Hide'; + hideBtn.textContent = Utils.t('hideTurnstileBtn'); hideBtn.style.cssText = 'position:absolute; top:6px; right:6px; font-size:11px; background:transparent; color:#fff; border:1px solid rgba(255,255,255,0.2); border-radius:6px; padding:2px 6px; cursor:pointer;'; hideBtn.addEventListener('click', () => overlay.remove()); @@ -2150,7 +2150,7 @@ }, async requestPermission() { if (!("Notification" in window)) { - Utils.showAlert("Notifications are not supported in this browser.", "warning"); + Utils.showAlert(Utils.t("notificationsNotSupported"), "warning"); return "denied"; } if (Notification.permission === "granted") return "granted"; @@ -2198,8 +2198,8 @@ const shouldEdge = state._lastChargesBelow || force; const shouldRepeat = now - (state._lastChargesNotifyAt || 0) >= repeatMs; if (shouldEdge || shouldRepeat) { - const msg = `Charges ready: ${Math.floor(state.currentCharges)} / ${state.maxCharges}. Threshold: ${state.cooldownChargeThreshold}.`; - this.notify("WPlace — Charges Ready", msg, "wplace-notify-charges"); + const msg = Utils.t("chargesReadyMessage", { current: Math.floor(state.currentCharges), max: state.maxCharges, threshold: state.cooldownChargeThreshold }); + this.notify(Utils.t("chargesReadyNotification"), msg, "wplace-notify-charges"); state._lastChargesNotifyAt = now; } state._lastChargesBelow = false; @@ -2336,7 +2336,7 @@ // Don't re-fetch colors here, use what was captured when user clicked upload if (!state.availableColors || state.availableColors.length === 0) { // If no colors have been captured yet, show message - colorsContainer.innerHTML = '
Upload an image first to capture available colors
'; + colorsContainer.innerHTML = `
${Utils.t('uploadImageFirst')}
`; return; } @@ -3729,10 +3729,10 @@ - - @@ -3818,7 +3818,7 @@ ${Utils.t("saveData")} - @@ -3828,7 +3828,7 @@ ${Utils.t("saveToFile")} - @@ -3846,13 +3846,13 @@
- Painting Stats + ${Utils.t('paintingStats')}
- -
@@ -4177,7 +4177,7 @@
@@ -4189,25 +4189,25 @@
- Repeat every + ${Utils.t('repeatEvery')} - minute(s) + ${Utils.t('minutesPl')}
- - + +
@@ -4404,12 +4404,12 @@ Paint White Pixels
- + - - - - + + + 100% @@ -4453,9 +4453,9 @@
- - - Shift = Row • Alt = Column + + + ${Utils.t('shiftRowAltColumn')} @@ -4467,7 +4467,7 @@
@@ -4499,7 +4499,7 @@
- Chroma Weight + ${Utils.t('chromaWeight')} ${state.chromaPenaltyWeight}
@@ -4528,15 +4528,15 @@
` @@ -4805,7 +4805,7 @@ 'hybrid': 'Generator + Auto Fallback', 'manual': 'Manual Pixel Placement' } - Utils.showAlert(`Token source set to: ${sourceNames[state.tokenSource]}`, "success") + Utils.showAlert(Utils.t('tokenSourceSet', {source: sourceNames[state.tokenSource]}), "success") }) } @@ -4833,7 +4833,7 @@ saveBotSettings() console.log(`📦 Batch mode changed to: ${state.batchMode}`) - Utils.showAlert(`Batch mode set to: ${state.batchMode === 'random' ? 'Random Range' : 'Normal Fixed Size'}`, "success") + Utils.showAlert(Utils.t('batchModeSet', {mode: state.batchMode === 'random' ? Utils.t('randomRange') : Utils.t('normalFixedSize')}), "success") }) } @@ -4920,9 +4920,9 @@ enableBlueMarbleToggle.addEventListener('click', async () => { state.blueMarbleEnabled = enableBlueMarbleToggle.checked; if (state.imageLoaded && overlayManager.imageBitmap) { - Utils.showAlert("Re-processing overlay...", "info"); + Utils.showAlert(Utils.t('reprocessingOverlay'), "info"); await overlayManager.processImageIntoChunks(); - Utils.showAlert("Overlay updated!", "success"); + Utils.showAlert(Utils.t('overlayUpdated'), "success"); } }); } @@ -4935,13 +4935,13 @@ if (notifPermBtn) { notifPermBtn.addEventListener("click", async () => { const perm = await NotificationManager.requestPermission(); - if (perm === "granted") Utils.showAlert("Notifications enabled.", "success"); - else Utils.showAlert("Notifications permission denied.", "warning"); + if (perm === "granted") Utils.showAlert(Utils.t('notificationsEnabled'), "success"); + else Utils.showAlert(Utils.t('notificationsPermissionDenied'), "warning"); }); } if (notifTestBtn) { notifTestBtn.addEventListener("click", () => { - NotificationManager.notify("WPlace — Test", "This is a test notification.", "wplace-notify-test", true); + NotificationManager.notify(Utils.t('testNotificationTitle'), Utils.t('testNotificationMessage'), "wplace-notify-test", true); }); } @@ -5009,7 +5009,7 @@ const isEnabled = overlayManager.toggle(); toggleOverlayBtn.classList.toggle('active', isEnabled); toggleOverlayBtn.setAttribute('aria-pressed', isEnabled ? 'true' : 'false'); - Utils.showAlert(`Overlay ${isEnabled ? 'enabled' : 'disabled'}.`, 'info'); + Utils.showAlert(isEnabled ? Utils.t('overlayEnabled') : Utils.t('overlayDisabled'), 'info'); }); } @@ -5041,7 +5041,7 @@ updateUI("autoSaved", "success") Utils.showAlert(Utils.t("autoSaved"), "success") } else { - Utils.showAlert("❌ Erro ao salvar progresso", "error") + Utils.showAlert(Utils.t('errorSavingProgress'), "error") } }) } @@ -5050,7 +5050,7 @@ loadBtn.addEventListener("click", () => { // Check if initial setup is complete if (!state.initialSetupComplete) { - Utils.showAlert("🔄 Please wait for the initial setup to complete before loading progress.", "warning"); + Utils.showAlert(Utils.t('pleaseWaitInitialSetup'), "warning"); return; } @@ -5092,7 +5092,7 @@ startBtn.disabled = false } } else { - Utils.showAlert("❌ Erro ao carregar progresso", "error") + Utils.showAlert(Utils.t('errorLoadingProgress'), "error") } } }) @@ -5114,7 +5114,7 @@ loadFromFileBtn.addEventListener("click", async () => { // Check if initial setup is complete if (!state.initialSetupComplete) { - Utils.showAlert("🔄 Please wait for the initial setup to complete before loading from file.", "warning"); + Utils.showAlert(Utils.t('pleaseWaitFileSetup'), "warning"); return; } @@ -5202,7 +5202,7 @@ if (state.colorsChecked) { colorSwatchesHTML = state.availableColors.map(color => { const rgbString = `rgb(${color.rgb.join(',')})`; - return `
`; + return `
`; }).join(''); } @@ -5214,7 +5214,7 @@
${state.colorsChecked ? `
-
Available Colors (${state.availableColors.length})
+
${Utils.t('availableColors', {count: state.availableColors.length})}
${colorSwatchesHTML}
@@ -6157,7 +6157,7 @@ if (state.imageLoaded && state.imageData.processor && state.colorsChecked) { showResizeDialog(state.imageData.processor) } else if (!state.colorsChecked) { - Utils.showAlert("Please upload an image first to capture available colors", "warning") + Utils.showAlert(Utils.t('uploadImageFirstColors'), "warning") } }) } @@ -6974,7 +6974,7 @@ } // Show a notification that file operations are now available - Utils.showAlert("📂 File operations (Load/Upload) are now available!", "success"); + Utils.showAlert(Utils.t('fileOperationsAvailable'), "success"); } // Optimized token initialization with better timing and error handling @@ -6999,7 +6999,7 @@ setTurnstileToken(token); console.log("✅ Startup token generated successfully"); updateUI("tokenReady", "success"); - Utils.showAlert("🔑 Token generator ready!", "success"); + Utils.showAlert(Utils.t('tokenGeneratorReady'), "success"); enableFileOperations(); // Enable file operations since initial setup is complete } else { console.warn("⚠️ Startup token generation failed, will retry when needed"); @@ -7042,7 +7042,7 @@ if (whiteInput) whiteInput.addEventListener('change', e => { const v=parseInt(e.target.value,10); if(!isNaN(v)&&v>=200&&v<=255){ state.customWhiteThreshold=v; CONFIG.WHITE_THRESHOLD=v; saveBotSettings(); _updateResizePreview(); }}); if (ditherToggle) ditherToggle.addEventListener('change', e => { state.ditheringEnabled = e.target.checked; saveBotSettings(); _updateResizePreview(); }); if (resetBtn) resetBtn.addEventListener('click', () => { - state.colorMatchingAlgorithm='lab'; state.enableChromaPenalty=true; state.chromaPenaltyWeight=0.15; state.customTransparencyThreshold=CONFIG.TRANSPARENCY_THRESHOLD=100; state.customWhiteThreshold=CONFIG.WHITE_THRESHOLD=250; saveBotSettings(); const a=document.getElementById('colorAlgorithmSelect'); if(a) a.value='lab'; const ct=document.getElementById('enableChromaPenaltyToggle'); if(ct) ct.checked=true; if(chromaSlider) chromaSlider.value=0.15; if(chromaValue) chromaValue.textContent='0.15'; if(transInput) transInput.value=100; if(whiteInput) whiteInput.value=250; _updateResizePreview(); Utils.showAlert('Advanced color settings reset.', 'success'); }); + state.colorMatchingAlgorithm='lab'; state.enableChromaPenalty=true; state.chromaPenaltyWeight=0.15; state.customTransparencyThreshold=CONFIG.TRANSPARENCY_THRESHOLD=100; state.customWhiteThreshold=CONFIG.WHITE_THRESHOLD=250; saveBotSettings(); const a=document.getElementById('colorAlgorithmSelect'); if(a) a.value='lab'; const ct=document.getElementById('enableChromaPenaltyToggle'); if(ct) ct.checked=true; if(chromaSlider) chromaSlider.value=0.15; if(chromaValue) chromaValue.textContent='0.15'; if(transInput) transInput.value=100; if(whiteInput) whiteInput.value=250; _updateResizePreview(); Utils.showAlert(Utils.t('advancedColorSettingsReset'), 'success'); }); }; // Delay to ensure resize UI built setTimeout(advancedInit, 500); diff --git a/lang/en.json b/lang/en.json index c289751..6fcf499 100644 --- a/lang/en.json +++ b/lang/en.json @@ -69,6 +69,66 @@ "waitCharges": "Wait until charges reach", "captchaSolving": "🔑 Generating Turnstile token...", "captchaFailed": "❌ Turnstile token generation failed. Trying fallback method...", - "automation": "Automation", - "noChargesThreshold": "⌛ Waiting for charges to reach {threshold}. Currently {current}. Next in {time}..." + "automation": "Automation", "noChargesThreshold": "⌛ Waiting for charges to reach {threshold}. Currently {current}. Next in {time}...", + "tokenCapturedSuccess": "Token captured successfully! You can start the bot now.", + "notificationsNotSupported": "Notifications are not supported in this browser.", + "chargesReadyNotification": "WPlace — Charges Ready", + "chargesReadyMessage": "Charges ready: {current} / {max}. Threshold: {threshold}.", + "testNotificationTitle": "WPlace — Test", + "testNotificationMessage": "This is a test notification.", + "showStats": "Show Stats", + "compactMode": "Compact Mode", + "refreshCharges": "Refresh Charges", + "closeStats": "Close Stats", + "zoomOut": "Zoom Out", + "zoomIn": "Zoom In", + "fitToView": "Fit to view", + "actualSize": "Actual size (100%)", + "panMode": "Pan (drag to move view)", + "clearIgnoredPixels": "Clear all ignored pixels", + "invertMask": "Invert mask", + "waitingSetupComplete": "🔄 Waiting for initial setup to complete...", + "waitingTokenGenerator": "🔄 Waiting for token generator to initialize...", + "uploadImageFirst": "Upload an image first to capture available colors", + "pleaseWaitInitialSetup": "🔄 Please wait for the initial setup to complete before loading progress.", + "pleaseWaitFileSetup": "🔄 Please wait for the initial setup to complete before loading from file.", + "errorSavingProgress": "❌ Error saving progress", + "errorLoadingProgress": "❌ Error loading progress", + "fileOperationsAvailable": "📂 File operations (Load/Upload) are now available!", + "tokenGeneratorReady": "🔑 Token generator ready!", + "paintingStats": "Painting Stats", + "enablePaintingSpeedLimit": "Enable painting speed limit (batch size control)", + "enableNotifications": "Enable notifications", + "notifyOnChargesThreshold": "Notify when charges reach threshold", + "onlyWhenNotFocused": "Only when tab is not focused", + "repeatEvery": "Repeat every", + "minutesPl": "minute(s)", + "grantPermission": "Grant Permission", + "test": "Test", + "showAllColorsIncluding": "Show All Colors (including unavailable)", + "chromaWeight": "Chroma Weight", + "downloadPreview": "Download Preview", + "apply": "Apply", + "cancel": "Cancel", + "fit": "Fit", + "hundred": "100%", + "clear": "Clear", + "invert": "Invert", + "reprocessingOverlay": "Re-processing overlay...", + "overlayUpdated": "Overlay updated!", + "notificationsEnabled": "Notifications enabled.", + "notificationsPermissionDenied": "Notifications permission denied.", + "overlayEnabled": "Overlay enabled.", + "overlayDisabled": "Overlay disabled.", + "tokenSourceSet": "Token source set to: {source}", + "batchModeSet": "Batch mode set to: {mode}", + "randomRange": "Random Range", + "normalFixedSize": "Normal Fixed Size", + "advancedColorSettingsReset": "Advanced color settings reset.", + "shiftRowAltColumn": "Shift = Row • Alt = Column", + "hideTurnstileBtn": "Hide", + "turnstileInstructions": "Cloudflare Turnstile — please complete the check if shown", + "uploadImageFirstColors": "Please upload an image first to capture available colors", + "availableColors": "Available Colors ({count})", + "colorTooltip": "ID: {id}\nRGB: {rgb}" } \ No newline at end of file diff --git a/lang/fr.json b/lang/fr.json index dab546d..2e0eeaa 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -1,6 +1,6 @@ { "title": "WPlace Auto-Image", - "toggleOverlay": "Toggle Overlay", + "toggleOverlay": "Basculer l'overlay", "scanColors": "Scanner les couleurs", "uploadImage": "Télécharger l'image", "resizeImage": "Redimensionner l'image", @@ -61,14 +61,75 @@ "themeSettings": "Paramètres de Thème", "themeSettingsDesc": "Choisissez votre thème de couleurs préféré pour l'interface.", "languageSelectDesc": "Sélectionnez votre langue préférée. Les changements prendront effet immédiatement.", - "autoCaptcha": "Résolveur de CAPTCHA automatique", - "autoCaptchaDesc": "Tente automatiquement de résoudre le CAPTCHA en simulant un placement manuel de pixel lorsque le jeton expire.", + "autoCaptcha": "Résolveur de CAPTCHA automatique (Turnstile)", + "autoCaptchaDesc": "Génère automatiquement des jetons Turnstile en utilisant le générateur intégré. Se replie sur l'automatisation du navigateur si nécessaire.", "applySettings": "Appliquer les paramètres", "settingsSaved": "✅ Paramètres enregistrés avec succès !", "cooldownSettings": "Paramètres de recharge", "waitCharges": "Attendre que les charges atteignent", - "captchaSolving": "🤖 Tentative de résolution du CAPTCHA...", - "captchaFailed": "❌ Échec de l'Auto-CAPTCHA. Peignez un pixel manuellement.", + "captchaSolving": "🔑 Génération du jeton Turnstile...", + "captchaFailed": "❌ Échec de génération du jeton Turnstile. Tentative de méthode alternative...", "automation": "Automatisation", - "noChargesThreshold": "⌛ En attente que les charges atteignent {threshold}. Actuel: {current}. Prochaine dans {time}..." -} \ No newline at end of file + "noChargesThreshold": "⌛ En attente que les charges atteignent {threshold}. Actuel: {current}. Prochaine dans {time}...", + "tokenCapturedSuccess": "Jeton capturé avec succès ! Vous pouvez démarrer le bot maintenant.", + "notificationsNotSupported": "Les notifications ne sont pas supportées dans ce navigateur.", + "chargesReadyNotification": "WPlace — Charges Prêtes", + "chargesReadyMessage": "Charges prêtes : {current} / {max}. Seuil : {threshold}.", + "testNotificationTitle": "WPlace — Test", + "testNotificationMessage": "Ceci est une notification de test.", + "showStats": "Afficher les Stats", + "compactMode": "Mode Compact", + "refreshCharges": "Actualiser les Charges", + "closeStats": "Fermer les Stats", + "zoomOut": "Dézoomer", + "zoomIn": "Zoomer", + "fitToView": "Ajuster à la vue", + "actualSize": "Taille réelle (100%)", + "panMode": "Panoramique (glisser pour déplacer la vue)", + "clearIgnoredPixels": "Effacer tous les pixels ignorés", + "invertMask": "Inverser le masque", + "waitingSetupComplete": "🔄 En attente de la fin de l'installation initiale...", + "waitingTokenGenerator": "🔄 En attente de l'initialisation du générateur de jetons...", + "uploadImageFirst": "Téléchargez d'abord une image pour capturer les couleurs disponibles", + "pleaseWaitInitialSetup": "🔄 Veuillez attendre la fin de l'installation initiale avant de charger les progrès.", + "pleaseWaitFileSetup": "🔄 Veuillez attendre la fin de l'installation initiale avant de charger depuis un fichier.", + "errorSavingProgress": "❌ Erreur lors de la sauvegarde des progrès", + "errorLoadingProgress": "❌ Erreur lors du chargement des progrès", + "fileOperationsAvailable": "📂 Les opérations sur fichiers (Charger/Télécharger) sont maintenant disponibles !", + "tokenGeneratorReady": "🔑 Générateur de jetons prêt !", + "paintingStats": "Statistiques de Peinture", + "enablePaintingSpeedLimit": "Activer la limite de vitesse de peinture (contrôle de la taille de lot)", + "enableNotifications": "Activer les notifications", + "notifyOnChargesThreshold": "Notifier quand les charges atteignent le seuil", + "onlyWhenNotFocused": "Seulement quand l'onglet n'est pas au premier plan", + "repeatEvery": "Répéter toutes les", + "minutesPl": "minute(s)", + "grantPermission": "Accorder la Permission", + "test": "Test", + "showAllColorsIncluding": "Afficher toutes les couleurs (y compris indisponibles)", + "chromaWeight": "Poids de Chrominance", + "downloadPreview": "Télécharger l'Aperçu", + "apply": "Appliquer", + "cancel": "Annuler", + "fit": "Ajuster" + "hundred": "100%", + "clear": "Effacer", + "invert": "Inverser", + "reprocessingOverlay": "Retraitement de l'overlay...", + "overlayUpdated": "Overlay mis à jour !", + "notificationsEnabled": "Notifications activées.", + "notificationsPermissionDenied": "Permission de notifications refusée.", + "overlayEnabled": "Overlay activé.", + "overlayDisabled": "Overlay désactivé.", + "tokenSourceSet": "Source de jeton définie à : {source}", + "batchModeSet": "Mode lot défini à : {mode}", + "randomRange": "Plage Aléatoire", + "normalFixedSize": "Taille Fixe Normale", + "advancedColorSettingsReset": "Paramètres de couleur avancés réinitialisés.", + "shiftRowAltColumn": "Shift = Ligne • Alt = Colonne", + "hideTurnstileBtn": "Masquer", + "turnstileInstructions": "Cloudflare Turnstile — veuillez compléter la vérification si affichée", + "uploadImageFirstColors": "Veuillez d'abord télécharger une image pour capturer les couleurs disponibles", + "availableColors": "Couleurs Disponibles ({count})", + "colorTooltip": "ID : {id}\nRVB : {rgb}" +} diff --git a/lang/id.json b/lang/id.json index c4332d1..ca1d503 100644 --- a/lang/id.json +++ b/lang/id.json @@ -71,4 +71,66 @@ "captchaFailed": "❌ Gagal menyelesaikan CAPTCHA. Lukis satu piksel secara manual.", "automation": "Automasi", "noChargesThreshold": "⌛ Menunggu muatan mencapai {threshold}. Saat ini: {current}. Berikutnya dalam {time}..." -} \ No newline at end of file +, + "tokenCapturedSuccess": "Token captured successfully! You can start the bot now.", + "notificationsNotSupported": "Notifications are not supported in this browser.", + "chargesReadyNotification": "WPlace — Charges Ready", + "chargesReadyMessage": "Charges ready: {current} / {max}. Threshold: {threshold}.", + "testNotificationTitle": "WPlace — Test", + "testNotificationMessage": "This is a test notification.", + "showStats": "Show Stats", + "compactMode": "Compact Mode", + "refreshCharges": "Refresh Charges", + "closeStats": "Close Stats", + "zoomOut": "Zoom Out", + "zoomIn": "Zoom In", + "fitToView": "Fit to view", + "actualSize": "Actual size (100%)", + "panMode": "Pan (drag to move view)", + "clearIgnoredPixels": "Clear all ignored pixels", + "invertMask": "Invert mask", + "waitingSetupComplete": "🔄 Waiting for initial setup to complete...", + "waitingTokenGenerator": "🔄 Waiting for token generator to initialize...", + "uploadImageFirst": "Upload an image first to capture available colors", + "pleaseWaitInitialSetup": "🔄 Please wait for the initial setup to complete before loading progress.", + "pleaseWaitFileSetup": "🔄 Please wait for the initial setup to complete before loading from file.", + "errorSavingProgress": "❌ Error saving progress", + "errorLoadingProgress": "❌ Error loading progress", + "fileOperationsAvailable": "📂 File operations (Load/Upload) are now available!", + "tokenGeneratorReady": "🔑 Token generator ready!", + "paintingStats": "Painting Stats", + "enablePaintingSpeedLimit": "Enable painting speed limit (batch size control)", + "enableNotifications": "Enable notifications", + "notifyOnChargesThreshold": "Notify when charges reach threshold", + "onlyWhenNotFocused": "Only when tab is not focused", + "repeatEvery": "Repeat every", + "minutesPl": "minute(s)", + "grantPermission": "Grant Permission", + "test": "Test", + "showAllColorsIncluding": "Show All Colors (including unavailable)", + "chromaWeight": "Chroma Weight", + "downloadPreview": "Download Preview", + "apply": "Apply", + "cancel": "Cancel", + "fit": "Fit", + "hundred": "100%", + "clear": "Clear", + "invert": "Invert", + "reprocessingOverlay": "Re-processing overlay...", + "overlayUpdated": "Overlay updated!", + "notificationsEnabled": "Notifications enabled.", + "notificationsPermissionDenied": "Notifications permission denied.", + "overlayEnabled": "Overlay enabled.", + "overlayDisabled": "Overlay disabled.", + "tokenSourceSet": "Token source set to: {source}", + "batchModeSet": "Batch mode set to: {mode}", + "randomRange": "Random Range", + "normalFixedSize": "Normal Fixed Size", + "advancedColorSettingsReset": "Advanced color settings reset.", + "shiftRowAltColumn": "Shift = Row • Alt = Column", + "hideTurnstileBtn": "Hide", + "turnstileInstructions": "Cloudflare Turnstile — please complete the check if shown", + "uploadImageFirstColors": "Please upload an image first to capture available colors", + "availableColors": "Available Colors ({count})", + "colorTooltip": "ID: {id}\nRGB: {rgb}" +} diff --git a/lang/ja.json b/lang/ja.json index ad5dfe5..622f1a5 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -72,5 +72,66 @@ "captchaSolving": "🔑 Turnstile トークン生成中...", "captchaFailed": "❌ トークン生成失敗。フォールバックを試行...", "automation": "自動化", - "noChargesThreshold": "⌛ チャージ {threshold} を待機中。現在 {current}。次は {time} 後..." -} \ No newline at end of file + "noChargesThreshold": "⌛ チャージ {threshold} を待機中。現在 {current}。次は {time} 後...", + "tokenCapturedSuccess": "トークンキャプチャ成功!ボットを開始できます。", + "notificationsNotSupported": "このブラウザでは通知がサポートされていません。", + "chargesReadyNotification": "WPlace — チャージ準備完了", + "chargesReadyMessage": "チャージ準備完了: {current} / {max}。しきい値: {threshold}。", + "testNotificationTitle": "WPlace — テスト" + "testNotificationMessage": "これはテスト通知です。", + "showStats": "統計表示", + "compactMode": "コンパクトモード", + "refreshCharges": "チャージ更新", + "closeStats": "統計を閉じる", + "zoomOut": "縮小", + "zoomIn": "拡大", + "fitToView": "画面に合わせる", + "actualSize": "実際のサイズ (100%)", + "panMode": "パン(ドラッグで移動)", + "clearIgnoredPixels": "無視されたピクセルをすべてクリア", + "invertMask": "マスクを反転", + "waitingSetupComplete": "🔄 初期セットアップの完了を待機中...", + "waitingTokenGenerator": "🔄 トークンジェネレータの初期化を待機中...", + "uploadImageFirst": "利用可能な色を取得するために最初に画像をアップロードしてください", + "pleaseWaitInitialSetup": "🔄 進捗を読み込む前に初期セットアップの完了をお待ちください。", + "pleaseWaitFileSetup": "🔄 ファイルから読み込む前に初期セットアップの完了をお待ちください。", + "errorSavingProgress": "❌ 進捗の保存エラー", + "errorLoadingProgress": "❌ 進捗の読み込みエラー", + "fileOperationsAvailable": "📂 ファイル操作(読み込み/アップロード)が利用可能になりました!", + "tokenGeneratorReady": "🔑 トークンジェネレータ準備完了!", + "paintingStats": "描画統計", + "enablePaintingSpeedLimit": "描画速度制限を有効化(バッチサイズ制御)", + "enableNotifications": "通知を有効化", + "notifyOnChargesThreshold": "チャージがしきい値に達したら通知", + "onlyWhenNotFocused": "タブが非アクティブの時のみ", + "repeatEvery": "繰り返し間隔", + "minutesPl": "分" + "grantPermission": "許可を与える", + "test": "テスト" + "showAllColorsIncluding": "すべての色を表示(利用不可含む)", + "chromaWeight": "彩度重み", + "downloadPreview": "プレビューダウンロード", + "apply": "適用", + "cancel": "キャンセル", + "fit": "フィット" + "hundred": "100%", + "clear": "クリア", + "invert": "反転", + "reprocessingOverlay": "オーバーレイ再処理中...", + "overlayUpdated": "オーバーレイ更新完了!", + "notificationsEnabled": "通知が有効になりました。", + "notificationsPermissionDenied": "通知の許可が拒否されました。", + "overlayEnabled": "オーバーレイが有効になりました。", + "overlayDisabled": "オーバーレイが無効になりました。", + "tokenSourceSet": "トークンソースを設定: {source}", + "batchModeSet": "バッチモードを設定: {mode}", + "randomRange": "ランダム範囲", + "normalFixedSize": "通常固定サイズ", + "advancedColorSettingsReset": "高度な色設定をリセットしました。", + "shiftRowAltColumn": "Shift = 行 • Alt = 列", + "hideTurnstileBtn": "隠す", + "turnstileInstructions": "Cloudflare Turnstile — 表示された場合は確認を完了してください", + "uploadImageFirstColors": "利用可能な色を取得するために最初に画像をアップロードしてください", + "availableColors": "利用可能な色 ({count})", + "colorTooltip": "ID: {id}\nRGB: {rgb}" +} diff --git a/lang/ko.json b/lang/ko.json index 4d2ac27..28db43d 100644 --- a/lang/ko.json +++ b/lang/ko.json @@ -72,5 +72,66 @@ "captchaSolving": "🔑 Turnstile 토큰 생성 중...", "captchaFailed": "❌ 토큰 생성 실패. 폴백 시도...", "automation": "자동화", - "noChargesThreshold": "⌛ 횟수가 {threshold} 에 도달할 때까지 대기 중. 현재 {current}. 다음 {time} 후..." -} \ No newline at end of file + "noChargesThreshold": "⌛ 횟수가 {threshold} 에 도달할 때까지 대기 중. 현재 {current}. 다음 {time} 후...", + "tokenCapturedSuccess": "Token captured successfully! You can start the bot now.", + "notificationsNotSupported": "Notifications are not supported in this browser.", + "chargesReadyNotification": "WPlace — Charges Ready", + "chargesReadyMessage": "Charges ready: {current} / {max}. Threshold: {threshold}.", + "testNotificationTitle": "WPlace — Test", + "testNotificationMessage": "This is a test notification.", + "showStats": "Show Stats", + "compactMode": "Compact Mode", + "refreshCharges": "Refresh Charges", + "closeStats": "Close Stats", + "zoomOut": "Zoom Out", + "zoomIn": "Zoom In", + "fitToView": "Fit to view", + "actualSize": "Actual size (100%)", + "panMode": "Pan (drag to move view)", + "clearIgnoredPixels": "Clear all ignored pixels", + "invertMask": "Invert mask", + "waitingSetupComplete": "🔄 Waiting for initial setup to complete...", + "waitingTokenGenerator": "🔄 Waiting for token generator to initialize...", + "uploadImageFirst": "Upload an image first to capture available colors", + "pleaseWaitInitialSetup": "🔄 Please wait for the initial setup to complete before loading progress.", + "pleaseWaitFileSetup": "🔄 Please wait for the initial setup to complete before loading from file.", + "errorSavingProgress": "❌ Error saving progress", + "errorLoadingProgress": "❌ Error loading progress", + "fileOperationsAvailable": "📂 File operations (Load/Upload) are now available!", + "tokenGeneratorReady": "🔑 Token generator ready!", + "paintingStats": "Painting Stats", + "enablePaintingSpeedLimit": "Enable painting speed limit (batch size control)", + "enableNotifications": "Enable notifications", + "notifyOnChargesThreshold": "Notify when charges reach threshold", + "onlyWhenNotFocused": "Only when tab is not focused", + "repeatEvery": "Repeat every", + "minutesPl": "minute(s)", + "grantPermission": "Grant Permission", + "test": "Test", + "showAllColorsIncluding": "Show All Colors (including unavailable)", + "chromaWeight": "Chroma Weight", + "downloadPreview": "Download Preview", + "apply": "Apply", + "cancel": "Cancel", + "fit": "Fit", + "hundred": "100%", + "clear": "Clear", + "invert": "Invert", + "reprocessingOverlay": "Re-processing overlay...", + "overlayUpdated": "Overlay updated!", + "notificationsEnabled": "Notifications enabled.", + "notificationsPermissionDenied": "Notifications permission denied.", + "overlayEnabled": "Overlay enabled.", + "overlayDisabled": "Overlay disabled.", + "tokenSourceSet": "Token source set to: {source}", + "batchModeSet": "Batch mode set to: {mode}", + "randomRange": "Random Range", + "normalFixedSize": "Normal Fixed Size", + "advancedColorSettingsReset": "Advanced color settings reset.", + "shiftRowAltColumn": "Shift = Row • Alt = Column", + "hideTurnstileBtn": "Hide", + "turnstileInstructions": "Cloudflare Turnstile — please complete the check if shown", + "uploadImageFirstColors": "Please upload an image first to capture available colors", + "availableColors": "Available Colors ({count})", + "colorTooltip": "ID: {id}\nRGB: {rgb}" +} diff --git a/lang/pt.json b/lang/pt.json index 29df222..b575858 100644 --- a/lang/pt.json +++ b/lang/pt.json @@ -69,6 +69,66 @@ "waitCharges": "Aguardar até as cargas atingirem", "captchaSolving": "🤖 Tentando resolver o CAPTCHA...", "captchaFailed": "❌ Falha ao resolver CAPTCHA. Pinte um pixel manualmente.", - "automation": "Automação", - "noChargesThreshold": "⌛ Aguardando cargas atingirem {threshold}. Atual: {current}. Próxima em {time}..." + "automation": "Automação", "noChargesThreshold": "⌛ Aguardando cargas atingirem {threshold}. Atual: {current}. Próxima em {time}...", + "tokenCapturedSuccess": "Token capturado com sucesso! Você pode iniciar o bot agora.", + "notificationsNotSupported": "Notificações não são suportadas neste navegador.", + "chargesReadyNotification": "WPlace — Cargas Prontas", + "chargesReadyMessage": "Cargas prontas: {current} / {max}. Limite: {threshold}.", + "testNotificationTitle": "WPlace — Teste", + "testNotificationMessage": "Esta é uma notificação de teste.", + "showStats": "Mostrar Estatísticas", + "compactMode": "Modo Compacto", + "refreshCharges": "Atualizar Cargas", + "closeStats": "Fechar Estatísticas", + "zoomOut": "Diminuir Zoom", + "zoomIn": "Aumentar Zoom", + "fitToView": "Ajustar à visualização", + "actualSize": "Tamanho real (100%)", + "panMode": "Arrastar (arrastar para mover visualização)", + "clearIgnoredPixels": "Limpar pixels ignorados", + "invertMask": "Inverter máscara", + "waitingSetupComplete": "🔄 Aguardando conclusão da configuração inicial...", + "waitingTokenGenerator": "🔄 Aguardando inicialização do gerador de tokens...", + "uploadImageFirst": "Faça upload de uma imagem primeiro para capturar cores disponíveis", + "pleaseWaitInitialSetup": "🔄 Aguarde a conclusão da configuração inicial antes de carregar o progresso.", + "pleaseWaitFileSetup": "🔄 Aguarde a conclusão da configuração inicial antes de carregar do arquivo.", + "errorSavingProgress": "❌ Erro ao salvar progresso", + "errorLoadingProgress": "❌ Erro ao carregar progresso", + "fileOperationsAvailable": "📂 Operações de arquivo (Carregar/Upload) agora disponíveis!", + "tokenGeneratorReady": "🔑 Gerador de tokens pronto!", + "paintingStats": "Estatísticas de Pintura", + "enablePaintingSpeedLimit": "Ativar limite de velocidade de pintura (controle de tamanho de lote)", + "enableNotifications": "Ativar notificações", + "notifyOnChargesThreshold": "Notificar quando as cargas atingirem o limite", + "onlyWhenNotFocused": "Apenas quando a aba não está em foco", + "repeatEvery": "Repetir a cada", + "minutesPl": "minuto(s)", + "grantPermission": "Conceder Permissão", + "test": "Teste", + "showAllColorsIncluding": "Mostrar Todas as Cores (incluindo indisponíveis)", + "chromaWeight": "Peso da Saturação", + "downloadPreview": "Baixar Pré-visualização", + "apply": "Aplicar", + "cancel": "Cancelar", + "fit": "Ajustar", + "hundred": "100%", + "clear": "Limpar", + "invert": "Inverter", + "reprocessingOverlay": "Reprocessando sobreposição...", + "overlayUpdated": "Sobreposição atualizada!", + "notificationsEnabled": "Notificações ativadas.", + "notificationsPermissionDenied": "Permissão de notificações negada.", + "overlayEnabled": "Sobreposição ativada.", + "overlayDisabled": "Sobreposição desativada.", + "tokenSourceSet": "Fonte de token definida para: {source}", + "batchModeSet": "Modo de lote definido para: {mode}", + "randomRange": "Intervalo Aleatório", + "normalFixedSize": "Tamanho Fixo Normal", + "advancedColorSettingsReset": "Configurações avançadas de cor redefinidas.", + "shiftRowAltColumn": "Shift = Linha • Alt = Coluna", + "hideTurnstileBtn": "Ocultar", + "turnstileInstructions": "Cloudflare Turnstile — complete a verificação se mostrada", + "uploadImageFirstColors": "Faça upload de uma imagem primeiro para capturar cores disponíveis", + "availableColors": "Cores Disponíveis ({count})", + "colorTooltip": "ID: {id}\nRGB: {rgb}" } \ No newline at end of file diff --git a/lang/ru.json b/lang/ru.json index 318d071..8176e5a 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -69,6 +69,66 @@ "waitCharges": "Ждать до накопления зарядов", "captchaSolving": "🔑 Генерирую Turnstile токен...", "captchaFailed": "❌ Не удалось сгенерировать Turnstile токен. Пробую резервный метод...", - "automation": "Автоматизация", - "noChargesThreshold": "⌛ Ожидание зарядов до {threshold}. Сейчас {current}. Следующий через {time}..." + "automation": "Автоматизация", "noChargesThreshold": "⌛ Ожидание зарядов до {threshold}. Сейчас {current}. Следующий через {time}...", + "tokenCapturedSuccess": "Токен успешно захвачен! Теперь можно запускать бота.", + "notificationsNotSupported": "Уведомления не поддерживаются в этом браузере.", + "chargesReadyNotification": "WPlace — Заряды готовы", + "chargesReadyMessage": "Заряды готовы: {current} / {max}. Порог: {threshold}.", + "testNotificationTitle": "WPlace — Тест", + "testNotificationMessage": "Это тестовое уведомление.", + "showStats": "Показать статистику", + "compactMode": "Компактный режим", + "refreshCharges": "Обновить заряды", + "closeStats": "Закрыть статистику", + "zoomOut": "Уменьшить", + "zoomIn": "Увеличить", + "fitToView": "По размеру экрана", + "actualSize": "Реальный размер (100%)", + "panMode": "Перемещение (перетаскивание для движения)", + "clearIgnoredPixels": "Очистить игнорируемые пиксели", + "invertMask": "Инвертировать маску", + "waitingSetupComplete": "🔄 Ждём завершения начальной настройки...", + "waitingTokenGenerator": "🔄 Ждём инициализации генератора токенов...", + "uploadImageFirst": "Сначала загрузите изображение для захвата доступных цветов", + "pleaseWaitInitialSetup": "🔄 Пожалуйста, подождите завершения начальной настройки перед загрузкой прогресса.", + "pleaseWaitFileSetup": "🔄 Пожалуйста, подождите завершения начальной настройки перед загрузкой из файла.", + "errorSavingProgress": "❌ Ошибка сохранения прогресса", + "errorLoadingProgress": "❌ Ошибка загрузки прогресса", + "fileOperationsAvailable": "📂 Файловые операции (Загрузка/Выгрузка) теперь доступны!", + "tokenGeneratorReady": "🔑 Генератор токенов готов!", + "paintingStats": "Статистика рисования", + "enablePaintingSpeedLimit": "Включить ограничение скорости рисования (контроль размера пакета)", + "enableNotifications": "Включить уведомления", + "notifyOnChargesThreshold": "Уведомлять при достижении порога зарядов", + "onlyWhenNotFocused": "Только когда вкладка не в фокусе", + "repeatEvery": "Повторять каждые", + "minutesPl": "минут(а/ы)", + "grantPermission": "Дать разрешение", + "test": "Тест", + "showAllColorsIncluding": "Показать все цвета (включая недоступные)", + "chromaWeight": "Вес цветности", + "downloadPreview": "Скачать превью", + "apply": "Применить", + "cancel": "Отменить", + "fit": "По размеру", + "hundred": "100%", + "clear": "Очистить", + "invert": "Инвертировать", + "reprocessingOverlay": "Переобработка оверлея...", + "overlayUpdated": "Оверлей обновлён!", + "notificationsEnabled": "Уведомления включены.", + "notificationsPermissionDenied": "В разрешении на уведомления отказано.", + "overlayEnabled": "Оверлей включён.", + "overlayDisabled": "Оверлей отключён.", + "tokenSourceSet": "Источник токенов установлен: {source}", + "batchModeSet": "Режим пакета установлен: {mode}", + "randomRange": "Случайный диапазон", + "normalFixedSize": "Нормальный фиксированный размер", + "advancedColorSettingsReset": "Продвинутые настройки цвета сброшены.", + "shiftRowAltColumn": "Shift = Строка • Alt = Столбец", + "hideTurnstileBtn": "Скрыть", + "turnstileInstructions": "Cloudflare Turnstile — пожалуйста, завершите проверку, если она показана", + "uploadImageFirstColors": "Пожалуйста, сначала загрузите изображение для захвата доступных цветов", + "availableColors": "Доступные цвета ({count})", + "colorTooltip": "ID: {id}\nRGB: {rgb}" } \ No newline at end of file diff --git a/lang/tr.json b/lang/tr.json index e70988e..f56b467 100644 --- a/lang/tr.json +++ b/lang/tr.json @@ -70,5 +70,66 @@ "captchaSolving": "🤖 CAPTCHA çözülmeye çalışılıyor...", "captchaFailed": "❌ Oto-CAPTCHA başarısız oldu. Bir pikseli manuel boyayın.", "automation": "Otomasyon", - "noChargesThreshold": "⌛ Hakların {threshold} seviyesine ulaşması bekleniyor. Şu anda {current}. Sonraki {time} içinde..." -} \ No newline at end of file + "noChargesThreshold": "⌛ Hakların {threshold} seviyesine ulaşması bekleniyor. Şu anda {current}. Sonraki {time} içinde...", + "tokenCapturedSuccess": "Token captured successfully! You can start the bot now.", + "notificationsNotSupported": "Notifications are not supported in this browser.", + "chargesReadyNotification": "WPlace — Charges Ready", + "chargesReadyMessage": "Charges ready: {current} / {max}. Threshold: {threshold}.", + "testNotificationTitle": "WPlace — Test", + "testNotificationMessage": "This is a test notification.", + "showStats": "Show Stats", + "compactMode": "Compact Mode", + "refreshCharges": "Refresh Charges", + "closeStats": "Close Stats", + "zoomOut": "Zoom Out", + "zoomIn": "Zoom In", + "fitToView": "Fit to view", + "actualSize": "Actual size (100%)", + "panMode": "Pan (drag to move view)", + "clearIgnoredPixels": "Clear all ignored pixels", + "invertMask": "Invert mask", + "waitingSetupComplete": "🔄 Waiting for initial setup to complete...", + "waitingTokenGenerator": "🔄 Waiting for token generator to initialize...", + "uploadImageFirst": "Upload an image first to capture available colors", + "pleaseWaitInitialSetup": "🔄 Please wait for the initial setup to complete before loading progress.", + "pleaseWaitFileSetup": "🔄 Please wait for the initial setup to complete before loading from file.", + "errorSavingProgress": "❌ Error saving progress", + "errorLoadingProgress": "❌ Error loading progress", + "fileOperationsAvailable": "📂 File operations (Load/Upload) are now available!", + "tokenGeneratorReady": "🔑 Token generator ready!", + "paintingStats": "Painting Stats", + "enablePaintingSpeedLimit": "Enable painting speed limit (batch size control)", + "enableNotifications": "Enable notifications", + "notifyOnChargesThreshold": "Notify when charges reach threshold", + "onlyWhenNotFocused": "Only when tab is not focused", + "repeatEvery": "Repeat every", + "minutesPl": "minute(s)", + "grantPermission": "Grant Permission", + "test": "Test", + "showAllColorsIncluding": "Show All Colors (including unavailable)", + "chromaWeight": "Chroma Weight", + "downloadPreview": "Download Preview", + "apply": "Apply", + "cancel": "Cancel", + "fit": "Fit", + "hundred": "100%", + "clear": "Clear", + "invert": "Invert", + "reprocessingOverlay": "Re-processing overlay...", + "overlayUpdated": "Overlay updated!", + "notificationsEnabled": "Notifications enabled.", + "notificationsPermissionDenied": "Notifications permission denied.", + "overlayEnabled": "Overlay enabled.", + "overlayDisabled": "Overlay disabled.", + "tokenSourceSet": "Token source set to: {source}", + "batchModeSet": "Batch mode set to: {mode}", + "randomRange": "Random Range", + "normalFixedSize": "Normal Fixed Size", + "advancedColorSettingsReset": "Advanced color settings reset.", + "shiftRowAltColumn": "Shift = Row • Alt = Column", + "hideTurnstileBtn": "Hide", + "turnstileInstructions": "Cloudflare Turnstile — please complete the check if shown", + "uploadImageFirstColors": "Please upload an image first to capture available colors", + "availableColors": "Available Colors ({count})", + "colorTooltip": "ID: {id}\nRGB: {rgb}" +} diff --git a/lang/uk.json b/lang/uk.json index 5010d49..1f02fca 100644 --- a/lang/uk.json +++ b/lang/uk.json @@ -70,5 +70,66 @@ "captchaSolving": "🔑 Генерація токена Turnstile...", "captchaFailed": "❌ Не вдалося згенерувати токен Turnstile. Використовую запасний метод...", "automation": "Автоматизація", - "noChargesThreshold": "⌛ Очікування, доки заряди досягнуть {threshold}. Зараз {current}. Наступне через {time}..." -} \ No newline at end of file + "noChargesThreshold": "⌛ Очікування, доки заряди досягнуть {threshold}. Зараз {current}. Наступне через {time}...", + "tokenCapturedSuccess": "Token captured successfully! You can start the bot now.", + "notificationsNotSupported": "Notifications are not supported in this browser.", + "chargesReadyNotification": "WPlace — Charges Ready", + "chargesReadyMessage": "Charges ready: {current} / {max}. Threshold: {threshold}.", + "testNotificationTitle": "WPlace — Test", + "testNotificationMessage": "This is a test notification.", + "showStats": "Show Stats", + "compactMode": "Compact Mode", + "refreshCharges": "Refresh Charges", + "closeStats": "Close Stats", + "zoomOut": "Zoom Out", + "zoomIn": "Zoom In", + "fitToView": "Fit to view", + "actualSize": "Actual size (100%)", + "panMode": "Pan (drag to move view)", + "clearIgnoredPixels": "Clear all ignored pixels", + "invertMask": "Invert mask", + "waitingSetupComplete": "🔄 Waiting for initial setup to complete...", + "waitingTokenGenerator": "🔄 Waiting for token generator to initialize...", + "uploadImageFirst": "Upload an image first to capture available colors", + "pleaseWaitInitialSetup": "🔄 Please wait for the initial setup to complete before loading progress.", + "pleaseWaitFileSetup": "🔄 Please wait for the initial setup to complete before loading from file.", + "errorSavingProgress": "❌ Error saving progress", + "errorLoadingProgress": "❌ Error loading progress", + "fileOperationsAvailable": "📂 File operations (Load/Upload) are now available!", + "tokenGeneratorReady": "🔑 Token generator ready!", + "paintingStats": "Painting Stats", + "enablePaintingSpeedLimit": "Enable painting speed limit (batch size control)", + "enableNotifications": "Enable notifications", + "notifyOnChargesThreshold": "Notify when charges reach threshold", + "onlyWhenNotFocused": "Only when tab is not focused", + "repeatEvery": "Repeat every", + "minutesPl": "minute(s)", + "grantPermission": "Grant Permission", + "test": "Test", + "showAllColorsIncluding": "Show All Colors (including unavailable)", + "chromaWeight": "Chroma Weight", + "downloadPreview": "Download Preview", + "apply": "Apply", + "cancel": "Cancel", + "fit": "Fit", + "hundred": "100%", + "clear": "Clear", + "invert": "Invert", + "reprocessingOverlay": "Re-processing overlay...", + "overlayUpdated": "Overlay updated!", + "notificationsEnabled": "Notifications enabled.", + "notificationsPermissionDenied": "Notifications permission denied.", + "overlayEnabled": "Overlay enabled.", + "overlayDisabled": "Overlay disabled.", + "tokenSourceSet": "Token source set to: {source}", + "batchModeSet": "Batch mode set to: {mode}", + "randomRange": "Random Range", + "normalFixedSize": "Normal Fixed Size", + "advancedColorSettingsReset": "Advanced color settings reset.", + "shiftRowAltColumn": "Shift = Row • Alt = Column", + "hideTurnstileBtn": "Hide", + "turnstileInstructions": "Cloudflare Turnstile — please complete the check if shown", + "uploadImageFirstColors": "Please upload an image first to capture available colors", + "availableColors": "Available Colors ({count})", + "colorTooltip": "ID: {id}\nRGB: {rgb}" +} diff --git a/lang/vi.json b/lang/vi.json index b27b74b..3846965 100644 --- a/lang/vi.json +++ b/lang/vi.json @@ -1,6 +1,6 @@ { "title": "WPlace Auto-Image", - "toggleOverlay": "Toggle Overlay", + "toggleOverlay": "Bật/tắt lớp phủ", "scanColors": "Quét màu", "uploadImage": "Tải lên hình ảnh", "resizeImage": "Thay đổi kích thước", @@ -70,5 +70,66 @@ "captchaSolving": "🤖 Đang cố gắng giải CAPTCHA...", "captchaFailed": "❌ Giải CAPTCHA tự động thất bại. Vui lòng vẽ một pixel thủ công.", "automation": "Tự động hóa", - "noChargesThreshold": "⌛ Đang chờ số lần sạc đạt {threshold}. Hiện tại {current}. Lần tiếp theo trong {time}..." -} \ No newline at end of file + "noChargesThreshold": "⌛ Đang chờ số lần sạc đạt {threshold}. Hiện tại {current}. Lần tiếp theo trong {time}...", + "tokenCapturedSuccess": "Đã bắt token thành công! Bạn có thể khởi động bot ngay.", + "notificationsNotSupported": "Thông báo không được hỗ trợ trong trình duyệt này.", + "chargesReadyNotification": "WPlace — Điện tích sẵn sàng", + "chargesReadyMessage": "Điện tích sẵn sàng: {current} / {max}. Ngưỡng: {threshold}.", + "testNotificationTitle": "WPlace — Thử nghiệm" + "testNotificationMessage": "Đây là thông báo thử nghiệm.", + "showStats": "Hiển thị thống kê", + "compactMode": "Chế độ gọn", + "refreshCharges": "Làm mới điện tích", + "closeStats": "Đóng thống kê", + "zoomOut": "Thu nhỏ", + "zoomIn": "Phóng to", + "fitToView": "Vừa màn hình", + "actualSize": "Kích thước thực (100%)", + "panMode": "Di chuyển (kéo để di chuyển)", + "clearIgnoredPixels": "Xóa tất cả pixel bị bỏ qua", + "invertMask": "Đảo ngược mặt nạ", + "waitingSetupComplete": "🔄 Đang chờ thiết lập ban đầu hoàn tất...", + "waitingTokenGenerator": "🔄 Đang chờ bộ tạo token khởi tạo...", + "uploadImageFirst": "Tải lên hình ảnh trước để bắt màu có sẵn", + "pleaseWaitInitialSetup": "🔄 Vui lòng đợi thiết lập ban đầu hoàn tất trước khi tải tiến trình.", + "pleaseWaitFileSetup": "🔄 Vui lòng đợi thiết lập ban đầu hoàn tất trước khi tải từ tệp.", + "errorSavingProgress": "❌ Lỗi khi lưu tiến trình", + "errorLoadingProgress": "❌ Lỗi khi tải tiến trình", + "fileOperationsAvailable": "📂 Các thao tác tệp (Tải/Upload) đã có sẵn!", + "tokenGeneratorReady": "🔑 Bộ tạo token đã sẵn sàng!", + "paintingStats": "Thống kê vẽ", + "enablePaintingSpeedLimit": "Bật giới hạn tốc độ vẽ (kiểm soát kích thước lô)", + "enableNotifications": "Bật thông báo", + "notifyOnChargesThreshold": "Thông báo khi điện tích đạt ngưỡng", + "onlyWhenNotFocused": "Chỉ khi tab không được chọn", + "repeatEvery": "Lặp lại mỗi", + "minutesPl": "phút" + "grantPermission": "Cấp quyền", + "test": "Thử nghiệm" + "showAllColorsIncluding": "Hiển thị tất cả màu (bao gồm không có sẵn)", + "chromaWeight": "Trọng số độ bão hòa", + "downloadPreview": "Tải xuống xem trước", + "apply": "Áp dụng", + "cancel": "Hủy", + "fit": "Vừa khung" + "hundred": "100%", + "clear": "Xóa", + "invert": "Đảo ngược", + "reprocessingOverlay": "Đang xử lý lại lớp phủ...", + "overlayUpdated": "Lớp phủ đã cập nhật!", + "notificationsEnabled": "Đã bật thông báo.", + "notificationsPermissionDenied": "Quyền thông báo bị từ chối.", + "overlayEnabled": "Đã bật lớp phủ.", + "overlayDisabled": "Đã tắt lớp phủ.", + "tokenSourceSet": "Nguồn token được đặt thành: {source}", + "batchModeSet": "Chế độ lô được đặt thành: {mode}", + "randomRange": "Phạm vi ngẫu nhiên", + "normalFixedSize": "Kích thước cố định bình thường", + "advancedColorSettingsReset": "Đã đặt lại cài đặt màu nâng cao.", + "shiftRowAltColumn": "Shift = Hàng • Alt = Cột", + "hideTurnstileBtn": "Ẩn", + "turnstileInstructions": "Cloudflare Turnstile — vui lòng hoàn thành kiểm tra nếu được hiển thị", + "uploadImageFirstColors": "Vui lòng tải lên hình ảnh trước để bắt màu có sẵn", + "availableColors": "Màu có sẵn ({count})", + "colorTooltip": "ID: {id}\nRGB: {rgb}" +} diff --git a/lang/zh-CN.json b/lang/zh-CN.json index 7c74493..89b207e 100644 --- a/lang/zh-CN.json +++ b/lang/zh-CN.json @@ -28,7 +28,7 @@ "pixels": "像素", "charges": "次数", "estimatedTime": "预计时间", - "initMessage": "点击"上传图像"开始", + "initMessage": "点击\"上传图像\"开始", "waitingInit": "正在等待初始化...", "initializingToken": "🔧 正在初始化 Turnstile 令牌生成器...", "tokenReady": "✅ 令牌生成器已就绪 - 可以开始绘制!", @@ -72,5 +72,66 @@ "captchaSolving": "🔑 正在生成 Turnstile 令牌...", "captchaFailed": "❌ 令牌生成失败。尝试回退方法...", "automation": "自动化", - "noChargesThreshold": "⌛ 等待次数达到 {threshold}。当前 {current}。下次在 {time}..." -} \ No newline at end of file + "noChargesThreshold": "⌛ 等待次数达到 {threshold}。当前 {current}。下次在 {time}...", + "tokenCapturedSuccess": "Token captured successfully! You can start the bot now.", + "notificationsNotSupported": "Notifications are not supported in this browser.", + "chargesReadyNotification": "WPlace — Charges Ready", + "chargesReadyMessage": "Charges ready: {current} / {max}. Threshold: {threshold}.", + "testNotificationTitle": "WPlace — Test", + "testNotificationMessage": "This is a test notification.", + "showStats": "Show Stats", + "compactMode": "Compact Mode", + "refreshCharges": "Refresh Charges", + "closeStats": "Close Stats", + "zoomOut": "Zoom Out", + "zoomIn": "Zoom In", + "fitToView": "Fit to view", + "actualSize": "Actual size (100%)", + "panMode": "Pan (drag to move view)", + "clearIgnoredPixels": "Clear all ignored pixels", + "invertMask": "Invert mask", + "waitingSetupComplete": "🔄 Waiting for initial setup to complete...", + "waitingTokenGenerator": "🔄 Waiting for token generator to initialize...", + "uploadImageFirst": "Upload an image first to capture available colors", + "pleaseWaitInitialSetup": "🔄 Please wait for the initial setup to complete before loading progress.", + "pleaseWaitFileSetup": "🔄 Please wait for the initial setup to complete before loading from file.", + "errorSavingProgress": "❌ Error saving progress", + "errorLoadingProgress": "❌ Error loading progress", + "fileOperationsAvailable": "📂 File operations (Load/Upload) are now available!", + "tokenGeneratorReady": "🔑 Token generator ready!", + "paintingStats": "Painting Stats", + "enablePaintingSpeedLimit": "Enable painting speed limit (batch size control)", + "enableNotifications": "Enable notifications", + "notifyOnChargesThreshold": "Notify when charges reach threshold", + "onlyWhenNotFocused": "Only when tab is not focused", + "repeatEvery": "Repeat every", + "minutesPl": "minute(s)", + "grantPermission": "Grant Permission", + "test": "Test", + "showAllColorsIncluding": "Show All Colors (including unavailable)", + "chromaWeight": "Chroma Weight", + "downloadPreview": "Download Preview", + "apply": "Apply", + "cancel": "Cancel", + "fit": "Fit", + "hundred": "100%", + "clear": "Clear", + "invert": "Invert", + "reprocessingOverlay": "Re-processing overlay...", + "overlayUpdated": "Overlay updated!", + "notificationsEnabled": "Notifications enabled.", + "notificationsPermissionDenied": "Notifications permission denied.", + "overlayEnabled": "Overlay enabled.", + "overlayDisabled": "Overlay disabled.", + "tokenSourceSet": "Token source set to: {source}", + "batchModeSet": "Batch mode set to: {mode}", + "randomRange": "Random Range", + "normalFixedSize": "Normal Fixed Size", + "advancedColorSettingsReset": "Advanced color settings reset.", + "shiftRowAltColumn": "Shift = Row • Alt = Column", + "hideTurnstileBtn": "Hide", + "turnstileInstructions": "Cloudflare Turnstile — please complete the check if shown", + "uploadImageFirstColors": "Please upload an image first to capture available colors", + "availableColors": "Available Colors ({count})", + "colorTooltip": "ID: {id}\nRGB: {rgb}" +} diff --git a/lang/zh-TW.json b/lang/zh-TW.json index e95b440..89d9574 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -72,5 +72,66 @@ "captchaSolving": "🔑 正在產生 Turnstile 令牌...", "captchaFailed": "❌ 令牌產生失敗。嘗試回退方法...", "automation": "自動化", - "noChargesThreshold": "⌛ 等待次數達到 {threshold}。目前 {current}。下次在 {time}..." -} \ No newline at end of file + "noChargesThreshold": "⌛ 等待次數達到 {threshold}。目前 {current}。下次在 {time}...", + "tokenCapturedSuccess": "Token captured successfully! You can start the bot now.", + "notificationsNotSupported": "Notifications are not supported in this browser.", + "chargesReadyNotification": "WPlace — Charges Ready", + "chargesReadyMessage": "Charges ready: {current} / {max}. Threshold: {threshold}.", + "testNotificationTitle": "WPlace — Test", + "testNotificationMessage": "This is a test notification.", + "showStats": "Show Stats", + "compactMode": "Compact Mode", + "refreshCharges": "Refresh Charges", + "closeStats": "Close Stats", + "zoomOut": "Zoom Out", + "zoomIn": "Zoom In", + "fitToView": "Fit to view", + "actualSize": "Actual size (100%)", + "panMode": "Pan (drag to move view)", + "clearIgnoredPixels": "Clear all ignored pixels", + "invertMask": "Invert mask", + "waitingSetupComplete": "🔄 Waiting for initial setup to complete...", + "waitingTokenGenerator": "🔄 Waiting for token generator to initialize...", + "uploadImageFirst": "Upload an image first to capture available colors", + "pleaseWaitInitialSetup": "🔄 Please wait for the initial setup to complete before loading progress.", + "pleaseWaitFileSetup": "🔄 Please wait for the initial setup to complete before loading from file.", + "errorSavingProgress": "❌ Error saving progress", + "errorLoadingProgress": "❌ Error loading progress", + "fileOperationsAvailable": "📂 File operations (Load/Upload) are now available!", + "tokenGeneratorReady": "🔑 Token generator ready!", + "paintingStats": "Painting Stats", + "enablePaintingSpeedLimit": "Enable painting speed limit (batch size control)", + "enableNotifications": "Enable notifications", + "notifyOnChargesThreshold": "Notify when charges reach threshold", + "onlyWhenNotFocused": "Only when tab is not focused", + "repeatEvery": "Repeat every", + "minutesPl": "minute(s)", + "grantPermission": "Grant Permission", + "test": "Test", + "showAllColorsIncluding": "Show All Colors (including unavailable)", + "chromaWeight": "Chroma Weight", + "downloadPreview": "Download Preview", + "apply": "Apply", + "cancel": "Cancel", + "fit": "Fit", + "hundred": "100%", + "clear": "Clear", + "invert": "Invert", + "reprocessingOverlay": "Re-processing overlay...", + "overlayUpdated": "Overlay updated!", + "notificationsEnabled": "Notifications enabled.", + "notificationsPermissionDenied": "Notifications permission denied.", + "overlayEnabled": "Overlay enabled.", + "overlayDisabled": "Overlay disabled.", + "tokenSourceSet": "Token source set to: {source}", + "batchModeSet": "Batch mode set to: {mode}", + "randomRange": "Random Range", + "normalFixedSize": "Normal Fixed Size", + "advancedColorSettingsReset": "Advanced color settings reset.", + "shiftRowAltColumn": "Shift = Row • Alt = Column", + "hideTurnstileBtn": "Hide", + "turnstileInstructions": "Cloudflare Turnstile — please complete the check if shown", + "uploadImageFirstColors": "Please upload an image first to capture available colors", + "availableColors": "Available Colors ({count})", + "colorTooltip": "ID: {id}\nRGB: {rgb}" +}