Add internationalization support with English and French translations

- Introduced a new i18n module for managing translations using JSON files.
- Added English (en.json) and French (fr.json) translation files for UI elements.
- Implemented lazy initialization of the translator to load translations on demand.
- Added unit tests for translation lookup, fallback behavior, and available languages detection.
This commit is contained in:
claudi 2026-03-10 14:32:38 +01:00
parent fd0482ed2d
commit 7daec731ca
11 changed files with 1184 additions and 280 deletions

View file

@ -0,0 +1,167 @@
{
"toolbar.tooltip.open_drop": "Datei hier ablegen, um sie mit der Standardanwendung zu \u00f6ffnen",
"toolbar.tooltip.open_with_drop": "Datei hier ablegen, um die \u00d6ffnen-mit-App auszuw\u00e4hlen",
"toolbar.tooltip.home": "Startseite",
"toolbar.tooltip.about": "\u00dcber WebDrop Bridge",
"toolbar.tooltip.settings": "Einstellungen",
"toolbar.tooltip.check_updates": "Nach Updates suchen",
"toolbar.tooltip.clear_cache": "Cache und Cookies l\u00f6schen",
"toolbar.tooltip.open_log": "Protokolldatei \u00f6ffnen",
"toolbar.tooltip.dev_tools": "Entwicklerwerkzeuge (F12)",
"status.ready": "Bereit",
"status.opened": "Ge\u00f6ffnet: {name}",
"status.choose_app": "App ausw\u00e4hlen f\u00fcr: {name}",
"status.download_started": "\ud83d\udce5 Download: {filename}",
"status.download_completed": "Download abgeschlossen: {name}",
"status.download_cancelled": "\u26a0\ufe0f Download abgebrochen: {name}",
"status.download_failed": "\u274c Download fehlgeschlagen: {name}",
"status.download_error": "Downloadfehler: {error}",
"update.status.checking": "Suche nach Updates",
"update.status.ready": "Bereit",
"update.status.available": "Update verf\u00fcgbar: v{version}",
"update.status.deferred": "Update verschoben",
"update.status.downloading": "Lade v{version} herunter",
"update.status.verifying": "Pr\u00fcfe Download",
"update.status.download_failed": "Download fehlgeschlagen",
"update.status.verification_failed": "Pr\u00fcfung fehlgeschlagen",
"update.status.timed_out": "Zeitüberschreitung",
"update.status.ready_to_install": "Bereit zur Installation",
"update.status.installation_started": "Installation gestartet",
"update.status.installation_failed": "Installation fehlgeschlagen",
"update.status.check_timed_out": "Zeitüberschreitung \u2013 keine Serverantwort",
"update.status.check_failed": "Fehler: {error}",
"update.status.download_timed_out": "Zeitüberschreitung beim Download",
"dialog.error.title": "Fehler",
"dialog.log_not_found.title": "Protokolldatei nicht gefunden",
"dialog.log_not_found.msg": "Keine Protokolldatei gefunden unter:\n{log_file}",
"dialog.cache_cleared.title": "Cache geleert",
"dialog.cache_cleared.msg": "Browser-Cache und Cookies wurden erfolgreich geleert.\n\nBitte laden Sie die Seite neu oder starten Sie die Anwendung neu, damit die \u00c4nderungen wirksam werden.",
"dialog.cache_clear_failed.title": "Fehler",
"dialog.cache_clear_failed.msg": "Fehler beim Leeren von Cache und Cookies: {error}",
"dialog.drag_error.title": "Drag-and-Drop-Fehler",
"dialog.drag_error.msg": "Der Drag-and-Drop-Vorgang konnte nicht abgeschlossen werden.\n\nFehler: {error}",
"dialog.open_file_error.title": "Fehler beim \u00d6ffnen",
"dialog.open_file_error.msg": "Die Datei konnte nicht mit der Standardanwendung ge\u00f6ffnet werden.\n\nDatei: {file_path}\nFehler: {error}",
"dialog.open_with_error.title": "\u00d6ffnen mit \u2013 Fehler",
"dialog.open_with_error.msg": "Auf dieser Plattform konnte kein Anwendungsauswahldialog ge\u00f6ffnet werden.",
"dialog.dev_tools.window_title": "\ud83d\udd27 Entwicklerwerkzeuge",
"dialog.dev_tools.error_title": "Entwicklerwerkzeuge",
"dialog.dev_tools.error_msg": "Entwicklerwerkzeuge konnten nicht ge\u00f6ffnet werden:\n{error}",
"dialog.domain_changed.title": "Domain ge\u00e4ndert \u2013 Neustart empfohlen",
"dialog.domain_changed.msg": "Die Web-Anwendungs-Domain wurde ge\u00e4ndert\n\nSie haben zu einer anderen Domain gewechselt. F\u00fcr maximale Stabilit\u00e4t und korrekte Authentifizierung sollte die Anwendung neu gestartet werden.\n\nProfil und Cache wurden geleert, aber ein Neustart wird empfohlen.",
"dialog.domain_changed.restart_now": "Jetzt neu starten",
"dialog.domain_changed.restart_later": "Sp\u00e4ter neu starten",
"dialog.restart_failed.title": "Neustart fehlgeschlagen",
"dialog.restart_failed.msg": "Die Anwendung konnte nicht automatisch neu gestartet werden:\n\n{error}\n\nBitte starten Sie manuell neu.",
"dialog.update_timeout.title": "Zeitüberschreitung bei der Update-Pr\u00fcfung",
"dialog.update_timeout.msg": "Der Server hat nicht innerhalb von 30 Sekunden geantwortet.\n\nM\u00f6glicherweise liegt ein Netzwerkproblem oder eine Serverunavailability vor.\n\nBitte \u00fcberpr\u00fcfen Sie Ihre Verbindung und versuchen Sie es erneut.",
"dialog.update_failed.title": "Update-Pr\u00fcfung fehlgeschlagen",
"dialog.update_failed.msg": "Updates konnten nicht gepr\u00fcft werden:\n\n{error}\n\nBitte versuchen Sie es sp\u00e4ter erneut.",
"dialog.download_failed.title": "Download fehlgeschlagen",
"dialog.download_failed.msg": "Das Update konnte nicht heruntergeladen werden:\n\n{error}\n\nBitte versuchen Sie es sp\u00e4ter erneut.",
"dialog.checkout.title": "Asset auschecken",
"dialog.checkout.msg": "M\u00f6chten Sie dieses Asset auschecken?\n\n{filename}",
"about.title": "\u00dcber {app_name}",
"about.version": "Version: {version}",
"about.description": "Verbindet webbasierte Drag-and-Drop-Workflows mit nativen Dateioperationen f\u00fcr professionelle Desktop-Anwendungen.",
"about.drop_zones_title": "Toolbar-Ablagezonen:",
"about.open_icon_desc": "\u00d6ffnen-Symbol: \u00d6ffnet abgelegte Dateien mit der Standard-App.",
"about.open_with_icon_desc": "\u00d6ffnen-mit-Symbol: Zeigt einen App-Auswahldialog f\u00fcr abgelegte Dateien.",
"about.product_of": "Ein Produkt von:",
"about.rights": "\u00a9 2026 h\u00f6rl Information Management GmbH. Alle Rechte vorbehalten.",
"settings.title": "Einstellungen",
"settings.tab.web_source": "Web-Quelle",
"settings.tab.paths": "Pfade",
"settings.tab.urls": "URLs",
"settings.tab.logging": "Protokollierung",
"settings.tab.window": "Fenster",
"settings.tab.profiles": "Profile",
"settings.tab.general": "Allgemein",
"settings.web_url.label": "Web-Anwendungs-URL:",
"settings.web_url.placeholder": "z.B. http://localhost:8080 oder file:///./webapp/index.html",
"settings.web_url.open_btn": "\u00d6ffnen",
"settings.url_mappings.label": "URL-Zuordnungen (Azure Blob Storage \u2192 Lokale Pfade):",
"settings.url_mappings.col_prefix": "URL-Pr\u00e4fix",
"settings.url_mappings.col_path": "Lokaler Pfad",
"settings.url_mappings.add_btn": "Zuordnung hinzuf\u00fcgen",
"settings.url_mappings.edit_btn": "Auswahl bearbeiten",
"settings.url_mappings.remove_btn": "Auswahl entfernen",
"settings.paths.label": "Erlaubte Stammverzeichnisse f\u00fcr den Dateizugriff:",
"settings.paths.add_btn": "Pfad hinzuf\u00fcgen",
"settings.paths.remove_btn": "Auswahl entfernen",
"settings.urls.label": "Erlaubte Web-URLs (unterst\u00fctzt Platzhalter wie http://*.example.com):",
"settings.urls.add_btn": "URL hinzuf\u00fcgen",
"settings.urls.remove_btn": "Auswahl entfernen",
"settings.log_level.label": "Protokollstufe:",
"settings.log_file.label": "Protokolldatei (optional):",
"settings.log_file.browse_btn": "Durchsuchen...",
"settings.window.width_label": "Fensterbreite:",
"settings.window.height_label": "Fensterh\u00f6he:",
"settings.profiles.label": "Gespeicherte Konfigurationsprofile:",
"settings.profiles.save_btn": "Als Profil speichern",
"settings.profiles.load_btn": "Profil laden",
"settings.profiles.delete_btn": "Profil l\u00f6schen",
"settings.profiles.export_btn": "Konfiguration exportieren",
"settings.profiles.import_btn": "Konfiguration importieren",
"settings.general.language_label": "Sprache:",
"settings.general.language_restart_note": "Sprach\u00e4nderung wirksam nach Neustart.",
"settings.add_mapping.url_title": "URL-Zuordnung hinzuf\u00fcgen",
"settings.add_mapping.url_prompt": "Azure Blob Storage URL-Pr\u00e4fix eingeben:\n(z.B. https://myblob.blob.core.windows.net/container/)",
"settings.add_mapping.path_prompt": "Lokalen Dateisystempfad eingeben:\n(z.B. C:\\Freigabe oder /mnt/share)",
"settings.edit_mapping.title": "URL-Zuordnung bearbeiten",
"settings.edit_mapping.url_prompt": "Azure Blob Storage URL-Pr\u00e4fix eingeben:",
"settings.edit_mapping.path_prompt": "Lokalen Dateisystempfad eingeben:",
"settings.add_url.title": "URL hinzuf\u00fcgen",
"settings.add_url.prompt": "URL-Muster eingeben (z.B. http://example.com oder http://*.example.com):",
"settings.profile.save.title": "Profil speichern",
"settings.profile.save.prompt": "Profilnamen eingeben (z.B. Arbeit, Privat):",
"settings.select_directory.title": "Verzeichnis ausw\u00e4hlen",
"settings.select_log_file.title": "Protokolldatei ausw\u00e4hlen",
"settings.export_config.title": "Konfiguration exportieren",
"settings.import_config.title": "Konfiguration importieren",
"settings.error.select_mapping": "Bitte w\u00e4hlen Sie eine Zuordnung zur Bearbeitung aus",
"settings.error.select_profile_load": "Bitte w\u00e4hlen Sie ein Profil zum Laden aus",
"settings.error.select_profile_delete": "Bitte w\u00e4hlen Sie ein Profil zum L\u00f6schen aus",
"update.checking.title": "Update-Pr\u00fcfung",
"update.checking.label": "Suche nach Updates...",
"update.checking.timeout_info": "Dies kann bis zu 10 Sekunden dauern",
"update.available.title": "Update verf\u00fcgbar",
"update.available.header": "WebDrop Bridge v{version} ist verf\u00fcgbar",
"update.available.changelog_label": "Versionshinweise:",
"update.available.update_now_btn": "Jetzt aktualisieren",
"update.available.later_btn": "Sp\u00e4ter",
"update.downloading.title": "Update wird heruntergeladen",
"update.downloading.header": "Update wird heruntergeladen...",
"update.downloading.preparing": "Download wird vorbereitet",
"update.downloading.filename": "Lade herunter: {filename}",
"update.downloading.cancel_btn": "Abbrechen",
"update.install.title": "Update installieren",
"update.install.header": "Bereit zur Installation",
"update.install.message": "Das Update ist zur Installation bereit. Die Anwendung wird neu gestartet.",
"update.install.warning": "\u26a0\ufe0f Bitte speichern Sie alle nicht gespeicherten Arbeiten vor dem Fortfahren.\nDie Anwendung wird geschlossen und neu gestartet.",
"update.install.now_btn": "Jetzt installieren",
"update.install.cancel_btn": "Abbrechen",
"update.no_update.title": "Keine Updates verf\u00fcgbar",
"update.no_update.message": "\u2713 Sie verwenden die neueste Version",
"update.no_update.info": "WebDrop Bridge ist auf dem neuesten Stand.",
"update.no_update.ok_btn": "OK",
"update.error.title": "Update fehlgeschlagen",
"update.error.header": "\u26a0\ufe0f Update fehlgeschlagen",
"update.error.info": "Bitte versuchen Sie es erneut oder besuchen Sie die Website, um das Update manuell herunterzuladen.",
"update.error.retry_btn": "Wiederholen",
"update.error.manual_btn": "Manuell herunterladen",
"update.error.cancel_btn": "Abbrechen",
"worker.server_not_responding": "Server antwortet nicht \u2013 bitte sp\u00e4ter erneut pr\u00fcfen",
"worker.no_installer": "Kein Installationspaket in der Version gefunden",
"worker.checksum_failed": "Pr\u00fcfsummenverifizierung fehlgeschlagen",
"worker.download_timed_out": "Zeitüberschreitung beim Download oder der Verifizierung",
"worker.download_error": "Downloadfehler: {error}",
"worker.check_failed": "Pr\u00fcfung fehlgeschlagen: {error}"
}

