From 74d6035f4a31cd2dece7cba96b33496bb3b43b98 Mon Sep 17 00:00:00 2001 From: hugo Date: Thu, 26 Feb 2026 16:16:48 +0100 Subject: [PATCH] chore: workover for ssh preferences --- .../CredentialsPanel/CredentialsPanel.css | 106 --------- .../CredentialsPanel/CredentialsPanel.tsx | 207 ------------------ .../components/CredentialsPanel/index.ts | 1 - .../components/SettingsView/SettingsView.css | 16 ++ .../components/SettingsView/SettingsView.tsx | 205 ++++++----------- src/renderer/components/index.ts | 1 - src/renderer/i18n/locales/de.json | 25 +-- src/renderer/i18n/locales/en.json | 25 +-- src/renderer/i18n/locales/es.json | 25 +-- src/renderer/i18n/locales/fr.json | 31 +-- src/renderer/i18n/locales/it.json | 25 +-- 11 files changed, 130 insertions(+), 537 deletions(-) delete mode 100644 src/renderer/components/CredentialsPanel/CredentialsPanel.css delete mode 100644 src/renderer/components/CredentialsPanel/CredentialsPanel.tsx delete mode 100644 src/renderer/components/CredentialsPanel/index.ts diff --git a/src/renderer/components/CredentialsPanel/CredentialsPanel.css b/src/renderer/components/CredentialsPanel/CredentialsPanel.css deleted file mode 100644 index 8c6262a..0000000 --- a/src/renderer/components/CredentialsPanel/CredentialsPanel.css +++ /dev/null @@ -1,106 +0,0 @@ -.credentials-panel { - display: flex; - flex-direction: column; - height: 100%; -} - -.credentials-tabs { - display: flex; - gap: 4px; - padding: 8px 12px; - border-bottom: 1px solid var(--vscode-panel-border); - background-color: var(--vscode-sideBar-background); -} - -.credentials-tabs button { - padding: 6px 12px; - background-color: transparent; - border: none; - border-radius: 4px; - color: var(--vscode-foreground); - font-size: 12px; - cursor: pointer; - transition: background-color 0.15s; -} - -.credentials-tabs button:hover { - background-color: var(--vscode-toolbar-hoverBackground); -} - -.credentials-tabs button.active { - background-color: var(--vscode-button-background); - color: var(--vscode-button-foreground); -} - -.credentials-content { - flex: 1; - overflow-y: auto; - padding: 16px; -} - -.credentials-form { - display: flex; - flex-direction: column; - gap: 16px; -} - -.credentials-header h4 { - margin: 0 0 8px; - font-size: 16px; - font-weight: 600; - color: var(--vscode-foreground); -} - -.credentials-header p { - font-size: 12px; - margin: 0; - line-height: 1.5; -} - -.credentials-field { - display: flex; - flex-direction: column; - gap: 6px; -} - -.credentials-field label { - display: flex; - align-items: center; - justify-content: space-between; - font-size: 12px; - font-weight: 500; - color: var(--vscode-descriptionForeground); -} - -.credentials-field input { - padding: 8px 12px; - border-radius: 4px; - font-size: 13px; -} - -.toggle-visibility { - background: none; - border: none; - padding: 2px 4px; - cursor: pointer; - font-size: 14px; - opacity: 0.7; - transition: opacity 0.15s; -} - -.toggle-visibility:hover { - opacity: 1; -} - -.credentials-actions { - display: flex; - gap: 8px; - margin-top: 8px; - padding-top: 16px; - border-top: 1px solid var(--vscode-panel-border); -} - -.credentials-actions button { - padding: 8px 16px; - font-size: 12px; -} diff --git a/src/renderer/components/CredentialsPanel/CredentialsPanel.tsx b/src/renderer/components/CredentialsPanel/CredentialsPanel.tsx deleted file mode 100644 index 0085fca..0000000 --- a/src/renderer/components/CredentialsPanel/CredentialsPanel.tsx +++ /dev/null @@ -1,207 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { showToast } from '../Toast'; -import { useI18n } from '../../i18n'; -import './CredentialsPanel.css'; - -interface Credentials { - ftpHost?: string; - ftpUser?: string; - ftpPassword?: string; - sshHost?: string; - sshUser?: string; - sshKeyPath?: string; -} - -export const CredentialsPanel: React.FC = () => { - const { t: tr } = useI18n(); - const [credentials, setCredentials] = useState({ - ftpHost: '', - ftpUser: '', - ftpPassword: '', - sshHost: '', - sshUser: '', - sshKeyPath: '', - }); - const [activeTab, setActiveTab] = useState<'ftp' | 'ssh'>('ftp'); - const [showTokens, _setShowTokens] = useState(false); - - // Load saved credentials (in a real app, use secure storage) - useEffect(() => { - const loadCredentials = async () => { - try { - const savedCreds = localStorage.getItem('bds-credentials'); - if (savedCreds) { - setCredentials(JSON.parse(savedCreds)); - } - } catch (error) { - console.error(tr('credentials.error.load'), error); - } - }; - loadCredentials(); - }, []); - - const handleSave = async () => { - try { - // Save to localStorage (in production, use secure storage) - localStorage.setItem('bds-credentials', JSON.stringify(credentials)); - - showToast.success(tr('credentials.toast.saved')); - } catch (error) { - console.error(tr('credentials.error.save'), error); - showToast.error(tr('credentials.toast.saveFailed')); - } - }; - - const handleClear = (type: 'ftp' | 'ssh') => { - const newCreds = { ...credentials }; - switch (type) { - case 'ftp': - newCreds.ftpHost = ''; - newCreds.ftpUser = ''; - newCreds.ftpPassword = ''; - break; - case 'ssh': - newCreds.sshHost = ''; - newCreds.sshUser = ''; - newCreds.sshKeyPath = ''; - break; - } - setCredentials(newCreds); - }; - - const handleTestConnection = async (type: 'ftp' | 'ssh') => { - showToast.loading(tr('credentials.toast.testing', { type: type.toUpperCase() })); - - // Simulate connection test - await new Promise(resolve => setTimeout(resolve, 1500)); - - // In a real implementation, this would test the actual connection - showToast.dismiss(); - showToast.error(tr('credentials.toast.connectionFailed')); - }; - - return ( -
-
- - -
- -
- {activeTab === 'ftp' && ( -
-
-

{tr('credentials.ftp.title')}

-

- {tr('credentials.ftp.description')} -

-
- -
- - setCredentials({ ...credentials, ftpHost: e.target.value })} - /> -
- -
- - setCredentials({ ...credentials, ftpUser: e.target.value })} - /> -
- -
- - setCredentials({ ...credentials, ftpPassword: e.target.value })} - /> -
- -
- - - -
-
- )} - - {activeTab === 'ssh' && ( -
-
-

{tr('credentials.ssh.title')}

-

- {tr('credentials.ssh.description')} -

-
- -
- - setCredentials({ ...credentials, sshHost: e.target.value })} - /> -
- -
- - setCredentials({ ...credentials, sshUser: e.target.value })} - /> -
- -
- - setCredentials({ ...credentials, sshKeyPath: e.target.value })} - /> -
- -
- - - -
-
- )} -
-
- ); -}; - -export default CredentialsPanel; diff --git a/src/renderer/components/CredentialsPanel/index.ts b/src/renderer/components/CredentialsPanel/index.ts deleted file mode 100644 index b1404d5..0000000 --- a/src/renderer/components/CredentialsPanel/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { CredentialsPanel } from './CredentialsPanel'; diff --git a/src/renderer/components/SettingsView/SettingsView.css b/src/renderer/components/SettingsView/SettingsView.css index 138ff05..2f6d632 100644 --- a/src/renderer/components/SettingsView/SettingsView.css +++ b/src/renderer/components/SettingsView/SettingsView.css @@ -257,6 +257,22 @@ opacity: 1; } +/* Info banner */ +.setting-info-banner { + padding: 10px 16px; + margin: 0 0 4px; + background: var(--vscode-editorInfo-background, rgba(0, 120, 212, 0.1)); + border-left: 3px solid var(--vscode-editorInfo-foreground, #3794ff); + border-radius: 3px; + font-size: 12px; + line-height: 1.5; + color: var(--vscode-foreground); +} + +.setting-info-banner p { + margin: 0; +} + /* Action buttons */ .setting-actions { display: flex; diff --git a/src/renderer/components/SettingsView/SettingsView.tsx b/src/renderer/components/SettingsView/SettingsView.tsx index ab35416..91eb656 100644 --- a/src/renderer/components/SettingsView/SettingsView.tsx +++ b/src/renderer/components/SettingsView/SettingsView.tsx @@ -23,14 +23,11 @@ export const scrollToSettingsSection = (category: SettingsCategory) => { // Settings categories interface Credentials { - // FTP Publishing - ftpHost: string; - ftpUser: string; - ftpPassword: string; // SSH Publishing sshHost: string; sshUser: string; - sshKeyPath: string; + sshRemotePath: string; + sshMode: 'scp' | 'rsync'; } interface CategoryMetadata { @@ -48,12 +45,10 @@ const RENDER_LANGUAGE_LABEL_KEY: Record = { }; const defaultCredentials: Credentials = { - ftpHost: '', - ftpUser: '', - ftpPassword: '', sshHost: '', sshUser: '', - sshKeyPath: '', + sshRemotePath: '', + sshMode: 'scp', }; // Search icon for the search bar @@ -137,7 +132,6 @@ export const SettingsView: React.FC = () => { } = useAppStore(); const [searchQuery, setSearchQuery] = useState(''); const [credentials, setCredentials] = useState(defaultCredentials); - const [showSecrets, setShowSecrets] = useState(false); const contentRef = useRef(null); // Project settings @@ -304,23 +298,11 @@ export const SettingsView: React.FC = () => { } }; - const handleClearCredentials = (type: 'ftp' | 'ssh') => { - const newCreds = { ...credentials }; - switch (type) { - case 'ftp': - newCreds.ftpHost = ''; - newCreds.ftpUser = ''; - newCreds.ftpPassword = ''; - break; - case 'ssh': - newCreds.sshHost = ''; - newCreds.sshUser = ''; - newCreds.sshKeyPath = ''; - break; - } + const handleClearCredentials = () => { + const newCreds = { ...credentials, sshHost: '', sshUser: '', sshRemotePath: '', sshMode: 'scp' as const }; setCredentials(newCreds); localStorage.setItem('bds-credentials', JSON.stringify(newCreds)); - showToast.success(t('settings.toast.credentialsCleared', { type: type.toUpperCase() })); + showToast.success(t('settings.toast.credentialsCleared', { type: 'SSH' })); }; // Save project settings @@ -395,7 +377,7 @@ export const SettingsView: React.FC = () => { const contentKeywords = ['content', 'categories', 'post', 'article', 'picture', 'aside', 'page']; const aiKeywords = ['ai', 'assistant', 'chat', 'model', 'prompt', 'system', 'api', 'key', 'claude', 'gpt', 'opencode']; const technologyKeywords = ['technology', 'python', 'runtime', 'worker', 'webworker', 'main thread', 'execution']; - const publishingKeywords = ['publishing', 'ftp', 'ssh', 'deploy', 'server', 'host', 'upload']; + const publishingKeywords = ['publishing', 'ssh', 'deploy', 'server', 'host', 'upload', 'scp', 'rsync']; const dataKeywords = ['data', 'database', 'rebuild', 'maintenance', 'posts', 'media', 'scripts', 'links', 'folder', 'filesystem']; const renderProjectSettings = () => ( @@ -1054,123 +1036,78 @@ export const SettingsView: React.FC = () => { ); const renderPublishingSettings = () => ( - <> - - - - +
+ + +
+ ); const renderDataSettings = () => ( diff --git a/src/renderer/components/index.ts b/src/renderer/components/index.ts index 0dc1031..1fc5f2d 100644 --- a/src/renderer/components/index.ts +++ b/src/renderer/components/index.ts @@ -10,7 +10,6 @@ export { MilkdownEditor } from './MilkdownEditor'; export { Lightbox, ImageGallery, useMarkdownImages } from './Lightbox'; export { TaskPopup } from './TaskPopup'; export { ResizablePanel } from './ResizablePanel'; -export { CredentialsPanel } from './CredentialsPanel'; export { SettingsView } from './SettingsView'; export { StyleView } from './StyleView'; export { TagsView, scrollToTagsSection, type TagsCategory } from './TagsView'; diff --git a/src/renderer/i18n/locales/de.json b/src/renderer/i18n/locales/de.json index 290a1ce..50f030c 100644 --- a/src/renderer/i18n/locales/de.json +++ b/src/renderer/i18n/locales/de.json @@ -135,7 +135,6 @@ "settings.technology.pythonRuntimeModeDescription": "Lege fest, wo Python-Skripte für Transformationspipelines ausgeführt werden.", "settings.technology.pythonRuntimeMode.webworker": "Web Worker (empfohlen)", "settings.technology.pythonRuntimeMode.mainThread": "Hauptthread (Legacy)", - "settings.publishing.ftpTitle": "FTP-Veröffentlichung", "settings.publishing.sshTitle": "SSH-Veröffentlichung", "settings.data.title": "Datenbankwartung", "settings.data.fileSystemTitle": "Dateisystem", @@ -291,23 +290,15 @@ "credentials.toast.saveFailed": "Anmeldedaten konnten nicht gespeichert werden", "credentials.toast.testing": "{type}-Verbindung wird getestet...", "credentials.toast.connectionFailed": "Verbindung fehlgeschlagen – Anmeldedaten prüfen", - "credentials.tab.ftp": "FTP-Zugang", "credentials.tab.ssh": "SSH-Zugang", - "credentials.ftp.title": "FTP-Veröffentlichung", - "credentials.ftp.description": "Konfiguriere FTP, um deinen Blog auf einem Webserver zu veröffentlichen.", "credentials.ssh.title": "SSH-Veröffentlichung", "credentials.ssh.description": "Konfiguriere SSH für eine sichere Veröffentlichung auf deinem Server.", "credentials.field.host": "Server", "credentials.field.username": "Benutzername", - "credentials.field.password": "Passwort", - "credentials.field.sshKeyPath": "SSH-Schlüsselpfad", - "credentials.action.testConnection": "Verbindung testen", - "credentials.ftp.placeholder.host": "ftp.beispiel.de", - "credentials.ftp.placeholder.username": "ftp-benutzer", - "credentials.ftp.placeholder.password": "Passwort", + "credentials.field.sshRemotePath": "Remote-Pfad", "credentials.ssh.placeholder.host": "server.beispiel.de", "credentials.ssh.placeholder.username": "ssh-benutzer", - "credentials.ssh.placeholder.keyPath": "~/.ssh/mein_schluessel", + "credentials.ssh.placeholder.remotePath": "/var/www/html", "gitSidebar.header": "QUELLSTEUERUNG", "gitSidebar.loading": "Laden...", "gitSidebar.error.fetchRemoteUpdates": "Remote-Aktualisierungen konnten nicht abgerufen werden.", @@ -704,14 +695,14 @@ "settings.ai.systemPromptPlaceholder": "Systemanweisungen für den KI-Assistenten eingeben...", "settings.ai.savePrompt": "Prompt speichern", "settings.ai.resetPrompt": "Auf Standard zurücksetzen", - "settings.publishing.ftpHostDescription": "Hostname oder IP-Adresse des FTP-Servers.", - "settings.publishing.ftpUsernameDescription": "Benutzername deines FTP-Kontos.", - "settings.publishing.ftpPasswordDescription": "Passwort deines FTP-Kontos.", - "settings.publishing.showPassword": "Passwort anzeigen", - "settings.publishing.hidePassword": "Passwort verbergen", "settings.publishing.sshHostDescription": "Hostname oder IP-Adresse des SSH-Servers.", "settings.publishing.sshUsernameDescription": "Benutzername deines SSH-Kontos.", - "settings.publishing.sshKeyPathDescription": "Pfad zu deiner privaten SSH-Schlüsseldatei.", + "settings.publishing.sshRemotePathDescription": "Das Zielverzeichnis auf dem Remote-Server, in das dein Blog veröffentlicht wird.", + "settings.publishing.sshModeLabel": "Übertragungsmodus", + "settings.publishing.sshModeDescription": "Wähle die Dateiübertragungsmethode für die Veröffentlichung über SSH.", + "settings.publishing.sshMode.scp": "SCP", + "settings.publishing.sshMode.rsync": "rsync", + "settings.publishing.sshKeyAuthNotice": "Die SSH-Schlüsselauthentifizierung muss auf deinem System eingerichtet sein, bevor du diese Veröffentlichungsmethode nutzen kannst. Stelle sicher, dass dein öffentlicher Schlüssel in der authorized_keys-Datei des Remote-Servers hinterlegt ist.", "settings.data.description": "Baut den lokalen Datenbankindex aus den Quelldateien neu auf. Nützlich bei extern bearbeiteten Dateien.", "settings.data.rebuildPostsLabel": "Beitragsdatenbank neu aufbauen", "settings.data.rebuildPostsDescription": "Alle Markdown-Beiträge neu scannen und den Datenbankindex neu aufbauen.", diff --git a/src/renderer/i18n/locales/en.json b/src/renderer/i18n/locales/en.json index 2b7766c..a1d8c36 100644 --- a/src/renderer/i18n/locales/en.json +++ b/src/renderer/i18n/locales/en.json @@ -135,7 +135,6 @@ "settings.technology.pythonRuntimeModeDescription": "Choose where Python scripts execute for transform pipelines.", "settings.technology.pythonRuntimeMode.webworker": "Web Worker (Recommended)", "settings.technology.pythonRuntimeMode.mainThread": "Main Thread (Legacy)", - "settings.publishing.ftpTitle": "FTP Publishing", "settings.publishing.sshTitle": "SSH Publishing", "settings.data.title": "Database Maintenance", "settings.data.fileSystemTitle": "File System", @@ -291,23 +290,15 @@ "credentials.toast.saveFailed": "Failed to save credentials", "credentials.toast.testing": "Testing {type} connection...", "credentials.toast.connectionFailed": "Connection failed - check credentials", - "credentials.tab.ftp": "FTP", "credentials.tab.ssh": "SSH", - "credentials.ftp.title": "FTP Publishing", - "credentials.ftp.description": "Configure FTP for publishing your blog to a web server.", "credentials.ssh.title": "SSH Publishing", "credentials.ssh.description": "Configure SSH for secure publishing to your server.", "credentials.field.host": "Host", "credentials.field.username": "Username", - "credentials.field.password": "Password", - "credentials.field.sshKeyPath": "SSH Key Path", - "credentials.action.testConnection": "Test Connection", - "credentials.ftp.placeholder.host": "ftp.example.com", - "credentials.ftp.placeholder.username": "ftp-user", - "credentials.ftp.placeholder.password": "Password", + "credentials.field.sshRemotePath": "Remote Path", "credentials.ssh.placeholder.host": "server.example.com", "credentials.ssh.placeholder.username": "ssh-user", - "credentials.ssh.placeholder.keyPath": "~/.ssh/id_rsa", + "credentials.ssh.placeholder.remotePath": "/var/www/html", "gitSidebar.header": "SOURCE CONTROL", "gitSidebar.loading": "Loading...", "gitSidebar.error.fetchRemoteUpdates": "Failed to fetch remote updates.", @@ -704,14 +695,14 @@ "settings.ai.systemPromptPlaceholder": "Enter system instructions for the AI assistant...", "settings.ai.savePrompt": "Save Prompt", "settings.ai.resetPrompt": "Reset to Default", - "settings.publishing.ftpHostDescription": "The FTP server hostname or IP address.", - "settings.publishing.ftpUsernameDescription": "Your FTP account username.", - "settings.publishing.ftpPasswordDescription": "Your FTP account password.", - "settings.publishing.showPassword": "Show password", - "settings.publishing.hidePassword": "Hide password", "settings.publishing.sshHostDescription": "The SSH server hostname or IP address.", "settings.publishing.sshUsernameDescription": "Your SSH account username.", - "settings.publishing.sshKeyPathDescription": "Path to your SSH private key file.", + "settings.publishing.sshRemotePathDescription": "The destination directory on the remote server where your blog will be published.", + "settings.publishing.sshModeLabel": "Transfer Mode", + "settings.publishing.sshModeDescription": "Select the file transfer method to use when publishing via SSH.", + "settings.publishing.sshMode.scp": "SCP", + "settings.publishing.sshMode.rsync": "rsync", + "settings.publishing.sshKeyAuthNotice": "SSH key authentication must be configured on your system before using this publishing method. Ensure your public key is added to the remote server's authorized_keys file.", "settings.data.description": "Rebuild the local database index from source files. Useful if post or media files were edited externally.", "settings.data.rebuildPostsLabel": "Rebuild Posts Database", "settings.data.rebuildPostsDescription": "Re-scan all post markdown files and rebuild the database index.", diff --git a/src/renderer/i18n/locales/es.json b/src/renderer/i18n/locales/es.json index 0a9d5a2..3739104 100644 --- a/src/renderer/i18n/locales/es.json +++ b/src/renderer/i18n/locales/es.json @@ -135,7 +135,6 @@ "settings.technology.pythonRuntimeModeDescription": "Elige dónde se ejecutan los scripts de Python para los flujos de transformación.", "settings.technology.pythonRuntimeMode.webworker": "Web Worker (recomendado)", "settings.technology.pythonRuntimeMode.mainThread": "Hilo principal (heredado)", - "settings.publishing.ftpTitle": "Publicación FTP", "settings.publishing.sshTitle": "Publicación SSH", "settings.data.title": "Mantenimiento de base de datos", "settings.data.fileSystemTitle": "Sistema de archivos", @@ -291,23 +290,15 @@ "credentials.toast.saveFailed": "No se pudieron guardar las credenciales", "credentials.toast.testing": "Probando conexión {type}...", "credentials.toast.connectionFailed": "La conexión falló - revisa las credenciales", - "credentials.tab.ftp": "Acceso FTP", "credentials.tab.ssh": "Acceso SSH", - "credentials.ftp.title": "Publicación FTP", - "credentials.ftp.description": "Configura FTP para publicar tu blog en un servidor web.", "credentials.ssh.title": "Publicación SSH", "credentials.ssh.description": "Configura SSH para publicar de forma segura en tu servidor.", "credentials.field.host": "Servidor", "credentials.field.username": "Nombre de usuario", - "credentials.field.password": "Contraseña", - "credentials.field.sshKeyPath": "Ruta de clave SSH", - "credentials.action.testConnection": "Probar conexión", - "credentials.ftp.placeholder.host": "ftp.ejemplo.es", - "credentials.ftp.placeholder.username": "usuario-ftp", - "credentials.ftp.placeholder.password": "Contraseña", + "credentials.field.sshRemotePath": "Ruta remota", "credentials.ssh.placeholder.host": "servidor.ejemplo.es", "credentials.ssh.placeholder.username": "usuario-ssh", - "credentials.ssh.placeholder.keyPath": "~/.ssh/clave_id_rsa", + "credentials.ssh.placeholder.remotePath": "/var/www/html", "gitSidebar.header": "CONTROL DE CÓDIGO FUENTE", "gitSidebar.loading": "Cargando...", "gitSidebar.error.fetchRemoteUpdates": "No se pudieron obtener las actualizaciones remotas.", @@ -704,14 +695,14 @@ "settings.ai.systemPromptPlaceholder": "Escribe aquí tu prompt del sistema…", "settings.ai.savePrompt": "Guardar prompt", "settings.ai.resetPrompt": "Restablecer prompt", - "settings.publishing.ftpHostDescription": "Nombre de host o IP del servidor FTP.", - "settings.publishing.ftpUsernameDescription": "Nombre de usuario de FTP.", - "settings.publishing.ftpPasswordDescription": "Contraseña de FTP.", - "settings.publishing.showPassword": "Mostrar contraseña", - "settings.publishing.hidePassword": "Ocultar contraseña", "settings.publishing.sshHostDescription": "Nombre de host o IP del servidor SSH.", "settings.publishing.sshUsernameDescription": "Nombre de usuario de SSH.", - "settings.publishing.sshKeyPathDescription": "Ruta a tu clave privada SSH.", + "settings.publishing.sshRemotePathDescription": "El directorio de destino en el servidor remoto donde se publicará tu blog.", + "settings.publishing.sshModeLabel": "Modo de transferencia", + "settings.publishing.sshModeDescription": "Selecciona el método de transferencia de archivos para publicar mediante SSH.", + "settings.publishing.sshMode.scp": "SCP", + "settings.publishing.sshMode.rsync": "rsync", + "settings.publishing.sshKeyAuthNotice": "La autenticación con clave SSH debe estar configurada en tu sistema antes de usar este método de publicación. Asegúrate de que tu clave pública esté agregada al archivo authorized_keys del servidor remoto.", "settings.data.description": "Gestiona y reconstruye los datos locales.", "settings.data.rebuildPostsLabel": "Reconstruir índice de publicaciones", "settings.data.rebuildPostsDescription": "Escanea todas las publicaciones y actualiza el índice de datos.", diff --git a/src/renderer/i18n/locales/fr.json b/src/renderer/i18n/locales/fr.json index 91ccd09..75cb996 100644 --- a/src/renderer/i18n/locales/fr.json +++ b/src/renderer/i18n/locales/fr.json @@ -135,7 +135,6 @@ "settings.technology.pythonRuntimeModeDescription": "Choisissez où les scripts Python s’exécutent pour les pipelines de transformation.", "settings.technology.pythonRuntimeMode.webworker": "Web Worker (recommandé)", "settings.technology.pythonRuntimeMode.mainThread": "Thread principal (hérité)", - "settings.publishing.ftpTitle": "Publication FTP", "settings.publishing.sshTitle": "Publication SSH", "settings.data.title": "Maintenance de la base de données", "settings.data.fileSystemTitle": "Système de fichiers", @@ -291,23 +290,15 @@ "credentials.toast.saveFailed": "Impossible d’enregistrer les identifiants", "credentials.toast.testing": "Test de la connexion {type}...", "credentials.toast.connectionFailed": "Échec de la connexion - vérifiez les identifiants", - "credentials.tab.ftp": "Accès FTP", "credentials.tab.ssh": "Accès SSH", - "credentials.ftp.title": "Publication FTP", - "credentials.ftp.description": "Configurez FTP pour publier votre blog sur un serveur web.", "credentials.ssh.title": "Publication SSH", "credentials.ssh.description": "Configurez SSH pour une publication sécurisée sur votre serveur.", "credentials.field.host": "Hôte", - "credentials.field.username": "Nom d’utilisateur", - "credentials.field.password": "Mot de passe", - "credentials.field.sshKeyPath": "Chemin de clé SSH", - "credentials.action.testConnection": "Tester la connexion", - "credentials.ftp.placeholder.host": "ftp.exemple.fr", - "credentials.ftp.placeholder.username": "utilisateur-ftp", - "credentials.ftp.placeholder.password": "Mot de passe", + "credentials.field.username": "Nom d'utilisateur", + "credentials.field.sshRemotePath": "Chemin distant", "credentials.ssh.placeholder.host": "serveur.exemple.fr", "credentials.ssh.placeholder.username": "utilisateur-ssh", - "credentials.ssh.placeholder.keyPath": "~/.ssh/ma_cle", + "credentials.ssh.placeholder.remotePath": "/var/www/html", "gitSidebar.header": "CONTRÔLE DE SOURCE", "gitSidebar.loading": "Chargement...", "gitSidebar.error.fetchRemoteUpdates": "Impossible de récupérer les mises à jour distantes.", @@ -704,14 +695,14 @@ "settings.ai.systemPromptPlaceholder": "Écrivez votre prompt système ici…", "settings.ai.savePrompt": "Enregistrer le prompt", "settings.ai.resetPrompt": "Réinitialiser le prompt", - "settings.publishing.ftpHostDescription": "Nom d’hôte ou IP du serveur FTP.", - "settings.publishing.ftpUsernameDescription": "Nom d’utilisateur FTP.", - "settings.publishing.ftpPasswordDescription": "Mot de passe FTP.", - "settings.publishing.showPassword": "Afficher le mot de passe", - "settings.publishing.hidePassword": "Masquer le mot de passe", - "settings.publishing.sshHostDescription": "Nom d’hôte ou IP du serveur SSH.", - "settings.publishing.sshUsernameDescription": "Nom d’utilisateur SSH.", - "settings.publishing.sshKeyPathDescription": "Chemin vers votre clé privée SSH.", + "settings.publishing.sshHostDescription": "Nom d'hôte ou IP du serveur SSH.", + "settings.publishing.sshUsernameDescription": "Nom d'utilisateur SSH.", + "settings.publishing.sshRemotePathDescription": "Le répertoire de destination sur le serveur distant où votre blog sera publié.", + "settings.publishing.sshModeLabel": "Mode de transfert", + "settings.publishing.sshModeDescription": "Sélectionnez la méthode de transfert de fichiers pour la publication via SSH.", + "settings.publishing.sshMode.scp": "SCP", + "settings.publishing.sshMode.rsync": "rsync", + "settings.publishing.sshKeyAuthNotice": "L'authentification par clé SSH doit être configurée sur votre système avant d'utiliser ce mode de publication. Assurez-vous que votre clé publique est ajoutée au fichier authorized_keys du serveur distant.", "settings.data.description": "Gérez et réindexez les données locales.", "settings.data.rebuildPostsLabel": "Reconstruire les index des articles", "settings.data.rebuildPostsDescription": "Analyse tous les articles et met à jour l’index de données.", diff --git a/src/renderer/i18n/locales/it.json b/src/renderer/i18n/locales/it.json index a15df5a..b7e9a4c 100644 --- a/src/renderer/i18n/locales/it.json +++ b/src/renderer/i18n/locales/it.json @@ -135,7 +135,6 @@ "settings.technology.pythonRuntimeModeDescription": "Scegli dove eseguire gli script Python per le pipeline di trasformazione.", "settings.technology.pythonRuntimeMode.webworker": "Web Worker (consigliato)", "settings.technology.pythonRuntimeMode.mainThread": "Thread principale (legacy)", - "settings.publishing.ftpTitle": "Pubblicazione FTP", "settings.publishing.sshTitle": "Pubblicazione SSH", "settings.data.title": "Manutenzione database", "settings.data.fileSystemTitle": "Sistema file", @@ -291,23 +290,15 @@ "credentials.toast.saveFailed": "Impossibile salvare le credenziali", "credentials.toast.testing": "Test della connessione {type} in corso...", "credentials.toast.connectionFailed": "Connessione non riuscita - controlla le credenziali", - "credentials.tab.ftp": "Accesso FTP", "credentials.tab.ssh": "Accesso SSH", - "credentials.ftp.title": "Pubblicazione FTP", - "credentials.ftp.description": "Configura FTP per pubblicare il tuo blog su un server web.", "credentials.ssh.title": "Pubblicazione SSH", "credentials.ssh.description": "Configura SSH per una pubblicazione sicura sul tuo server.", "credentials.field.host": "Server", "credentials.field.username": "Nome utente", - "credentials.field.password": "Password di accesso", - "credentials.field.sshKeyPath": "Percorso chiave SSH", - "credentials.action.testConnection": "Testa connessione", - "credentials.ftp.placeholder.host": "ftp.esempio.it", - "credentials.ftp.placeholder.username": "utente-ftp", - "credentials.ftp.placeholder.password": "Inserisci password", + "credentials.field.sshRemotePath": "Percorso remoto", "credentials.ssh.placeholder.host": "server.esempio.it", "credentials.ssh.placeholder.username": "utente-ssh", - "credentials.ssh.placeholder.keyPath": "~/.ssh/chiave_id_rsa", + "credentials.ssh.placeholder.remotePath": "/var/www/html", "gitSidebar.header": "CONTROLLO SORGENTE", "gitSidebar.loading": "Caricamento...", "gitSidebar.error.fetchRemoteUpdates": "Impossibile recuperare gli aggiornamenti remoti.", @@ -704,14 +695,14 @@ "settings.ai.systemPromptPlaceholder": "Scrivi qui il tuo prompt di sistema…", "settings.ai.savePrompt": "Salva prompt", "settings.ai.resetPrompt": "Reimposta prompt", - "settings.publishing.ftpHostDescription": "Hostname o IP del server FTP.", - "settings.publishing.ftpUsernameDescription": "Nome utente FTP.", - "settings.publishing.ftpPasswordDescription": "Password FTP.", - "settings.publishing.showPassword": "Mostra password", - "settings.publishing.hidePassword": "Nascondi password", "settings.publishing.sshHostDescription": "Hostname o IP del server SSH.", "settings.publishing.sshUsernameDescription": "Nome utente SSH.", - "settings.publishing.sshKeyPathDescription": "Percorso della tua chiave privata SSH.", + "settings.publishing.sshRemotePathDescription": "La directory di destinazione sul server remoto in cui verrà pubblicato il tuo blog.", + "settings.publishing.sshModeLabel": "Modalità di trasferimento", + "settings.publishing.sshModeDescription": "Seleziona il metodo di trasferimento file per la pubblicazione tramite SSH.", + "settings.publishing.sshMode.scp": "SCP", + "settings.publishing.sshMode.rsync": "rsync", + "settings.publishing.sshKeyAuthNotice": "L'autenticazione con chiave SSH deve essere configurata sul tuo sistema prima di utilizzare questo metodo di pubblicazione. Assicurati che la tua chiave pubblica sia aggiunta al file authorized_keys del server remoto.", "settings.data.description": "Gestisci e ricostruisci i dati locali.", "settings.data.rebuildPostsLabel": "Ricostruisci indice articoli", "settings.data.rebuildPostsDescription": "Analizza tutti gli articoli e aggiorna l’indice dati.",