feat: i18n support with first translations

This commit is contained in:
2026-02-21 10:45:41 +01:00
parent a5281a7750
commit b8005bec30
48 changed files with 2792 additions and 462 deletions

View File

@@ -0,0 +1,320 @@
{
"common.save": "Speichern",
"common.cancel": "Abbrechen",
"common.clear": "Leeren",
"common.settings": "Einstellungen",
"common.tasks": "Aufgaben",
"common.running": "laufend",
"common.pending": "ausstehend",
"activity.posts": "Beiträge",
"activity.pages": "Seiten",
"activity.media": "Medien",
"activity.tags": "Schlagwörter",
"activity.aiAssistant": "KI-Assistent",
"activity.import": "Importieren",
"activity.sourceControl": "Versionskontrolle",
"activity.toggleHint": "(erneut klicken, um die Seitenleiste umzuschalten)",
"tasks.backgroundTasks": "Hintergrundaufgaben",
"tasks.clearCompleted": "Abgeschlossene löschen",
"tasks.recent": "Zuletzt",
"tasks.noActive": "Keine aktiven Aufgaben",
"tasks.cancelTask": "Aufgabe abbrechen",
"tasks.triggerTitle": "{running} laufend, {pending} ausstehend",
"app.taskCompleted": "Aufgabe abgeschlossen: {message}",
"app.taskFailed": "Aufgabe fehlgeschlagen: {message}",
"app.databaseRebuildFailed": "Datenbank-Neuaufbau fehlgeschlagen",
"app.textReindexFailed": "Text-Neuindizierung fehlgeschlagen",
"app.sitemapGenerationFailed": "Sitemap-Erstellung fehlgeschlagen",
"app.previewOpenFailed": "Ausgewählte Beitragsvorschau konnte nicht geöffnet werden",
"app.metadataDiff": "Metadaten-Diff",
"app.importComplete": "Import abgeschlossen: {posts} Beiträge, {media} Mediendateien",
"settings.language.english": "Englisch",
"settings.language.german": "Deutsch",
"settings.language.french": "Französisch",
"settings.language.italian": "Italienisch",
"settings.language.spanish": "Spanisch",
"settings.language.portuguese": "Portugiesisch (Português)",
"settings.language.dutch": "Niederländisch (Nederlands)",
"settings.language.polish": "Polnisch (Polski)",
"settings.language.russian": "Russisch (Русский)",
"settings.language.japanese": "Japanisch (日本語)",
"settings.language.chinese": "Chinesisch (中文)",
"settings.language.korean": "Koreanisch (한국어)",
"settings.language.arabic": "Arabisch (العربية)",
"settings.language.hindi": "Hindi",
"settings.language.turkish": "Türkisch (Türkçe)",
"settings.language.swedish": "Schwedisch (Svenska)",
"settings.language.danish": "Dänisch (Dansk)",
"settings.language.norwegian": "Norwegisch (Norsk)",
"settings.language.finnish": "Finnisch (Suomi)",
"settings.language.czech": "Tschechisch (Čeština)",
"settings.project.title": "Projekt",
"settings.project.browse": "Durchsuchen",
"settings.project.reset": "Zurücksetzen",
"settings.project.resetDefault": "Auf Standard zurücksetzen",
"settings.project.selectDataFolder": "Projekt-Datenordner auswählen",
"settings.editor.title": "Texteditor",
"settings.editor.mode.wysiwyg": "WYSIWYG (Visueller Editor)",
"settings.editor.mode.markdown": "Markdown (Quelle)",
"settings.editor.mode.preview": "Vorschau (schreibgeschützt)",
"settings.editor.diff.inline": "Zeilenweise",
"settings.editor.diff.sideBySide": "Nebeneinander",
"settings.content.title": "Beitragskategorien",
"settings.content.renderInLists": "In Listen anzeigen",
"settings.content.showTitles": "Titel anzeigen",
"settings.ai.title": "KI-Assistent",
"settings.ai.noModels": "Keine Modelle verfügbar",
"settings.publishing.ftpTitle": "FTP-Veröffentlichung",
"settings.publishing.sshTitle": "SSH-Veröffentlichung",
"settings.data.title": "Datenbankwartung",
"settings.data.fileSystemTitle": "Dateisystem",
"settings.search.placeholder": "Einstellungen durchsuchen...",
"settings.search.noResults": "No Einstellungen found matching \"{query}\"",
"settings.search.clear": "Suche löschen",
"settings.toast.publishingSaved": "Veröffentlichungs-Anmeldedaten gespeichert",
"settings.toast.saveCredentialsFailed": "Fehler beim save credentials",
"settings.toast.credentialsCleared": "{type}-Anmeldedaten gelöscht",
"settings.toast.projectSaved": "Project Einstellungen saved",
"settings.toast.projectSaveFailed": "Fehler beim save project Einstellungen",
"settings.toast.categoryAdded": "Kategorie \"{category}\" hinzugefügt",
"settings.toast.categoryAddFailed": "Fehler beim add category",
"settings.toast.categoryExists": "Kategorie existiert bereits",
"settings.toast.categoryProtected": "Standardkategorie \"{category}\" kann nicht gelöscht werden",
"settings.toast.categoryAtLeastOne": "Mindestens eine Kategorie ist erforderlich",
"settings.toast.categoryRemoved": "Kategorie \"{category}\" entfernt",
"settings.toast.categoryRemoveFailed": "Fehler beim remove category",
"settings.toast.categoriesReset": "Kategorien auf Standard zurückgesetzt",
"settings.toast.categoriesResetFailed": "Fehler beim reset categories",
"settings.toast.categorySettingsUpdateFailed": "Fehler beim update category Einstellungen",
"settings.toast.systemPromptSaved": "System-Prompt gespeichert",
"settings.toast.systemPromptSaveFailed": "Fehler beim save system prompt",
"settings.toast.systemPromptReset": "System-Prompt auf Standard zurückgesetzt",
"settings.toast.systemPromptResetFailed": "Fehler beim reset system prompt",
"settings.toast.apiKeySaved": "API-Schlüssel gespeichert und validiert",
"settings.toast.apiKeyInvalid": "Ungültiger API-Schlüssel",
"settings.toast.apiKeySaveFailed": "Fehler beim save API key",
"settings.toast.defaultModelUpdated": "Standardmodell aktualisiert",
"settings.toast.defaultModelUpdateFailed": "Fehler beim set default model",
"settings.toast.rebuildPostsLoading": "Rebuilding Beiträge database...",
"settings.toast.rebuildPostsSuccess": "Beitragsdatenbank neu aufgebaut",
"settings.toast.rebuildPostsFailed": "Fehler beim rebuild Beiträge database",
"settings.toast.rebuildMediaLoading": "Rebuilding Medien database...",
"settings.toast.rebuildMediaSuccess": "Mediendatenbank neu aufgebaut",
"settings.toast.rebuildMediaFailed": "Fehler beim rebuild Medien database",
"settings.toast.rebuildLinksLoading": "Rebuilding Beitrag links...",
"settings.toast.rebuildLinksSuccess": "Beitragslinks neu aufgebaut",
"settings.toast.rebuildLinksFailed": "Fehler beim rebuild Beitrag links",
"settings.toast.thumbnailsLoading": "Vorschaubilder werden erzeugt...",
"settings.toast.thumbnailsGenerated": "{count} Vorschaubilder erzeugt",
"settings.toast.thumbnailsAlreadyExist": "Alle Vorschaubilder existieren bereits",
"settings.toast.thumbnailsComplete": "Generierung der Vorschaubilder abgeschlossen",
"settings.toast.thumbnailsFailed": "Fehler beim generate thumbnails",
"chat.setupTitle": "KI-Chat-Einrichtung",
"chat.apiKeyRequiredTitle": "OpenCode Zen API-Schlüssel erforderlich",
"chat.apiKeyRequiredDescription": "Gib deinen OpenCode API-Schlüssel ein, um den KI-Chat zu aktivieren.",
"chat.apiKeyPlaceholder": "API-Schlüssel eingeben...",
"chat.apiKeySave": "Schlüssel speichern",
"chat.apiKeyValidating": "Wird validiert...",
"chat.apiKeyInvalid": "Ungültiger API-Schlüssel. Bitte prüfen und erneut versuchen.",
"chat.apiKeyValidationFailed": "Fehler beim validate API key.",
"chat.newChat": "Neuer Chat",
"chat.welcomeTitle": "Willkommen beim KI-Assistenten",
"chat.welcomeDescription": "I can help you manage your Beiträge and Medien. Try asking me to:",
"chat.welcomeTipSearch": "Suche for Beiträge about a specific topic",
"chat.welcomeTipDetails": "Get details about a specific Beitrag",
"chat.welcomeTipTags": "Alle Tags oder Kategorien in deinem Blog auflisten",
"chat.welcomeTipMetadata": "Update metadata for Beiträge or Medien",
"chat.welcomeTipImages": "List all images in your Medien library",
"chat.role.you": "Du",
"chat.role.assistant": "Assistent",
"chat.stop": "Stopp",
"chat.inputPlaceholder": "Nachricht eingeben...",
"chat.errorPrefix": "Fehler: {error}",
"chat.errorNoResponse": "Fehler beim get a response. Please try again.",
"chat.errorEmptyResponse": "Das Modell hat eine leere Antwort zurückgegeben. Versuche ein anderes Modell oder formuliere deine Frage neu.",
"chat.errorGeneric": "Sorry, an error occurred while processing your Nachricht.",
"chat.cancelledSuffix": "(abgebrochen)",
"aiSuggestions.title": "KI-Bildanalyse",
"aiSuggestions.close": "Schließen",
"aiSuggestions.analyzing": "Bild wird analysiert...",
"aiSuggestions.titleField": "Titel",
"aiSuggestions.altField": "Alternativtext",
"aiSuggestions.captionField": "Bildunterschrift",
"aiSuggestions.hasExisting": "(hat vorhandenen Wert)",
"aiSuggestions.current": "Aktuell",
"aiSuggestions.intro": "Wähle aus, welche KI-generierten Werte übernommen werden sollen. Vorhandene Werte bleiben standardmäßig erhalten.",
"aiSuggestions.empty": "Für dieses Bild wurden keine Vorschläge erstellt.",
"aiSuggestions.wait": "Bitte warten...",
"aiSuggestions.applySelected": "Ausgewählte übernehmen",
"insert.title.link": "Link einfügen",
"insert.title.image": "Bild einfügen",
"insert.tab.linkInternal": "Mit Beitrag verlinken",
"insert.tab.imageInternal": "Mediathek",
"insert.tab.linkExternal": "Externe URL",
"insert.tab.imageExternal": "Externes Bild",
"insert.searchPlaceholder.link": "Suche Beiträge by title or content...",
"insert.searchPlaceholder.image": "Suche Medien by name, title, or alt text...",
"insert.status.searching": "Suche...",
"insert.status.typeMore": "Zum Suchen mindestens 2 Zeichen eingeben",
"insert.status.noResults": "Keine {kind} für \"{query}\" gefunden",
"insert.label.url": "Webadresse",
"insert.label.linkTextOptional": "Linktext (optional)",
"insert.label.altText": "Alternativtext",
"insert.placeholder.linkUrl": "https://beispiel.de",
"insert.placeholder.imageUrl": "https://beispiel.de/bild.jpg",
"insert.placeholder.linkText": "Hier klicken",
"insert.placeholder.imageAlt": "Beschreibung des Bildes",
"insert.submit.link": "Link einfügen",
"insert.submit.image": "Bild einfügen",
"insert.hint.internal": "Mit ↑↓ navigieren, Enter zum Auswählen, Esc zum Schließen",
"insert.hint.external": "URL eingeben und Enter drücken oder auf die Schaltfläche klicken, Esc zum Schließen",
"insert.hint.canonicalPost": "Kanonisch: /YYYY/MM/DD/slug",
"insert.hint.canonicalMedia": "Canonical: /Medien/YYYY/MM/file.ext",
"postLinks.loading": "Links werden geladen...",
"postLinks.link": "Link",
"postLinks.links": "Links",
"postLinks.linksTo": "Verlinkt auf ({count})",
"postLinks.linkedBy": "Verlinkt von ({count})",
"postLinks.openTitle": "Öffnen: {title}",
"docs.title": "Dokumentation",
"docs.subtitle": "Benutzerhandbuch für diese installierte bDS-Version.",
"gitDiff.header": "Unterschied: {target}",
"gitDiff.noProject": "Kein aktives Projekt ausgewählt.",
"gitDiff.noProjectPath": "Projektpfad konnte nicht ermittelt werden.",
"gitDiff.loadFailed": "Fehler beim load diff.",
"gitDiff.loading": "Diff wird geladen...",
"gitDiff.changedFiles": "Geänderte Dateien",
"gitDiff.previousFile": "Vorherige Datei",
"gitDiff.nextFile": "Nächste Datei",
"errorModal.error": "Fehler",
"errorModal.stackTrace": "Stack-Trace",
"errorModal.copyClipboard": "In Zwischenablage kopieren",
"errorModal.copy": "Kopieren",
"errorModal.noStack": "Kein Stack-Trace verfügbar",
"confirmDelete.title": "Löschen bestätigen",
"confirmDelete.promptPost": "Are you sure you want to delete the Beitrag",
"confirmDelete.promptMedia": "Are you sure you want to delete the Medien file",
"confirmDelete.warning": "Warnung:",
"confirmDelete.referencedBy": "Diese(r) {itemType} wird von folgenden Elementen referenziert:",
"confirmDelete.note": "Beim Löschen dieses/dieser {itemType} werden alle diese Verweise entfernt.",
"confirmDelete.cancel": "Abbrechen",
"confirmDelete.deletePost": "Beitrag löschen",
"confirmDelete.deleteMedia": "Medien löschen",
"confirmDelete.itemType.post": "Beitrag",
"confirmDelete.itemType.media": "Medien",
"lightbox.close": "Schließen (Esc)",
"lightbox.previous": "Vorheriges (←)",
"lightbox.next": "Nächstes (→)",
"credentials.error.load": "Fehler beim load credentials:",
"credentials.error.save": "Fehler beim save credentials:",
"credentials.toast.saved": "Anmeldedaten gespeichert",
"credentials.toast.saveFailed": "Fehler beim save credentials",
"credentials.toast.testing": "{type}-Verbindung wird getestet...",
"credentials.toast.connectionFailed": "Connection fehlgeschlagen - check credentials",
"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.ssh.placeholder.host": "server.beispiel.de",
"credentials.ssh.placeholder.username": "ssh-benutzer",
"credentials.ssh.placeholder.keyPath": "~/.ssh/mein_schluessel",
"gitSidebar.header": "QUELLSTEUERUNG",
"gitSidebar.loading": "Laden...",
"gitSidebar.error.fetchRemoteUpdates": "Fehler beim fetch remote updates.",
"gitSidebar.error.refreshRemoteState": "Remote-Tracking-Status konnte nicht aktualisiert werden.",
"gitSidebar.error.gitMissing": "Git-Programm nicht gefunden. Bitte installiere Git und starte die App neu.",
"gitSidebar.error.noActiveProject": "Kein aktives Projekt ausgewählt.",
"gitSidebar.error.loadRepoStatus": "Repository-Status konnte nicht geladen werden.",
"gitSidebar.error.initFailed": "Fehler beim initialize git repository.",
"gitSidebar.error.actionFailed": "Fehler beim {action}.",
"gitSidebar.error.commitFailed": "Fehler beim commit changes.",
"gitSidebar.progress.preparingInit": "Repository-Initialisierung wird vorbereitet...",
"gitSidebar.progress.pushingRemote": "Commits werden zum Remote übertragen... das kann bei großen Uploads eine Weile dauern.",
"gitSidebar.progress.fetching": "Remote-Aktualisierungen werden abgerufen...",
"gitSidebar.progress.pulling": "Neueste Änderungen werden gezogen...",
"gitSidebar.progress.pruningLfs": "Lokaler Git-LFS-Cache wird bereinigt...",
"gitSidebar.progress.committing": "Commit wird erstellt...",
"gitSidebar.progress.initializingRepo": "Repository wird initialisiert...",
"gitSidebar.history.synced": "Synchronisiert",
"gitSidebar.history.localOnly": "Nur lokal",
"gitSidebar.history.remoteOnly": "Nur remote",
"gitSidebar.init.transcript": "Initialisierungsprotokoll",
"gitSidebar.aria.repoActions": "Repository-Aktionen",
"gitSidebar.aria.openChanges": "Offene Änderungen",
"gitSidebar.aria.commitStatusLegend": "Legende zum Commit-Status",
"gitSidebar.aria.versionHistory": "Versionsverlauf",
"gitSidebar.action.fetch": "Abrufen",
"gitSidebar.action.fetching": "Abrufen...",
"gitSidebar.action.pull": "Pullen",
"gitSidebar.action.pulling": "Pullen...",
"gitSidebar.action.push": "Pushen",
"gitSidebar.action.pushing": "Pushen...",
"gitSidebar.action.pruneLfs": "LFS bereinigen",
"gitSidebar.action.pruning": "Bereinigen...",
"gitSidebar.action.commit": "Commit erstellen",
"gitSidebar.action.committing": "Commit wird erstellt...",
"gitSidebar.action.initializeGit": "Git initialisieren",
"gitSidebar.action.initializing": "Initialisieren...",
"gitSidebar.openChanges": "Öffnen Changes ({count})",
"gitSidebar.versionHistory": "Versionsverlauf ({count})",
"gitSidebar.loadingChanges": "Änderungen werden geladen...",
"gitSidebar.noChanges": "Keine Änderungen",
"gitSidebar.loadingHistory": "Verlauf wird geladen...",
"gitSidebar.noCommits": "Noch keine Commits",
"gitSidebar.branch": "Zweig: {branch}",
"gitSidebar.aheadBehind": "voraus {ahead} / hinterher {behind}",
"gitSidebar.notRepo": "Dieses Projekt ist kein Git-Repository.",
"gitSidebar.placeholder.remoteUrl": "Optionale URL des Remote-Repositorys",
"gitSidebar.placeholder.commitMessage": "Commit-Nachricht",
"editor.untitled": "Unbenannt",
"tabBar.style": "Stil",
"tabBar.loading": "Laden...",
"tabBar.unknown": "Unbekannt",
"tabBar.preview": "Vorschau",
"tabBar.modified": "Geändert",
"tabBar.closeHint": "Schließen (Ctrl+W)",
"tabBar.scrollLeft": "Tabs nach links scrollen",
"tabBar.scrollRight": "Tabs nach rechts scrollen",
"tabBar.commitTitle": "Änderung {hash}",
"tabBar.error.fetchPostTitle": "Fehler beim fetch Beitrag title:",
"tabBar.error.fetchChatTitle": "Fehler beim fetch chat title:",
"tabBar.error.fetchImportTitle": "Fehler beim fetch import definition title:",
"tabBar.error.fetchCommitTitle": "Fehler beim fetch commit titles:",
"metadataDiff.title": "Metadaten-Diff-Werkzeug",
"metadataDiff.description": "Compare Beitrag metadata between database and markdown files. Fix inconsistencies caused by bugs or manual edits.",
"metadataDiff.error.loadStats": "Fehler beim load database statistics",
"metadataDiff.error.scan": "Fehler beim scan for differences",
"metadataDiff.progress.starting": "Scan wird gestartet...",
"metadataDiff.progress.scanningPublished": "Scanning published Beiträge...",
"metadataDiff.progress.scanning": "Scanne...",
"metadataDiff.action.scan": "Nach Unterschieden suchen",
"metadataDiff.action.rescan": "Erneut scannen",
"metadataDiff.stats.totalPosts": "Beiträge gesamt",
"metadataDiff.stats.published": "Veröffentlicht",
"metadataDiff.stats.drafts": "Entwürfe",
"metadataDiff.stats.mediaFiles": "Mediendateien",
"metadataDiff.summary.noDiffs": "✅ No differences found! All {total} published Beiträge are in sync.",
"metadataDiff.summary.withDiffs": "⚠️ Found {count} Beiträge with differences out of {total} published Beiträge.",
"metadataDiff.group.differences": "{label}-Unterschiede",
"metadataDiff.group.postsCount": "{count} Beiträge",
"metadataDiff.sync.failed": "fehlgeschlagen",
"metadataDiff.sync.dbToFile.title": "Dateien mit Datenbankwerten aktualisieren",
"metadataDiff.sync.dbToFile.success": "Synced {success} Beiträge to files{fehlgeschlagen}",
"metadataDiff.sync.dbToFile.error": "Fehler beim sync to files",
"metadataDiff.sync.fileToDb.title": "Datenbank mit Dateiwerten aktualisieren",
"metadataDiff.sync.fileToDb.success": "Synced {success} files to database{fehlgeschlagen}",
"metadataDiff.sync.fileToDb.error": "Fehler beim sync to database",
"metadataDiff.value.database": "Datenbank",
"metadataDiff.value.file": "Datei",
"metadataDiff.empty": "Klicke auf „Nach Unterschieden suchen“, um Datenbank-Metadaten mit Datei-Metadaten zu vergleichen."
}