View file

@ -0,0 +1,167 @@
{
"toolbar.tooltip.open_drop": "Drop a file here to open it with its default application",
"toolbar.tooltip.open_with_drop": "Drop a file here to choose which app should open it",
"toolbar.tooltip.home": "Home",
"toolbar.tooltip.about": "About WebDrop Bridge",
"toolbar.tooltip.settings": "Settings",
"toolbar.tooltip.check_updates": "Check for Updates",
"toolbar.tooltip.clear_cache": "Clear Cache and Cookies",
"toolbar.tooltip.open_log": "Open Log File",
"toolbar.tooltip.dev_tools": "Developer Tools (F12)",
"status.ready": "Ready",
"status.opened": "Opened: {name}",
"status.choose_app": "Choose app for: {name}",
"status.download_started": "\ud83d\udce5 Download: {filename}",
"status.download_completed": "Download completed: {name}",
"status.download_cancelled": "\u26a0\ufe0f Download cancelled: {name}",
"status.download_failed": "\u274c Download failed: {name}",
"status.download_error": "Download error: {error}",
"update.status.checking": "Checking for updates",
"update.status.ready": "Ready",
"update.status.available": "Update available: v{version}",
"update.status.deferred": "Update deferred",
"update.status.downloading": "Downloading v{version}",
"update.status.verifying": "Verifying download",
"update.status.download_failed": "Download failed",
"update.status.verification_failed": "Verification failed",
"update.status.timed_out": "Operation timed out",
"update.status.ready_to_install": "Ready to install",
"update.status.installation_started": "Installation started",
"update.status.installation_failed": "Installation failed",
"update.status.check_timed_out": "Check timed out - no server response",
"update.status.check_failed": "Check failed: {error}",
"update.status.download_timed_out": "Download timed out - no server response",
"dialog.error.title": "Error",
"dialog.log_not_found.title": "Log File Not Found",
"dialog.log_not_found.msg": "No log file found at:\n{log_file}",
"dialog.cache_cleared.title": "Cache Cleared",
"dialog.cache_cleared.msg": "Browser cache and cookies have been cleared successfully.\n\nYou may need to reload the page or restart the application for changes to take effect.",
"dialog.cache_clear_failed.title": "Error",
"dialog.cache_clear_failed.msg": "Failed to clear cache and cookies: {error}",
"dialog.drag_error.title": "Drag-and-Drop Error",
"dialog.drag_error.msg": "Could not complete the drag-and-drop operation.\n\nError: {error}",
"dialog.open_file_error.title": "Open File Error",
"dialog.open_file_error.msg": "Could not open the file with its default application.\n\nFile: {file_path}\nError: {error}",
"dialog.open_with_error.title": "Open With Error",
"dialog.open_with_error.msg": "Could not open an application chooser for this file on your platform.",
"dialog.dev_tools.window_title": "\ud83d\udd27 Developer Tools",
"dialog.dev_tools.error_title": "Developer Tools",
"dialog.dev_tools.error_msg": "Could not open Developer Tools:\n{error}",
"dialog.domain_changed.title": "Domain Changed - Restart Recommended",
"dialog.domain_changed.msg": "Web Application Domain Has Changed\n\nYou've switched to a different domain. For maximum stability and to ensure proper authentication, the application should be restarted.\n\nThe profile and cache have been cleared, but we recommend restarting.",
"dialog.domain_changed.restart_now": "Restart Now",
"dialog.domain_changed.restart_later": "Restart Later",
"dialog.restart_failed.title": "Restart Failed",
"dialog.restart_failed.msg": "Could not automatically restart the application:\n\n{error}\n\nPlease restart manually.",
"dialog.update_timeout.title": "Update Check Timeout",
"dialog.update_timeout.msg": "The server did not respond within 30 seconds.\n\nThis may be due to a network issue or server unavailability.\n\nPlease check your connection and try again.",
"dialog.update_failed.title": "Update Check Failed",
"dialog.update_failed.msg": "Could not check for updates:\n\n{error}\n\nPlease try again later.",
"dialog.download_failed.title": "Download Failed",
"dialog.download_failed.msg": "Could not download the update:\n\n{error}\n\nPlease try again later.",
"dialog.checkout.title": "Checkout Asset",
"dialog.checkout.msg": "Do you want to check out this asset?\n\n{filename}",
"about.title": "About {app_name}",
"about.version": "Version: {version}",
"about.description": "Bridges web-based drag-and-drop workflows with native file operations for professional desktop applications.",
"about.drop_zones_title": "Toolbar Drop Zones:",
"about.open_icon_desc": "Open icon: Opens dropped files with the system default app.",
"about.open_with_icon_desc": "Open-with icon: Shows an app chooser for dropped files.",
"about.product_of": "Product of:",
"about.rights": "\u00a9 2026 h\u00f6rl Information Management GmbH. All rights reserved.",
"settings.title": "Settings",
"settings.tab.web_source": "Web Source",
"settings.tab.paths": "Paths",
"settings.tab.urls": "URLs",
"settings.tab.logging": "Logging",
"settings.tab.window": "Window",
"settings.tab.profiles": "Profiles",
"settings.tab.general": "General",
"settings.web_url.label": "Web Application URL:",
"settings.web_url.placeholder": "e.g., http://localhost:8080 or file:///./webapp/index.html",
"settings.web_url.open_btn": "Open",
"settings.url_mappings.label": "URL Mappings (Azure Blob Storage \u2192 Local Paths):",
"settings.url_mappings.col_prefix": "URL Prefix",
"settings.url_mappings.col_path": "Local Path",
"settings.url_mappings.add_btn": "Add Mapping",
"settings.url_mappings.edit_btn": "Edit Selected",
"settings.url_mappings.remove_btn": "Remove Selected",
"settings.paths.label": "Allowed root directories for file access:",
"settings.paths.add_btn": "Add Path",
"settings.paths.remove_btn": "Remove Selected",
"settings.urls.label": "Allowed web URLs (supports wildcards like http://*.example.com):",
"settings.urls.add_btn": "Add URL",
"settings.urls.remove_btn": "Remove Selected",
"settings.log_level.label": "Log Level:",
"settings.log_file.label": "Log File (optional):",
"settings.log_file.browse_btn": "Browse...",
"settings.window.width_label": "Window Width:",
"settings.window.height_label": "Window Height:",
"settings.profiles.label": "Saved Configuration Profiles:",
"settings.profiles.save_btn": "Save as Profile",
"settings.profiles.load_btn": "Load Profile",
"settings.profiles.delete_btn": "Delete Profile",
"settings.profiles.export_btn": "Export Configuration",
"settings.profiles.import_btn": "Import Configuration",
"settings.general.language_label": "Language:",
"settings.general.language_restart_note": "Language change takes effect after restart.",
"settings.add_mapping.url_title": "Add URL Mapping",
"settings.add_mapping.url_prompt": "Enter Azure Blob Storage URL prefix:\n(e.g., https://myblob.blob.core.windows.net/container/)",
"settings.add_mapping.path_prompt": "Enter local file system path:\n(e.g., C:\\Share or /mnt/share)",
"settings.edit_mapping.title": "Edit URL Mapping",
"settings.edit_mapping.url_prompt": "Enter Azure Blob Storage URL prefix:",
"settings.edit_mapping.path_prompt": "Enter local file system path:",
"settings.add_url.title": "Add URL",
"settings.add_url.prompt": "Enter URL pattern (e.g., http://example.com or http://*.example.com):",
"settings.profile.save.title": "Save Profile",
"settings.profile.save.prompt": "Enter profile name (e.g., work, personal):",
"settings.select_directory.title": "Select Directory to Allow",
"settings.select_log_file.title": "Select Log File",
"settings.export_config.title": "Export Configuration",
"settings.import_config.title": "Import Configuration",
"settings.error.select_mapping": "Please select a mapping to edit",
"settings.error.select_profile_load": "Please select a profile to load",
"settings.error.select_profile_delete": "Please select a profile to delete",
"update.checking.title": "Checking for Updates",
"update.checking.label": "Checking for updates...",
"update.checking.timeout_info": "This may take up to 10 seconds",
"update.available.title": "Update Available",
"update.available.header": "WebDrop Bridge v{version} is available",
"update.available.changelog_label": "Release Notes:",
"update.available.update_now_btn": "Update Now",
"update.available.later_btn": "Later",
"update.downloading.title": "Downloading Update",
"update.downloading.header": "Downloading update...",
"update.downloading.preparing": "Preparing download",
"update.downloading.filename": "Downloading: {filename}",
"update.downloading.cancel_btn": "Cancel",
"update.install.title": "Install Update",
"update.install.header": "Ready to Install",
"update.install.message": "The update is ready to install. The application will restart.",
"update.install.warning": "\u26a0\ufe0f Please save any unsaved work before continuing.\nThe application will close and restart.",
"update.install.now_btn": "Install Now",
"update.install.cancel_btn": "Cancel",
"update.no_update.title": "No Updates Available",
"update.no_update.message": "\u2713 You're using the latest version",
"update.no_update.info": "WebDrop Bridge is up to date.",
"update.no_update.ok_btn": "OK",
"update.error.title": "Update Failed",
"update.error.header": "\u26a0\ufe0f Update Failed",
"update.error.info": "Please try again or visit the website to download the update manually.",
"update.error.retry_btn": "Retry",
"update.error.manual_btn": "Download Manually",
"update.error.cancel_btn": "Cancel",
"worker.server_not_responding": "Server not responding - check again later",
"worker.no_installer": "No installer found in release",
"worker.checksum_failed": "Checksum verification failed",
"worker.download_timed_out": "Download or verification timed out (no response from server)",
"worker.download_error": "Download error: {error}",
"worker.check_failed": "Check failed: {error}"
}

