feat: Google Drive OAuth via http://localhost redirect (no public domain required)
- Switch redirect URI from server IP to http://localhost (works everywhere) - Add manual code exchange flow: user copies URL from browser, pastes in app - New PHP action gdrive_oauth_exchange to exchange auth code for refresh token - Fix null bug in gdrive_oauth_exchange (was read before initialization) - Add #gdrive-code-section UI with input + submit button in index.html - Update _gdriveAuthorize() to show code section and store redirect_uri - Add _gdriveSubmitCode() JS function for manual code submission - Update setup wizard and backup tab to show http://localhost as redirect URI - Add 5 new translation keys (gdrive_redirect_uri_hint, gdrive_code_title, gdrive_code_hint, gdrive_code_submit, gdrive_code_empty) in all 5 languages - Update gdrive_oauth_steps in all translations to reflect new flow - Document Google Drive OAuth setup in README.md - Dark mode: comprehensive fix for 30+ components with hardcoded light colors
This commit is contained in:
@@ -762,6 +762,53 @@
|
||||
"card_hint": "Zeige während des Kochens Tipps zur Wiederverwendung von Abfällen (Schalen, Kochwasser usw.). Standardmäßig deaktiviert.",
|
||||
"label": "Tipps beim Kochen anzeigen"
|
||||
},
|
||||
"backup": {
|
||||
"tab": "Backup",
|
||||
"local_title": "Lokales Backup",
|
||||
"local_hint": "Täglicher Datenbank-Snapshot. Konfiguriere, wie viele Tage Backups aufbewahrt werden.",
|
||||
"enabled": "Tägliches automatisches Backup aktivieren",
|
||||
"retention_days": "Aufbewahrung (Tage)",
|
||||
"retention_info": "Backups werden aufbewahrt für",
|
||||
"backup_now": "Jetzt sichern",
|
||||
"backing_up": "Sicherung läuft…",
|
||||
"backed_up": "Sicherung abgeschlossen",
|
||||
"backup_error": "Sicherungsfehler",
|
||||
"last_backup": "Letztes Backup",
|
||||
"no_backup_yet": "Noch kein Backup erstellt",
|
||||
"list_empty": "Keine Backups verfügbar",
|
||||
"restore_btn": "Wiederherstellen",
|
||||
"restore_confirm": "Backup wiederherstellen",
|
||||
"delete_btn": "Löschen",
|
||||
"delete_confirm": "Backup löschen",
|
||||
"gdrive_title": "Google Drive",
|
||||
"gdrive_hint": "Backups automatisch via OAuth 2.0 auf Google Drive hochladen. Keine externen Bibliotheken erforderlich.",
|
||||
"gdrive_enabled": "Google Drive Backup aktivieren",
|
||||
"gdrive_folder_id": "Drive-Ordner-ID",
|
||||
"gdrive_folder_id_hint": "Kopiere die ID aus der Drive-Ordner-URL: …/folders/<strong>ID</strong>",
|
||||
"gdrive_retention_days": "Drive-Aufbewahrung (Tage, 0=alles behalten)",
|
||||
"gdrive_test": "Verbindung testen",
|
||||
"gdrive_ok": "Verbindung erfolgreich!",
|
||||
"gdrive_error": "Verbindung fehlgeschlagen",
|
||||
"gdrive_push_now": "Jetzt auf Drive hochladen",
|
||||
"gdrive_pushing": "Wird hochgeladen…",
|
||||
"gdrive_pushed": "Auf Drive hochgeladen",
|
||||
"gdrive_wizard_hint": "Optional: täglich automatisch via OAuth 2.0 auf Google Drive sichern.",
|
||||
"gdrive_skip": "Überspringen — später in Einstellungen konfigurieren",
|
||||
"gdrive_client_id": "Client-ID",
|
||||
"gdrive_client_secret": "Client-Secret",
|
||||
"gdrive_redirect_uri_hint": "Füge <strong>http://localhost</strong> als autorisierten Weiterleitungs-URI in der Google Cloud Console hinzu. Funktioniert auf jedem Server, auch ohne öffentliche Domain.",
|
||||
"gdrive_code_title": "Autorisierungs-URL oder Code einfügen",
|
||||
"gdrive_code_hint": "Nach der Autorisierung öffnet der Browser http://localhost und zeigt möglicherweise einen Verbindungsfehler — das ist normal. Kopiere die URL aus der Adressleiste (z.B. <code>http://localhost/?code=4%2F0A...</code>) und füge sie hier ein.",
|
||||
"gdrive_code_submit": "Bestätigen",
|
||||
"gdrive_code_empty": "Bitte zuerst die URL oder den Autorisierungscode einfügen",
|
||||
"gdrive_redirect_uri_label": "Redirect-URI (in Google Cloud Console eintragen):",
|
||||
"gdrive_oauth_authorize": "Mit Google autorisieren",
|
||||
"gdrive_oauth_authorized": "Autorisiert",
|
||||
"gdrive_oauth_not_authorized": "Noch nicht autorisiert",
|
||||
"gdrive_oauth_window_opened": "Browserfenster geöffnet — autorisieren und zurückkehren",
|
||||
"gdrive_oauth_how_to": "OAuth 2.0 einrichten (Schritt für Schritt)",
|
||||
"gdrive_oauth_steps": "<li>Gehe zu <a href='https://console.cloud.google.com/' target='_blank' rel='noopener'>console.cloud.google.com</a> und wähle dein Projekt</li><li>Aktiviere die <strong>Google Drive API</strong>: <em>APIs & Dienste → APIs aktivieren → Google Drive API</em></li><li>Gehe zu <em>APIs & Dienste → Anmeldedaten → Anmeldedaten erstellen → OAuth-Client-ID</em></li><li>Anwendungstyp: <strong>Webanwendung</strong>; füge die unten angezeigte URL als <em>Autorisierter Weiterleitungs-URI</em> hinzu</li><li>Kopiere <strong>Client-ID</strong> und <strong>Client-Secret</strong> in die Felder oben und speichere</li><li>Klicke auf <strong>Mit Google autorisieren</strong>: melde dich an und erteile den Zugriff</li><li>Das Fenster schließt sich automatisch und Backups sind bereit</li>"
|
||||
},
|
||||
"info": {
|
||||
"tab": "Info",
|
||||
"ai_title": "Gemini AI — Token-Nutzung",
|
||||
|
||||
@@ -762,6 +762,53 @@
|
||||
"card_hint": "During cooking, show tips on how to reuse scraps generated in each step (peels, cooking water, etc.). Disabled by default.",
|
||||
"label": "Show tips during cooking"
|
||||
},
|
||||
"backup": {
|
||||
"tab": "Backup",
|
||||
"local_title": "Local Backup",
|
||||
"local_hint": "Daily database snapshot. Configure how many days of backups to keep.",
|
||||
"enabled": "Enable daily automatic backup",
|
||||
"retention_days": "Retention (days)",
|
||||
"retention_info": "Backups are kept for",
|
||||
"backup_now": "Backup Now",
|
||||
"backing_up": "Backing up…",
|
||||
"backed_up": "Backup complete",
|
||||
"backup_error": "Backup error",
|
||||
"last_backup": "Last backup",
|
||||
"no_backup_yet": "No backup has been created yet",
|
||||
"list_empty": "No backups available",
|
||||
"restore_btn": "Restore",
|
||||
"restore_confirm": "Restore backup",
|
||||
"delete_btn": "Delete",
|
||||
"delete_confirm": "Delete backup",
|
||||
"gdrive_title": "Google Drive",
|
||||
"gdrive_hint": "Automatically back up to Google Drive via OAuth 2.0. No external libraries required.",
|
||||
"gdrive_enabled": "Enable Google Drive backup",
|
||||
"gdrive_folder_id": "Drive Folder ID",
|
||||
"gdrive_folder_id_hint": "Copy the ID from the Drive folder URL: …/folders/<strong>ID</strong>",
|
||||
"gdrive_retention_days": "Drive retention (days, 0=keep all)",
|
||||
"gdrive_test": "Test Connection",
|
||||
"gdrive_ok": "Connection successful!",
|
||||
"gdrive_error": "Connection failed",
|
||||
"gdrive_push_now": "Upload to Drive Now",
|
||||
"gdrive_pushing": "Uploading…",
|
||||
"gdrive_pushed": "Uploaded to Drive",
|
||||
"gdrive_wizard_hint": "Optional: automatically back up to Google Drive daily via OAuth 2.0.",
|
||||
"gdrive_skip": "Skip — configure later in Settings",
|
||||
"gdrive_client_id": "Client ID",
|
||||
"gdrive_client_secret": "Client Secret",
|
||||
"gdrive_redirect_uri_hint": "Add <strong>http://localhost</strong> as an authorized redirect URI in Google Cloud Console. This works on any server, even without a public domain.",
|
||||
"gdrive_code_title": "Paste the authorization URL or code",
|
||||
"gdrive_code_hint": "After authorizing, the browser will open http://localhost and may show a connection error — that is expected. Copy the URL from the address bar (e.g. <code>http://localhost/?code=4%2F0A...</code>) and paste it here.",
|
||||
"gdrive_code_submit": "Submit",
|
||||
"gdrive_code_empty": "Paste the URL or authorization code first",
|
||||
"gdrive_redirect_uri_label": "Redirect URI (add this in Google Cloud Console):",
|
||||
"gdrive_oauth_authorize": "Authorize with Google",
|
||||
"gdrive_oauth_authorized": "Authorized",
|
||||
"gdrive_oauth_not_authorized": "Not authorized yet",
|
||||
"gdrive_oauth_window_opened": "Browser window opened — authorize and come back",
|
||||
"gdrive_oauth_how_to": "How to set up OAuth 2.0 (step by step)",
|
||||
"gdrive_oauth_steps": "<li>Go to <a href='https://console.cloud.google.com/' target='_blank' rel='noopener'>console.cloud.google.com</a> and select your project</li><li>Enable the <strong>Google Drive API</strong>: <em>APIs & Services → Enable APIs → Google Drive API</em></li><li>Go to <em>APIs & Services → Credentials → Create Credentials → OAuth client ID</em></li><li>Application type: <strong>Web application</strong>; add <strong>http://localhost</strong> as an <em>Authorized redirect URI</em></li><li>Copy the <strong>Client ID</strong> and <strong>Client Secret</strong> into the fields above and save</li><li>Click <strong>Authorize with Google</strong>, sign in and grant access</li><li>The browser will open <code>http://localhost</code> (a connection error is expected): copy the URL from the address bar and paste it in the field that appears below</li>"
|
||||
},
|
||||
"info": {
|
||||
"tab": "Info",
|
||||
"ai_title": "Gemini AI — Token Usage",
|
||||
|
||||
@@ -759,6 +759,53 @@
|
||||
"card_title": "♻️ Consejos sin desperdicios",
|
||||
"card_hint": "Durante la cocción, muestra consejos sobre cómo reutilizar los restos generados en cada paso (peladuras, agua de cocción, etc.). Desactivado por defecto.",
|
||||
"label": "Mostrar consejos durante la cocción"
|
||||
},
|
||||
"backup": {
|
||||
"tab": "Copia de seguridad",
|
||||
"local_title": "Copia local",
|
||||
"local_hint": "Instantánea diaria de la base de datos. Configura cuántos días de copias de seguridad conservar.",
|
||||
"enabled": "Activar copia de seguridad diaria automática",
|
||||
"retention_days": "Retención (días)",
|
||||
"retention_info": "Las copias se conservan durante",
|
||||
"backup_now": "Hacer copia ahora",
|
||||
"backing_up": "Haciendo copia…",
|
||||
"backed_up": "Copia completada",
|
||||
"backup_error": "Error en la copia",
|
||||
"last_backup": "Última copia",
|
||||
"no_backup_yet": "Aún no se ha creado ninguna copia",
|
||||
"list_empty": "No hay copias disponibles",
|
||||
"restore_btn": "Restaurar",
|
||||
"restore_confirm": "Restaurar la copia",
|
||||
"delete_btn": "Eliminar",
|
||||
"delete_confirm": "Eliminar la copia",
|
||||
"gdrive_title": "Google Drive",
|
||||
"gdrive_hint": "Copias de seguridad automáticas en Google Drive via OAuth 2.0. No se requieren bibliotecas externas.",
|
||||
"gdrive_enabled": "Activar copia en Google Drive",
|
||||
"gdrive_folder_id": "ID de carpeta de Drive",
|
||||
"gdrive_folder_id_hint": "Copia el ID desde la URL de la carpeta de Drive: …/folders/<strong>ID</strong>",
|
||||
"gdrive_retention_days": "Retención en Drive (días, 0=mantener todo)",
|
||||
"gdrive_test": "Probar conexión",
|
||||
"gdrive_ok": "Conexión exitosa!",
|
||||
"gdrive_error": "Conexión fallida",
|
||||
"gdrive_push_now": "Subir a Drive ahora",
|
||||
"gdrive_pushing": "Subiendo…",
|
||||
"gdrive_pushed": "Subido a Drive",
|
||||
"gdrive_wizard_hint": "Opcional: copia de seguridad diaria automática en Google Drive via OAuth 2.0.",
|
||||
"gdrive_skip": "Omitir — configurar después en Ajustes",
|
||||
"gdrive_client_id": "Client ID",
|
||||
"gdrive_client_secret": "Client Secret",
|
||||
"gdrive_redirect_uri_hint": "Agrega <strong>http://localhost</strong> como URI de redireccionamiento autorizado en Google Cloud Console. Funciona en cualquier servidor, incluso sin dominio público.",
|
||||
"gdrive_code_title": "Pegar la URL o el código de autorización",
|
||||
"gdrive_code_hint": "Tras autorizar, el navegador abrirá http://localhost y puede mostrar un error de conexión — es normal. Copia la URL de la barra de direcciones (ej. <code>http://localhost/?code=4%2F0A...</code>) y pégala aquí.",
|
||||
"gdrive_code_submit": "Confirmar",
|
||||
"gdrive_code_empty": "Pega primero la URL o el código de autorización",
|
||||
"gdrive_redirect_uri_label": "URI de redirección (agregar en Google Cloud Console):",
|
||||
"gdrive_oauth_authorize": "Autorizar con Google",
|
||||
"gdrive_oauth_authorized": "Autorizado",
|
||||
"gdrive_oauth_not_authorized": "Aún no autorizado",
|
||||
"gdrive_oauth_window_opened": "Ventana abierta — autoriza y regresa aquí",
|
||||
"gdrive_oauth_how_to": "Cómo configurar OAuth 2.0 (paso a paso)",
|
||||
"gdrive_oauth_steps": "<li>Ve a <a href='https://console.cloud.google.com/' target='_blank' rel='noopener'>console.cloud.google.com</a> y selecciona tu proyecto</li><li>Habilita la <strong>API de Google Drive</strong>: <em>API y servicios → Habilitar API → Google Drive API</em></li><li>Ve a <em>API y servicios → Credenciales → Crear credenciales → ID de cliente OAuth</em></li><li>Tipo de aplicación: <strong>Aplicación web</strong>; agrega la URL mostrada abajo como <em>URI de redirección autorizado</em></li><li>Copia el <strong>Client ID</strong> y el <strong>Client Secret</strong> en los campos de arriba y guarda</li><li>Haz clic en <strong>Autorizar con Google</strong>: inicia sesión en tu cuenta de Google y concede acceso</li><li>La ventana se cierra automáticamente al finalizar y las copias de seguridad están listas</li>"
|
||||
}
|
||||
},
|
||||
"expiry": {
|
||||
|
||||
@@ -759,6 +759,53 @@
|
||||
"card_title": "♻️ Conseils zéro déchet",
|
||||
"card_hint": "Pendant la cuisson, affichez des conseils pour réutiliser les déchets produits à chaque étape (épluchures, eau de cuisson, etc.). Désactivé par défaut.",
|
||||
"label": "Afficher les conseils pendant la cuisson"
|
||||
},
|
||||
"backup": {
|
||||
"tab": "Sauvegarde",
|
||||
"local_title": "Sauvegarde locale",
|
||||
"local_hint": "Instantané quotidien de la base de données. Configurez le nombre de jours de rétention.",
|
||||
"enabled": "Activer la sauvegarde automatique quotidienne",
|
||||
"retention_days": "Rétention (jours)",
|
||||
"retention_info": "Les sauvegardes sont conservées pendant",
|
||||
"backup_now": "Sauvegarder maintenant",
|
||||
"backing_up": "Sauvegarde en cours…",
|
||||
"backed_up": "Sauvegarde terminée",
|
||||
"backup_error": "Erreur de sauvegarde",
|
||||
"last_backup": "Dernière sauvegarde",
|
||||
"no_backup_yet": "Aucune sauvegarde créée",
|
||||
"list_empty": "Aucune sauvegarde disponible",
|
||||
"restore_btn": "Restaurer",
|
||||
"restore_confirm": "Restaurer la sauvegarde",
|
||||
"delete_btn": "Supprimer",
|
||||
"delete_confirm": "Supprimer la sauvegarde",
|
||||
"gdrive_title": "Google Drive",
|
||||
"gdrive_hint": "Sauvegardez automatiquement sur Google Drive via OAuth 2.0. Aucune bibliothèque externe requise.",
|
||||
"gdrive_enabled": "Activer la sauvegarde Google Drive",
|
||||
"gdrive_folder_id": "ID du dossier Drive",
|
||||
"gdrive_folder_id_hint": "Copiez l'ID depuis l'URL du dossier Drive : …/folders/<strong>ID</strong>",
|
||||
"gdrive_retention_days": "Rétention Drive (jours, 0=tout garder)",
|
||||
"gdrive_test": "Tester la connexion",
|
||||
"gdrive_ok": "Connexion réussie !",
|
||||
"gdrive_error": "Échec de la connexion",
|
||||
"gdrive_push_now": "Téléverser sur Drive maintenant",
|
||||
"gdrive_pushing": "Téléversement en cours…",
|
||||
"gdrive_pushed": "Téléversé sur Drive",
|
||||
"gdrive_wizard_hint": "Optionnel : sauvegarde quotidienne automatique sur Google Drive via OAuth 2.0.",
|
||||
"gdrive_skip": "Passer — configurer plus tard dans Paramètres",
|
||||
"gdrive_client_id": "Client ID",
|
||||
"gdrive_client_secret": "Client Secret",
|
||||
"gdrive_redirect_uri_hint": "Ajoute <strong>http://localhost</strong> comme URI de redirection autorisé dans la Google Cloud Console. Fonctionne sur n'importe quel serveur, même sans domaine public.",
|
||||
"gdrive_code_title": "Coller l'URL ou le code d'autorisation",
|
||||
"gdrive_code_hint": "Après autorisation, le navigateur ouvre http://localhost et peut afficher une erreur de connexion — c'est normal. Copie l'URL dans la barre d'adresse (ex. <code>http://localhost/?code=4%2F0A...</code>) et colle-la ici.",
|
||||
"gdrive_code_submit": "Confirmer",
|
||||
"gdrive_code_empty": "Coller d'abord l'URL ou le code d'autorisation",
|
||||
"gdrive_redirect_uri_label": "URI de redirection (ajouter dans Google Cloud Console) :",
|
||||
"gdrive_oauth_authorize": "Autoriser avec Google",
|
||||
"gdrive_oauth_authorized": "Autorisé",
|
||||
"gdrive_oauth_not_authorized": "Pas encore autorisé",
|
||||
"gdrive_oauth_window_opened": "Fenêtre ouverte — autorisez et revenez ici",
|
||||
"gdrive_oauth_how_to": "Configurer OAuth 2.0 (étape par étape)",
|
||||
"gdrive_oauth_steps": "<li>Allez sur <a href='https://console.cloud.google.com/' target='_blank' rel='noopener'>console.cloud.google.com</a> et sélectionnez votre projet</li><li>Activez l’<strong>API Google Drive</strong> : <em>API et services → Activer les API → Google Drive API</em></li><li>Allez dans <em>API et services → Identifiants → Créer des identifiants → ID client OAuth</em></li><li>Type d’application : <strong>Application Web</strong> ; ajoutez l’URL affichée ci-dessous comme <em>URI de redirection autorisé</em></li><li>Copiez le <strong>Client ID</strong> et le <strong>Client Secret</strong> dans les champs ci-dessus et enregistrez</li><li>Cliquez sur <strong>Autoriser avec Google</strong> : connectez-vous et accordez l’accès</li><li>La fenêtre se ferme automatiquement une fois terminé et les sauvegardes sont prêtes</li>"
|
||||
}
|
||||
},
|
||||
"expiry": {
|
||||
|
||||
@@ -762,6 +762,53 @@
|
||||
"card_hint": "Durante la cottura, mostra consigli su come riutilizzare gli scarti prodotti in ogni passo (bucce, acqua di cottura, ecc.). Disattivo per impostazione predefinita.",
|
||||
"label": "Mostra suggerimenti durante la cottura"
|
||||
},
|
||||
"backup": {
|
||||
"tab": "Backup",
|
||||
"local_title": "Backup Locale",
|
||||
"local_hint": "Snapshot giornaliero del database. Configura quanti giorni di backup conservare.",
|
||||
"enabled": "Backup automatico quotidiano",
|
||||
"retention_days": "Giorni di retention",
|
||||
"retention_info": "I backup vengono conservati per",
|
||||
"backup_now": "Backup Ora",
|
||||
"backing_up": "Backup in corso…",
|
||||
"backed_up": "Backup completato",
|
||||
"backup_error": "Errore backup",
|
||||
"last_backup": "Ultimo backup",
|
||||
"no_backup_yet": "Nessun backup ancora eseguito",
|
||||
"list_empty": "Nessun backup disponibile",
|
||||
"restore_btn": "Ripristina",
|
||||
"restore_confirm": "Ripristinare il backup",
|
||||
"delete_btn": "Elimina",
|
||||
"delete_confirm": "Eliminare il backup",
|
||||
"gdrive_title": "Google Drive",
|
||||
"gdrive_hint": "Backup automatici su Google Drive via OAuth 2.0. Nessuna libreria esterna richiesta.",
|
||||
"gdrive_enabled": "Abilita backup Google Drive",
|
||||
"gdrive_folder_id": "ID Cartella Drive",
|
||||
"gdrive_folder_id_hint": "Copia l'ID dalla URL della cartella Drive: …/folders/<strong>ID</strong>",
|
||||
"gdrive_retention_days": "Retention Drive (giorni, 0=tutto)",
|
||||
"gdrive_test": "Testa Connessione",
|
||||
"gdrive_ok": "Connessione riuscita!",
|
||||
"gdrive_error": "Connessione fallita",
|
||||
"gdrive_push_now": "Carica Ora su Drive",
|
||||
"gdrive_pushing": "Upload in corso…",
|
||||
"gdrive_pushed": "Caricato su Drive",
|
||||
"gdrive_wizard_hint": "Opzionale: backup giornaliero automatico su Google Drive via OAuth 2.0.",
|
||||
"gdrive_skip": "Salta — configura dopo in Impostazioni",
|
||||
"gdrive_client_id": "Client ID",
|
||||
"gdrive_client_secret": "Client Secret",
|
||||
"gdrive_redirect_uri_label": "Redirect URI (da aggiungere in Google Cloud Console):",
|
||||
"gdrive_redirect_uri_hint": "Aggiungi <strong>http://localhost</strong> come URI di reindirizzamento autorizzato in Google Cloud Console. Funziona su qualsiasi server, anche senza dominio pubblico.",
|
||||
"gdrive_oauth_authorize": "Autorizza con Google",
|
||||
"gdrive_oauth_authorized": "Autorizzato",
|
||||
"gdrive_oauth_not_authorized": "Non ancora autorizzato",
|
||||
"gdrive_oauth_window_opened": "Finestra aperta — autorizza e torna qui",
|
||||
"gdrive_oauth_how_to": "Come configurare OAuth 2.0 (passo dopo passo)",
|
||||
"gdrive_oauth_steps": "<li>Vai su <a href='https://console.cloud.google.com/' target='_blank' rel='noopener'>console.cloud.google.com</a> e seleziona il progetto</li><li>Abilita la <strong>Google Drive API</strong>: <em>API e servizi → Abilita API → Google Drive API</em></li><li>Vai su <em>API e servizi → Credenziali → Crea credenziali → ID client OAuth 2.0</em></li><li>Tipo applicazione: <strong>Applicazione web</strong>; aggiungi <strong>http://localhost</strong> come <em>URI di reindirizzamento autorizzato</em></li><li>Copia <strong>Client ID</strong> e <strong>Client Secret</strong> nei campi qui sopra e salva</li><li>Clicca <strong>Autorizza con Google</strong>, accedi e concedi l'accesso</li><li>Il browser aprirà <code>http://localhost</code> (possibile errore di connessione è normale): copia l'URL dalla barra degli indirizzi e incollalo nel campo che appare qui sotto</li>",
|
||||
"gdrive_code_title": "Incolla l'URL o il codice di autorizzazione",
|
||||
"gdrive_code_hint": "Dopo aver autorizzato, il browser aprirà http://localhost e potrebbe mostrare un errore. Copia l'URL dalla barra degli indirizzi (es. <code>http://localhost/?code=4%2F0A...</code>) e incollalo qui.",
|
||||
"gdrive_code_submit": "Conferma",
|
||||
"gdrive_code_empty": "Incolla prima l'URL o il codice di autorizzazione"
|
||||
},
|
||||
"info": {
|
||||
"tab": "Info",
|
||||
"ai_title": "Gemini AI — Utilizzo Token",
|
||||
|
||||
Reference in New Issue
Block a user