View file

@ -0,0 +1,167 @@
{
"toolbar.tooltip.open_drop": "D\u00e9posez un fichier ici pour l'ouvrir avec son application par d\u00e9faut",
"toolbar.tooltip.open_with_drop": "D\u00e9posez un fichier ici pour choisir l'application qui doit l'ouvrir",
"toolbar.tooltip.home": "Accueil",
"toolbar.tooltip.about": "\u00c0 propos de WebDrop Bridge",
"toolbar.tooltip.settings": "Param\u00e8tres",
"toolbar.tooltip.check_updates": "Rechercher des mises \u00e0 jour",
"toolbar.tooltip.clear_cache": "Vider le cache et les cookies",
"toolbar.tooltip.open_log": "Ouvrir le fichier journal",
"toolbar.tooltip.dev_tools": "Outils de d\u00e9veloppement (F12)",
"status.ready": "Pr\u00eat",
"status.opened": "Ouvert\u00a0: {name}",
"status.choose_app": "Choisir une app pour\u00a0: {name}",
"status.download_started": "\ud83d\udce5 T\u00e9l\u00e9chargement\u00a0: {filename}",
"status.download_completed": "T\u00e9l\u00e9chargement termin\u00e9\u00a0: {name}",
"status.download_cancelled": "\u26a0\ufe0f T\u00e9l\u00e9chargement annul\u00e9\u00a0: {name}",
"status.download_failed": "\u274c T\u00e9l\u00e9chargement \u00e9chou\u00e9\u00a0: {name}",
"status.download_error": "Erreur de t\u00e9l\u00e9chargement\u00a0: {error}",
"update.status.checking": "Recherche de mises \u00e0 jour",
"update.status.ready": "Pr\u00eat",
"update.status.available": "Mise \u00e0 jour disponible\u00a0: v{version}",
"update.status.deferred": "Mise \u00e0 jour diff\u00e9r\u00e9e",
"update.status.downloading": "T\u00e9l\u00e9chargement de v{version}",
"update.status.verifying": "V\u00e9rification du t\u00e9l\u00e9chargement",
"update.status.download_failed": "\u00c9chec du t\u00e9l\u00e9chargement",
"update.status.verification_failed": "\u00c9chec de la v\u00e9rification",
"update.status.timed_out": "D\u00e9lai d'attente d\u00e9pass\u00e9",
"update.status.ready_to_install": "Pr\u00eat \u00e0 installer",
"update.status.installation_started": "Installation d\u00e9marr\u00e9e",
"update.status.installation_failed": "\u00c9chec de l'installation",
"update.status.check_timed_out": "D\u00e9lai d\u00e9pass\u00e9 \u2013 aucune r\u00e9ponse du serveur",
"update.status.check_failed": "\u00c9chec\u00a0: {error}",
"update.status.download_timed_out": "D\u00e9lai d\u00e9pass\u00e9 lors du t\u00e9l\u00e9chargement",
"dialog.error.title": "Erreur",
"dialog.log_not_found.title": "Fichier journal introuvable",
"dialog.log_not_found.msg": "Aucun fichier journal trouv\u00e9 \u00e0\u00a0:\n{log_file}",
"dialog.cache_cleared.title": "Cache vid\u00e9",
"dialog.cache_cleared.msg": "Le cache et les cookies du navigateur ont \u00e9t\u00e9 vid\u00e9s avec succ\u00e8s.\n\nVous devrez peut-\u00eatre recharger la page ou red\u00e9marrer l'application pour que les modifications prennent effet.",
"dialog.cache_clear_failed.title": "Erreur",
"dialog.cache_clear_failed.msg": "Impossible de vider le cache et les cookies\u00a0: {error}",
"dialog.drag_error.title": "Erreur de glisser-d\u00e9poser",
"dialog.drag_error.msg": "Impossible de terminer l'op\u00e9ration de glisser-d\u00e9poser.\n\nErreur\u00a0: {error}",
"dialog.open_file_error.title": "Erreur d'ouverture",
"dialog.open_file_error.msg": "Impossible d'ouvrir le fichier avec son application par d\u00e9faut.\n\nFichier\u00a0: {file_path}\nErreur\u00a0: {error}",
"dialog.open_with_error.title": "Erreur Ouvrir avec",
"dialog.open_with_error.msg": "Impossible d'ouvrir un s\u00e9lecteur d'application sur cette plate-forme.",
"dialog.dev_tools.window_title": "\ud83d\udd27 Outils de d\u00e9veloppement",
"dialog.dev_tools.error_title": "Outils de d\u00e9veloppement",
"dialog.dev_tools.error_msg": "Impossible d'ouvrir les outils de d\u00e9veloppement\u00a0:\n{error}",
"dialog.domain_changed.title": "Domaine modifi\u00e9 \u2013 Red\u00e9marrage recommand\u00e9",
"dialog.domain_changed.msg": "Le domaine de l'application web a chang\u00e9\n\nVous avez chang\u00e9 de domaine. Pour une stabilit\u00e9 maximale et une authentification correcte, il est recommand\u00e9 de red\u00e9marrer l'application.\n\nLe profil et le cache ont \u00e9t\u00e9 vid\u00e9s, mais un red\u00e9marrage est recommand\u00e9.",
"dialog.domain_changed.restart_now": "Red\u00e9marrer maintenant",
"dialog.domain_changed.restart_later": "Red\u00e9marrer plus tard",
"dialog.restart_failed.title": "\u00c9chec du red\u00e9marrage",
"dialog.restart_failed.msg": "Impossible de red\u00e9marrer automatiquement l'application\u00a0:\n\n{error}\n\nVeuillez red\u00e9marrer manuellement.",
"dialog.update_timeout.title": "D\u00e9lai de v\u00e9rification des mises \u00e0 jour d\u00e9pass\u00e9",
"dialog.update_timeout.msg": "Le serveur n'a pas r\u00e9pondu dans les 30 secondes.\n\nCela peut \u00eatre d\u00fb \u00e0 un probl\u00e8me r\u00e9seau ou \u00e0 une indisponibilit\u00e9 du serveur.\n\nV\u00e9rifiez votre connexion et r\u00e9essayez.",
"dialog.update_failed.title": "\u00c9chec de la v\u00e9rification des mises \u00e0 jour",
"dialog.update_failed.msg": "Impossible de v\u00e9rifier les mises \u00e0 jour\u00a0:\n\n{error}\n\nVeuillez r\u00e9essayer plus tard.",
"dialog.download_failed.title": "\u00c9chec du t\u00e9l\u00e9chargement",
"dialog.download_failed.msg": "Impossible de t\u00e9l\u00e9charger la mise \u00e0 jour\u00a0:\n\n{error}\n\nVeuillez r\u00e9essayer plus tard.",
"dialog.checkout.title": "Extraire l'actif",
"dialog.checkout.msg": "Voulez-vous extraire cet actif\u00a0?\n\n{filename}",
"about.title": "\u00c0 propos de {app_name}",
"about.version": "Version\u00a0: {version}",
"about.description": "Connecte les flux de travail de glisser-d\u00e9poser web aux op\u00e9rations de fichiers natives pour les applications de bureau professionnelles.",
"about.drop_zones_title": "Zones de d\u00e9p\u00f4t de la barre d'outils\u00a0:",
"about.open_icon_desc": "Ic\u00f4ne Ouvrir\u00a0: ouvre les fichiers d\u00e9pos\u00e9s avec l'application par d\u00e9faut.",
"about.open_with_icon_desc": "Ic\u00f4ne Ouvrir avec\u00a0: affiche un s\u00e9lecteur d'application pour les fichiers d\u00e9pos\u00e9s.",
"about.product_of": "Un produit de\u00a0:",
"about.rights": "\u00a9 2026 h\u00f6rl Information Management GmbH. Tous droits r\u00e9serv\u00e9s.",
"settings.title": "Param\u00e8tres",
"settings.tab.web_source": "Source web",
"settings.tab.paths": "Chemins",
"settings.tab.urls": "URLs",
"settings.tab.logging": "Journalisation",
"settings.tab.window": "Fen\u00eatre",
"settings.tab.profiles": "Profils",
"settings.tab.general": "G\u00e9n\u00e9ral",
"settings.web_url.label": "URL de l'application web\u00a0:",
"settings.web_url.placeholder": "p.ex. http://localhost:8080 ou file:///./webapp/index.html",
"settings.web_url.open_btn": "Ouvrir",
"settings.url_mappings.label": "Mappages d'URL (Azure Blob Storage \u2192 Chemins locaux)\u00a0:",
"settings.url_mappings.col_prefix": "Pr\u00e9fixe URL",
"settings.url_mappings.col_path": "Chemin local",
"settings.url_mappings.add_btn": "Ajouter un mappage",
"settings.url_mappings.edit_btn": "Modifier la s\u00e9lection",
"settings.url_mappings.remove_btn": "Supprimer la s\u00e9lection",
"settings.paths.label": "R\u00e9pertoires racines autoris\u00e9s pour l'acc\u00e8s aux fichiers\u00a0:",
"settings.paths.add_btn": "Ajouter un chemin",
"settings.paths.remove_btn": "Supprimer la s\u00e9lection",
"settings.urls.label": "URLs web autoris\u00e9es (prise en charge des caract\u00e8res g\u00e9n\u00e9riques comme http://*.example.com)\u00a0:",
"settings.urls.add_btn": "Ajouter une URL",
"settings.urls.remove_btn": "Supprimer la s\u00e9lection",
"settings.log_level.label": "Niveau de journalisation\u00a0:",
"settings.log_file.label": "Fichier journal (facultatif)\u00a0:",
"settings.log_file.browse_btn": "Parcourir...",
"settings.window.width_label": "Largeur de la fen\u00eatre\u00a0:",
"settings.window.height_label": "Hauteur de la fen\u00eatre\u00a0:",
"settings.profiles.label": "Profils de configuration enregistr\u00e9s\u00a0:",
"settings.profiles.save_btn": "Enregistrer comme profil",
"settings.profiles.load_btn": "Charger le profil",
"settings.profiles.delete_btn": "Supprimer le profil",
"settings.profiles.export_btn": "Exporter la configuration",
"settings.profiles.import_btn": "Importer la configuration",
"settings.general.language_label": "Langue\u00a0:",
"settings.general.language_restart_note": "Le changement de langue prend effet apr\u00e8s red\u00e9marrage.",
"settings.add_mapping.url_title": "Ajouter un mappage d'URL",
"settings.add_mapping.url_prompt": "Entrez le pr\u00e9fixe URL Azure Blob Storage\u00a0:\n(p.ex. https://myblob.blob.core.windows.net/container/)",
"settings.add_mapping.path_prompt": "Entrez le chemin du syst\u00e8me de fichiers local\u00a0:\n(p.ex. C:\\Partage ou /mnt/partage)",
"settings.edit_mapping.title": "Modifier le mappage d'URL",
"settings.edit_mapping.url_prompt": "Entrez le pr\u00e9fixe URL Azure Blob Storage\u00a0:",
"settings.edit_mapping.path_prompt": "Entrez le chemin du syst\u00e8me de fichiers local\u00a0:",
"settings.add_url.title": "Ajouter une URL",
"settings.add_url.prompt": "Entrez le mod\u00e8le d'URL (p.ex. http://example.com ou http://*.example.com)\u00a0:",
"settings.profile.save.title": "Enregistrer le profil",
"settings.profile.save.prompt": "Entrez le nom du profil (p.ex. travail, personnel)\u00a0:",
"settings.select_directory.title": "S\u00e9lectionner un r\u00e9pertoire autoris\u00e9",
"settings.select_log_file.title": "S\u00e9lectionner le fichier journal",
"settings.export_config.title": "Exporter la configuration",
"settings.import_config.title": "Importer la configuration",
"settings.error.select_mapping": "Veuillez s\u00e9lectionner un mappage \u00e0 modifier",
"settings.error.select_profile_load": "Veuillez s\u00e9lectionner un profil \u00e0 charger",
"settings.error.select_profile_delete": "Veuillez s\u00e9lectionner un profil \u00e0 supprimer",
"update.checking.title": "V\u00e9rification des mises \u00e0 jour",
"update.checking.label": "Recherche de mises \u00e0 jour...",
"update.checking.timeout_info": "Cela peut prendre jusqu'\u00e0 10 secondes",
"update.available.title": "Mise \u00e0 jour disponible",
"update.available.header": "WebDrop Bridge v{version} est disponible",
"update.available.changelog_label": "Notes de version\u00a0:",
"update.available.update_now_btn": "Mettre \u00e0 jour maintenant",
"update.available.later_btn": "Plus tard",
"update.downloading.title": "T\u00e9l\u00e9chargement de la mise \u00e0 jour",
"update.downloading.header": "T\u00e9l\u00e9chargement en cours...",
"update.downloading.preparing": "Pr\u00e9paration du t\u00e9l\u00e9chargement",
"update.downloading.filename": "T\u00e9l\u00e9chargement\u00a0: {filename}",
"update.downloading.cancel_btn": "Annuler",
"update.install.title": "Installer la mise \u00e0 jour",
"update.install.header": "Pr\u00eat \u00e0 installer",
"update.install.message": "La mise \u00e0 jour est pr\u00eate \u00e0 \u00eatre install\u00e9e. L'application va red\u00e9marrer.",
"update.install.warning": "\u26a0\ufe0f Veuillez enregistrer tout travail non sauvegard\u00e9 avant de continuer.\nL'application va se fermer et red\u00e9marrer.",
"update.install.now_btn": "Installer maintenant",
"update.install.cancel_btn": "Annuler",
"update.no_update.title": "Aucune mise \u00e0 jour disponible",
"update.no_update.message": "\u2713 Vous utilisez la derni\u00e8re version",
"update.no_update.info": "WebDrop Bridge est \u00e0 jour.",
"update.no_update.ok_btn": "OK",
"update.error.title": "\u00c9chec de la mise \u00e0 jour",
"update.error.header": "\u26a0\ufe0f \u00c9chec de la mise \u00e0 jour",
"update.error.info": "Veuillez r\u00e9essayer ou visiter le site web pour t\u00e9l\u00e9charger la mise \u00e0 jour manuellement.",
"update.error.retry_btn": "R\u00e9essayer",
"update.error.manual_btn": "T\u00e9l\u00e9charger manuellement",
"update.error.cancel_btn": "Annuler",
"worker.server_not_responding": "Le serveur ne r\u00e9pond pas \u2013 v\u00e9rifiez plus tard",
"worker.no_installer": "Aucun programme d'installation trouv\u00e9 dans la version",
"worker.checksum_failed": "\u00c9chec de la v\u00e9rification de la somme de contr\u00f4le",
"worker.download_timed_out": "D\u00e9lai d\u00e9pass\u00e9 lors du t\u00e9l\u00e9chargement ou de la v\u00e9rification",
"worker.download_error": "Erreur de t\u00e9l\u00e9chargement\u00a0: {error}",
"worker.check_failed": "\u00c9chec de la v\u00e9rification\u00a0: {error}"
}