diff --git a/AGENTS.md b/AGENTS.md index d071a509..d7f6bd63 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -34,7 +34,7 @@ donutbrowser/ │ ├── components/ # 50+ React components (dialogs, tables, UI) │ │ └── tips/ # Feature tips: SVG scene primitives and one looping scene per tip │ ├── hooks/ # Event-driven React hooks -│ ├── i18n/locales/ # Translations (en, es, fr, ja, ko, pt, ru, tr, vi, zh) +│ ├── i18n/locales/ # Translations (de, en, es, fr, ja, ko, pt, ru, tr, vi, zh) │ ├── generated/ # Build-generated third-party license inventory │ ├── lib/ # Utilities (themes, toast, browser-utils) │ └── types.ts # Shared TypeScript interfaces @@ -180,7 +180,7 @@ Linux/Windows swap `~/Library/Logs/com.donutbrowser/` for the platform-appropria - Never write user-facing strings as raw English literals in JSX, toast messages, dialog titles/descriptions, button labels, placeholders, table headers, tooltips, or empty-state text. Always go through `t("namespace.key")` from `useTranslation()`. - This applies to every component under `src/`, including new ones. If a component doesn't already import `useTranslation`, add it. -- Adding a new string means adding the key to EVERY locale file in `src/i18n/locales/` (currently en, es, fr, ja, ko, pt, ru, tr, vi, zh), not just `en.json`. The English version alone is incomplete work. Don't trust this list: enumerate `src/i18n/locales/*.json` and update every file you find, because a newly added locale is exactly what a hardcoded list silently skips. +- Adding a new string means adding the key to EVERY locale file in `src/i18n/locales/` (currently de, en, es, fr, ja, ko, pt, ru, tr, vi, zh), not just `en.json`. The English version alone is incomplete work. Don't trust this list: enumerate `src/i18n/locales/*.json` and update every file you find, because a newly added locale is exactly what a hardcoded list silently skips. - Reuse existing keys (`common.buttons.*`, `common.labels.*`, `createProfile.*`, etc.) before creating new namespaces. Check `en.json` first. - Strings excluded from this rule: `console.log/warn/error`, dev-only debug labels, internal IDs, CSS class names, type names. If unsure whether a string renders to the user, assume it does and translate it. - Never use `t(key, "fallback")` with a default-value second argument. The 2-arg form is forbidden: every key must exist in every locale file before the call site lands. Fallbacks mask missing translations, so a key missing from `ru.json` silently renders the English fallback to Russian users and the bug never surfaces in CI or review. Only call `t("namespace.key")`. If a translation is missing for any locale, that's a bug to fix at the JSON, not a hole to paper over at the call site. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7a2b9c6c..1d737164 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -83,7 +83,7 @@ codeql database analyze /tmp/codeql-rust --format=sarifv2.1.0 --output=/tmp/rust ## Key Rules -- Translations: Any UI text change must be reflected in all 9 locale files (`src/i18n/locales/`) +- Translations: Any UI text change must be reflected in all 11 locale files (`src/i18n/locales/`) - Tauri commands: If you modify Tauri commands, the `test_no_unused_tauri_commands` test will catch unused ones - No hardcoded colors: Use theme CSS variables (see `src/lib/themes.ts`), never Tailwind color classes like `text-red-500` - No lock file changes: Don't update `pnpm-lock.yaml` or `Cargo.lock` unless updating dependencies is the purpose of the PR diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 6e0a25c2..ca683356 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -1,6 +1,7 @@ import i18n from "i18next"; import { initReactI18next } from "react-i18next"; +import de from "./locales/de.json"; import en from "./locales/en.json"; import es from "./locales/es.json"; import fr from "./locales/fr.json"; @@ -17,6 +18,7 @@ export const SUPPORTED_LANGUAGES = [ { code: "es", name: "Spanish", nativeName: "Español" }, { code: "pt", name: "Portuguese", nativeName: "Português" }, { code: "fr", name: "French", nativeName: "Français" }, + { code: "de", name: "German", nativeName: "Deutsch" }, { code: "zh", name: "Chinese", nativeName: "中文" }, { code: "ja", name: "Japanese", nativeName: "日本語" }, { code: "ko", name: "Korean", nativeName: "한국어" }, @@ -40,6 +42,11 @@ const LANGUAGE_FALLBACKS: Record = { "es-ES": ["es", "en"], "fr-CA": ["fr", "en"], "fr-FR": ["fr", "en"], + "de-DE": ["de", "en"], + "de-AT": ["de", "en"], + "de-CH": ["de", "en"], + "de-LU": ["de", "en"], + "de-LI": ["de", "en"], "vi-VN": ["vi", "en"], }; @@ -66,6 +73,7 @@ const resources = { es: { translation: es }, pt: { translation: pt }, fr: { translation: fr }, + de: { translation: de }, zh: { translation: zh }, ja: { translation: ja }, ko: { translation: ko }, diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json new file mode 100644 index 00000000..a5186f87 --- /dev/null +++ b/src/i18n/locales/de.json @@ -0,0 +1,3530 @@ +{ + "common": { + "buttons": { + "save": "Speichern", + "cancel": "Abbrechen", + "close": "Schließen", + "delete": "Löschen", + "create": "Erstellen", + "back": "Zurück", + "retry": "Erneut versuchen", + "download": "Herunterladen", + "confirm": "Bestätigen", + "apply": "Anwenden", + "reset": "Zurücksetzen", + "add": "Hinzufügen", + "edit": "Bearbeiten", + "copy": "Kopieren", + "clear": "Leeren", + "search": "Suchen", + "select": "Auswählen", + "grant": "Erteilen", + "start": "Starten", + "stop": "Stoppen", + "enable": "Aktivieren", + "disable": "Deaktivieren", + "import": "Importieren", + "export": "Exportieren", + "refresh": "Aktualisieren", + "loading": "Wird geladen...", + "saveSettings": "Einstellungen speichern", + "moreInfo": "Weitere Infos", + "downloading": "Wird heruntergeladen...", + "minimize": "Minimieren", + "saving": "Wird gespeichert…", + "saved": "Gespeichert", + "copied": "Kopiert", + "learnMore": "Mehr erfahren" + }, + "status": { + "active": "Aktiv", + "inactive": "Inaktiv", + "running": "Läuft", + "stopped": "Gestoppt", + "enabled": "Aktiviert", + "disabled": "Deaktiviert", + "granted": "Erteilt", + "notGranted": "Nicht erteilt", + "connected": "Verbunden", + "disconnected": "Getrennt", + "synced": "Synchronisiert", + "syncing": "Wird synchronisiert", + "pending": "Ausstehend", + "error": "Fehler" + }, + "labels": { + "name": "Name", + "type": "Typ", + "status": "Status", + "actions": "Aktionen", + "description": "Beschreibung", + "none": "Keine", + "default": "Standard", + "custom": "Benutzerdefiniert", + "optional": "Optional", + "required": "Erforderlich", + "unknownProfile": "Unbekannt", + "mode": "Modus", + "never": "Nie" + }, + "time": { + "days": "Tage", + "hours": "Stunden", + "minutes": "Minuten", + "seconds": "Sekunden", + "remaining": "verbleibend" + }, + "aria": { + "selectAll": "Alle auswählen", + "selectRow": "Zeile auswählen", + "selectProfile": "Profil auswählen", + "copy": "In die Zwischenablage kopieren", + "copied": "Kopiert", + "showToken": "Token anzeigen", + "hideToken": "Token ausblenden" + }, + "keys": { + "escape": "Escape" + }, + "errors": { + "unknown": "Ein unbekannter Fehler ist aufgetreten" + }, + "window": { + "minimize": "Minimieren", + "maximize": "Maximieren", + "restore": "Wiederherstellen", + "close": "Fenster schließen" + }, + "commandPalette": { + "title": "Befehlspalette", + "description": "Nach einem Befehl suchen..." + }, + "noResults": "Keine Ergebnisse gefunden.", + "srOnly": { + "copy": "Kopieren", + "copied": "Kopiert" + }, + "placeholders": { + "example": "z. B. {{value}}" + } + }, + "settings": { + "title": "Einstellungen", + "appearance": { + "title": "Darstellung", + "theme": "Design", + "themeDescription": "Wählen Sie Ihr bevorzugtes Design oder übernehmen Sie die Systemeinstellung. Änderungen am eigenen Design werden erst beim Speichern übernommen.", + "themePreset": "Design-Vorlage", + "customColors": "Eigene Farben", + "selectTheme": "Design auswählen", + "selectThemePreset": "Design-Vorlage auswählen", + "yourOwn": "Eigenes", + "light": "Hell", + "dark": "Dunkel", + "system": "System" + }, + "language": { + "title": "Sprache", + "description": "Wählen Sie die bevorzugte Sprache für die Benutzeroberfläche.", + "systemDefault": "Systemstandard", + "selectLanguage": "Sprache auswählen", + "interface": "Sprache der Oberfläche" + }, + "defaultBrowser": { + "title": "Standardbrowser", + "setAsDefault": "Als Standardbrowser festlegen", + "alreadyDefault": "Bereits Standardbrowser", + "description": "Als Standardbrowser öffnet Donut Browser Weblinks und lässt Sie wählen, welches Profil verwendet wird.", + "setSuccess": "Donut Browser ist jetzt Ihr Standardbrowser", + "setFailed": "Der Standardbrowser konnte nicht festgelegt werden", + "finishInSystemSettings": "In den Windows-Einstellungen abschließen", + "finishInSystemSettingsDescription": "Donut Browser ist registriert. Die Windows-Einstellungen sind geöffnet: Wählen Sie unter „Webbrowser“ Donut Browser aus, um den Vorgang abzuschließen." + }, + "permissions": { + "title": "Systemberechtigungen", + "loading": "Berechtigungen werden geladen...", + "description": "Diese Berechtigungen erlauben Browsern, die aus Donut Browser gestartet werden, den Zugriff auf Systemressourcen. Jede Website fragt trotzdem einzeln nach Ihrer Erlaubnis.", + "microphone": "Mikrofon", + "microphoneDescription": "Mikrofonzugriff für Browseranwendungen", + "camera": "Kamera", + "cameraDescription": "Kamerazugriff für Browseranwendungen", + "accessRequested": "Zugriff auf {{permission}} angefordert" + }, + "integrations": { + "title": "Integrationen", + "description": "Konfigurieren Sie die lokale API und MCP (Model Context Protocol) für die Anbindung externer Tools und KI-Assistenten.", + "openSettings": "Integrationseinstellungen öffnen" + }, + "encryption": { + "title": "Sync-Verschlüsselung", + "description": "Legen Sie ein Passwort fest, um die Ende-zu-Ende-verschlüsselte Synchronisierung zu aktivieren. Wenn Sie dieses Passwort verlieren, lassen sich verschlüsselte Profile nicht wiederherstellen.", + "passwordSet": "Aktiv", + "passwordSetDescription": "E2E-Verschlüsselungspasswort ist festgelegt", + "noPassword": "Kein Passwort festgelegt", + "passwordPlaceholder": "Passwort (mind. 8 Zeichen)", + "confirmPlaceholder": "Passwort bestätigen", + "setPassword": "Passwort festlegen", + "changePassword": "Passwort ändern", + "removePassword": "Passwort entfernen", + "removed": "Verschlüsselungspasswort entfernt", + "passwordSaved": "Verschlüsselungspasswort festgelegt", + "passwordMismatch": "Die Passwörter stimmen nicht überein", + "passwordTooShort": "Das Passwort muss mindestens 8 Zeichen lang sein", + "requiresProOrOwner": "Die Profilverschlüsselung ist für Pro-Nutzer und Team-Inhaber verfügbar.", + "validatePassword": "Prüfen", + "validateDialog": { + "title": "Verschlüsselungspasswort prüfen", + "description": "Geben Sie Ihr Verschlüsselungspasswort ein, um zu prüfen, ob es mit dem auf diesem Gerät gespeicherten übereinstimmt.", + "submit": "Prüfen", + "matchToast": "Das Passwort ist korrekt", + "mismatchToast": "Das Passwort stimmt nicht überein" + } + }, + "commercial": { + "title": "Kommerzielle Lizenz", + "trialActive": "Testphase: noch {{days}} Tage, {{hours}} Stunden", + "trialActiveDescription": "Die kommerzielle Nutzung ist während der Testphase kostenlos. Danach funktionieren alle Funktionen weiter: Die private Nutzung bleibt kostenlos, nur für die kommerzielle Nutzung ist dann eine Lizenz nötig.", + "trialExpired": "Testphase abgelaufen", + "trialExpiredDescription": "Die private Nutzung bleibt kostenlos. Für die kommerzielle Nutzung ist eine Lizenz erforderlich.", + "subscriptionActive": "Abonniert: Tarif {{plan}}", + "subscriptionActiveDescription": "Ihr Abonnement für Donut Browser ist aktiv. Die kommerzielle Nutzung ist für die Laufzeit Ihres Tarifs lizenziert." + }, + "advanced": { + "title": "Erweitert", + "clearCache": "Gesamten Versionscache leeren", + "clearCacheDescription": "Löscht alle zwischengespeicherten Daten zu Browserversionen und ruft alle Browserversionen neu von ihren Quellen ab. Dadurch werden die Versionsinformationen aller Browser neu heruntergeladen.", + "clearCacheFailed": "Der Cache konnte nicht geleert werden", + "copyLogs": "Protokolle kopieren", + "openLogDir": "Protokollordner öffnen", + "copyLogsSuccess": "Protokolle in die Zwischenablage kopiert", + "copyLogsDescription": "Kopiert ein bereinigtes Paket der aktuellen Protokolle (bis zu 5 MB). Prüfen Sie es vor dem Teilen, da die Bereinigung nicht jede Art personenbezogener Daten erkennen kann." + }, + "disableAutoUpdates": "Automatische App-Updates deaktivieren", + "disableAutoUpdatesDescription": "Verhindert, dass die App automatisch nach Updates für Donut Browser sucht und sie installiert. Browser-Updates sind davon nicht betroffen.", + "keepDecryptedProfilesInRam": "Entschlüsselte Profile im RAM behalten", + "keepDecryptedProfilesInRamDescription": "Behält die entschlüsselte Kopie passwortgeschützter Profile zwischen den Starts im RAM, damit sie schneller starten. Die Kopie auf dem Datenträger bleibt in jedem Fall verschlüsselt.", + "privacy": { + "consistencyWarning": "Bei Fingerprint-Abweichung blockieren", + "consistencyWarningDescription": "Verhindert den Browserstart, wenn Zeitzone oder Sprache eines Profils nicht zum Exit-Node seines Proxys passen. Sie können trotzdem starten.", + "clearTraffic": "Gesamten Datenverkehrsverlauf löschen", + "clearTrafficDescription": "Löscht die erfassten Datenverkehrsstatistiken aller Profile sicher.", + "clearTrafficSuccess": "Datenverkehrsverlauf gelöscht", + "vpnExtensionWarning": "Warnung bei VPN-Erweiterungen", + "vpnExtensionWarningDescription": "Vor dem Start warnen, wenn ein Profil eine Erweiterung enthält, die den Datenverkehr des Browsers umleiten kann.", + "title": "Datenschutz", + "requireRoute": "Starts ohne Proxy oder VPN blockieren", + "requireRouteDescription": "Ein Profil startet nie über Ihre eigene IP-Adresse: weder ohne Proxy oder VPN noch wenn sein Proxy oder VPN fehlt oder nicht antwortet.", + "recordSites": "Besuchte Websites aufzeichnen", + "recordSitesDescription": "Die Traffic-Statistik listet die Websites, die jedes Profil erreicht hat. Wenn deaktiviert, werden nur Datenmengen gespeichert. Passwortgeschützte und flüchtige Profile zeichnen nie Websites auf." + }, + "trashRetention": "Gelöschte Profile aufbewahren für", + "trashRetentionDescription": "Gelöschte Profile bleiben im Papierkorb und können bis dahin wiederhergestellt werden. Danach werden sie endgültig entfernt.", + "trashRetentionDays_one": "{{count}} Tag", + "trashRetentionDays_other": "{{count}} Tage", + "dataRoot": { + "title": "Datenverzeichnis", + "current": "Aktueller Speicherort", + "usage": "{{size}} in {{files}} Dateien", + "description": "Profile, heruntergeladene Browser und Einstellungen liegen alle hier. Verschieben Sie sie auf ein anderes Laufwerk, wenn der Platz auf dem Systemlaufwerk knapp wird.", + "choose": "Ordner auswählen", + "chooseTitle": "Ordner für das Datenverzeichnis auswählen", + "move": "Verschieben", + "willMoveTo": "Alles wird verschoben nach", + "moved": "Datenverzeichnis verschoben. Starten Sie Donut Browser neu, um es zu verwenden.", + "reading": "Datenverzeichnis wird gelesen...", + "restartRequired": "Starten Sie Donut Browser neu, um den neuen Speicherort zu verwenden. Bis dahin wird weiter der alte verwendet.", + "environmentOverride": "DONUTBROWSER_DATA_DIR ist gesetzt, daher verwendet die App diesen Speicherort, unabhängig von der Auswahl hier.", + "missing": "Das ausgewählte Datenverzeichnis ist nicht vorhanden. Wenn es auf einem Wechseldatenträger liegt, schließen Sie diesen wieder an und starten Sie neu.", + "useDefault": "Wieder den Standardspeicherort verwenden", + "usingDefault": "Beim nächsten Start wird der Standardspeicherort verwendet.", + "copiedCount": "{{copied}} von {{total}} Dateien", + "phase": { + "scanning": "Aktuelles Verzeichnis wird vermessen", + "copying": "Wird kopiert", + "verifying": "Kopie wird geprüft", + "cleaning": "Altes Verzeichnis wird entfernt", + "done": "Fertig" + } + }, + "trashRetentionOff": "Sofort löschen", + "scrollSectionsLeft": "Abschnitte nach links scrollen", + "scrollSectionsRight": "Abschnitte nach rechts scrollen" + }, + "header": { + "searchPlaceholder": "Profile durchsuchen...", + "clearSearch": "Suche leeren", + "moreActions": "Weitere Aktionen", + "createProfile": "Neues Profil erstellen", + "menu": { + "settings": "Einstellungen", + "proxies": "Proxys & VPNs", + "groups": "Gruppen", + "syncService": "Konto", + "integrations": "Integrationen", + "importProfile": "Profil importieren", + "extensions": "Erweiterungen" + }, + "newProfile": "Neu", + "donutLogo": "Logo von Donut Browser", + "scrollGroupsLeft": "Gruppen nach links scrollen", + "scrollGroupsRight": "Gruppen nach rechts scrollen" + }, + "search": { + "helpLabel": "Suchsyntax", + "helpTitle": "Suchsyntax", + "helpIntro": "Geben Sie Wörter ein, um Namen, Notizen, Tags und IDs zu durchsuchen. Mit Feldern grenzen Sie die Suche ein.", + "fieldsTitle": "Felder", + "operatorsTitle": "Operatoren", + "examplesTitle": "Beispiele", + "fields": { + "name": "Profilname", + "tag": "Tag", + "note": "Notiz", + "id": "Profil-ID, ab dem Anfang abgeglichen", + "group": "Gruppenname", + "proxy": "Proxyname", + "vpn": "VPN-Name", + "ext": "Name der Erweiterungsgruppe", + "dns": "DNS-Sperrliste", + "os": "Betriebssystem", + "browser": "Browser", + "status": "Läuft oder nicht", + "sync": "Sync-Modus", + "email": "E-Mail des Inhabers", + "version": "Browserversion", + "locked": "Passwortgeschützt", + "ephemeral": "Flüchtiges Profil", + "created": "Erstellungsdatum", + "launched": "Datum des letzten Starts" + }, + "operators": { + "negate": "Schließt Treffer aus", + "quote": "Hält einen Wert mit Leerzeichen zusammen", + "or": "Trifft auf einen der beiden Begriffe zu", + "comma": "Kurzform für einen der Werte", + "exact": "Trifft auf den ganzen Wert zu, nicht auf einen Teil davon", + "none": "Hier ist nichts gesetzt; any bewirkt das Gegenteil", + "compare": "Vergleicht Datumsangaben und Versionen; 7d, 3w und 6m zählen ab jetzt zurück" + }, + "examples": { + "a": "Laufende Profile in einer Gruppe", + "b": "Profile ohne Tags, die einen Proxy haben", + "c": "Seit über 30 Tagen nicht gestartet, archivierte ausgenommen" + } + }, + "profiles": { + "title": "Profile", + "empty": "Noch keine Profile", + "emptyDescription": "Erstellen Sie Ihr erstes Browserprofil, um loszulegen.", + "createFirst": "Profil erstellen", + "noResults": "Keine Profile gefunden", + "noResultsDescription": "Keine Profile entsprechen Ihren Suchkriterien.", + "table": { + "name": "Name", + "none": "Keine", + "browser": "Browser", + "status": "Status", + "actions": "Aktionen", + "note": "Notiz", + "group": "Gruppe", + "proxy": "Proxy / VPN", + "lastLaunch": "Letzter Start", + "empty": "Keine Profile gefunden.", + "ext": "EXT", + "dns": "DNS", + "dnsLevel": "DNS-Sperrliste: {{level}}", + "extSearch": "Gruppen suchen…", + "extEmpty": "Keine Erweiterungsgruppen", + "cantModifyRunning": "Ein laufendes Profil kann nicht geändert werden", + "cantModifyLaunching": "Das Profil kann während des Starts nicht geändert werden", + "cantModifyStopping": "Das Profil kann während des Stoppens nicht geändert werden", + "cantModifyUpdating": "Das Profil kann nicht geändert werden, während der Browser aktualisiert wird", + "emptyTitle": "Noch keine Profile", + "emptyHint": "Erstellen Sie Ihr erstes Profil oder importieren Sie vorhandene aus einem anderen Browser.", + "emptyCreate": "Profil erstellen", + "emptyImport": "Profile importieren", + "emptyFilteredTitle": "Keine Profile gefunden", + "emptyFilteredHint": "Keine Profile passen zu dieser Gruppe oder Suche. Versuchen Sie einen anderen Filter oder erstellen Sie ein neues Profil.", + "bot": "Bot", + "profileId": "ID" + }, + "actions": { + "launch": "Starten", + "stop": "Stoppen", + "edit": "Bearbeiten", + "delete": "Löschen", + "copyCookies": "Cookies kopieren", + "configure": "Konfigurieren", + "clone": "Profil klonen", + "viewNetwork": "Netzwerk anzeigen", + "syncSettings": "Sync-Einstellungen", + "assignToGroup": "Einer Gruppe zuweisen", + "changeFingerprint": "Fingerprint ändern", + "copyCookiesToProfile": "Cookies in Profil kopieren", + "launchHook": "Start-Hook-URL", + "setPassword": "Passwort festlegen", + "changePassword": "Passwort ändern", + "removePassword": "Passwort entfernen" + }, + "synchronizer": { + "launchWithSync": "Mit Synchronizer starten", + "stopLeader": "Dieses Profil und alle Folgeprofile stoppen", + "stopFollower": "Folgt den Aktionen von {{leaderName}}", + "desyncedTooltip": "Synchronisierung fehlgeschlagen bei {{url}}", + "paidFeature": "Der Synchronizer ist eine kostenpflichtige Funktion", + "wayfernOnly": "Nur Wayfern-Profile können synchronisiert werden", + "selectFollowers": "Folgeprofile auswählen", + "selectFollowersDesc": "Wählen Sie die Profile, die die Aktionen des Leitprofils spiegeln. Nur gestoppte Wayfern-Profile können ausgewählt werden.", + "leader": "Leitprofil", + "follower": "Folgeprofil", + "startSession": "Sync-Sitzung starten", + "noFollowers": "Wählen Sie mindestens ein Folgeprofil aus", + "flakyBadge": "INSTABIL", + "flakyTooltip": "Dieses Profil hat eine andere Bildschirmauflösung als das Leitprofil. Seitenlayouts können abweichen, sodass Klicks und Interaktionen die falschen Elemente treffen.", + "pauseMirroring": "Spiegelung pausieren", + "resumeMirroring": "Spiegelung fortsetzen", + "pausedNote": "Die Folgeprofile übernehmen gerade nichts vom Leitprofil. Was Sie jetzt im Leitprofil tun, bleibt dort.", + "layoutLabel": "Fensteranordnung", + "layout": { + "grid": "Raster", + "columns": "Spalten", + "cascade": "Überlappend" + }, + "arrange": "Fenster anordnen", + "stopSession": "Sitzung beenden", + "sessionEmpty": "In dieser Sitzung sind keine Folgeprofile mehr übrig.", + "stateMirroring": "Spiegelt", + "stateHeld": "Herausgenommen", + "statePaused": "Pausiert", + "stateDesynced": "Nicht synchron", + "holdOut": "Herausnehmen", + "rejoin": "Wieder beitreten" + }, + "ephemeral": "Flüchtig", + "ephemeralDescription": "Der Browser wird gezwungen, Profildaten in den Arbeitsspeicher statt auf den Datenträger zu schreiben. Beachten Sie, dass Ihr Betriebssystem unter Last Teile des Arbeitsspeichers auf den Datenträger auslagern kann, sodass Spuren der Sitzung eventuell wiederherstellbar sind.", + "ephemeralBadge": "Flüchtig", + "bulkDelete": { + "title": "Ausgewählte Profile löschen", + "description": "{{count}} Profil(e) werden in den Papierkorb verschoben. Dort können Sie sie wiederherstellen, bis sie ablaufen.", + "confirmButton": "{{count}} Profil(e) löschen" + }, + "note": { + "empty": "Keine Notiz", + "placeholder": "Notiz hinzufügen..." + }, + "aria": { + "profileInfo": "Profilinformationen" + }, + "delete": { + "title": "Profil löschen", + "description": "„{{profileName}}“ wird in den Papierkorb verschoben. Dort können Sie es wiederherstellen, bis es abläuft.", + "confirmButton": "Profil löschen" + }, + "actionBar": { + "assignToGroup": "Einer Gruppe zuweisen", + "assignProxy": "Proxy zuweisen", + "assignExtensionGroup": "Erweiterungsgruppe zuweisen", + "copyCookies": "Cookies kopieren", + "runSelected": "Ausgewählte starten", + "stopSelected": "Ausgewählte stoppen", + "proRequired": "Pro-Tarif für Massenstart/-stopp erforderlich", + "distributeProxies": "Proxys verteilen" + }, + "passwordProtectedBadge": "Passwortgeschützt", + "launchHook": { + "placeholder": "https://example.com/track-launch" + }, + "bulkRun": { + "confirmTitle": "{{count}} Profile starten?", + "confirmDescription": "Wenn Sie {{count}} Profile gleichzeitig starten, kann das viele Systemressourcen beanspruchen. Fortfahren?", + "confirmButton": "{{count}} starten", + "noneToRun": "Keine ausgewählten Profile zum Starten." + }, + "bulkStop": { + "confirmTitle": "{{count}} Profile stoppen?", + "confirmDescription": "{{count}} laufende Profile stoppen?", + "confirmButton": "{{count}} stoppen", + "noneToStop": "Keine ausgewählten Profile zum Stoppen." + }, + "sort": { + "nameAsc": "Name (A–Z)", + "nameDesc": "Name (Z–A)", + "newest": "Neueste zuerst", + "oldest": "Älteste zuerst" + }, + "remote": { + "runningTooltip": "Läuft auf einem entfernten Rechner. Stoppen Sie es, um das Profil hierher zurückzuholen.", + "pendingSyncTooltip": "Die Änderungen der entfernten Sitzung werden heruntergeladen. Danach ist das Profil wieder verfügbar." + } + }, + "createProfile": { + "title": "Neues Profil erstellen", + "configureTitle": "Neues {{browser}}-Profil erstellen", + "antiDetect": { + "title": "Anti-Detect-Browser", + "description": "Wählen Sie einen Browser mit Anti-Detection-Funktionen", + "chromium": "Wayfern", + "badge": "Anti-Detect-Browser" + }, + "regular": { + "title": "Normale Browser", + "description": "Wählen Sie aus den unterstützten normalen Browsern", + "badge": "Normaler Browser" + }, + "profileName": "Profilname", + "profileNamePlaceholder": "Profilnamen eingeben", + "proxy": { + "title": "Proxy / VPN", + "addProxy": "Proxy hinzufügen", + "noProxy": "Kein Proxy / VPN", + "noProxiesAvailable": "Keine Proxys oder VPNs verfügbar. Fügen Sie einen hinzu, um den Datenverkehr dieses Profils darüber zu leiten.", + "search": "Proxys oder VPNs suchen...", + "notFound": "Keine Proxys oder VPNs gefunden.", + "searchWithCountries": "Proxys, VPNs oder Länder suchen..." + }, + "launchHook": { + "label": "Start-Hook-URL", + "placeholder": "https://example.com/hooks/profile-launch" + }, + "version": { + "fetching": "Verfügbare Versionen werden abgerufen...", + "fetchError": "Die Browserversionen konnten nicht abgerufen werden. Bitte prüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.", + "needsDownload": "{{browser}}-Version ({{version}}) muss heruntergeladen werden", + "available": "{{browser}}-Version ({{version}}) ist verfügbar", + "downloading": "{{browser}}-Version ({{version}}) wird heruntergeladen...", + "latestNeedsDownload": "Die neueste Version ({{version}}) muss heruntergeladen werden", + "latestAvailable": "Die neueste Version ({{version}}) ist verfügbar", + "latestDownloading": "Version ({{version}}) wird heruntergeladen...", + "upgradeAvailable": "Eine neuere Version ({{version}}) von {{browser}} ist verfügbar." + }, + "chromiumLabel": "Chromium", + "chromiumSubtitle": "Basiert auf Wayfern", + "platformUnavailable": "{{browser}} ist auf Ihrer Plattform noch nicht verfügbar.", + "passwordProtect": { + "label": "Dieses Profil mit einem Passwort schützen", + "description": "Verschlüsselt die Profildaten auf dem Datenträger. Zum Starten erforderlich." + }, + "downloadingSubtitle": "Wird heruntergeladen…", + "browsersDownloading": "Browser werden noch heruntergeladen. Profile können erstellt werden, sobald ein Download abgeschlossen ist." + }, + "deleteDialog": { + "title": "Profil löschen", + "description": "Möchten Sie dieses Profil wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "profilesTitle": "Profile löschen", + "profilesDescription": "Möchten Sie die ausgewählten Profile wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "profilesToDelete": "Zu löschende Profile:" + }, + "proxies": { + "title": "Proxys", + "management": { + "description": "Verwalten Sie Ihre Proxy- und VPN-Konfigurationen zur Wiederverwendung in mehreren Profilen", + "tabProxies": "Proxys", + "tabVpns": "VPNs", + "create": "Erstellen", + "loading": "Proxys werden geladen...", + "noneCreated": "Noch keine Proxys erstellt. Erstellen Sie Ihren ersten Proxy über die Schaltfläche oben.", + "usage": "Nutzung", + "syncCol": "Sync", + "syncCannotDisable": "Die Synchronisierung kann nicht deaktiviert werden, solange synchronisierte Profile diesen Proxy verwenden", + "enableSync": "Sync aktivieren", + "disableSync": "Sync deaktivieren", + "editProxy": "Proxy bearbeiten", + "deleteProxy": "Proxy löschen", + "cannotDelete_one": "Löschen nicht möglich: wird von {{count}} Profil verwendet", + "cannotDelete_other": "Löschen nicht möglich: wird von {{count}} Profilen verwendet", + "syncEnabled": "Sync aktiviert", + "syncDisabled": "Sync deaktiviert", + "updateSyncFailed": "Die Synchronisierung konnte nicht aktualisiert werden", + "deleteSuccess": "Proxy erfolgreich gelöscht", + "deleteFailed": "Der Proxy konnte nicht gelöscht werden", + "deleteTitle": "Proxy löschen", + "deleteDescription": "Diese Aktion kann nicht rückgängig gemacht werden. Der Proxy „{{name}}“ wird dauerhaft gelöscht.", + "newProxy": "Neuer Proxy", + "newVpn": "Neues VPN", + "protocolCol": "Protokoll", + "protocolUnknown": "Unbekannt", + "hostPort": "Host : Port", + "title": "Proxys & VPNs", + "firstHopPlaintextTooltip": "Erster Hop unverschlüsselt: Die Verbindung zu diesem Proxy ist nicht verschlüsselt.", + "firstHopEncryptedTooltip": "Erster Hop verschlüsselt: Die Verbindung zu diesem Proxy ist verschlüsselt. Der Anbieter sieht trotzdem, welche Seiten Sie aufrufen.", + "firstHopCipherTooltip": "Erster Hop hängt von der Verschlüsselungsmethode ab: Für diesen Proxy ist keine Methode hinterlegt, daher ist offen, ob die Verbindung zu ihm verschlüsselt ist. Bearbeiten Sie ihn und legen Sie eine echte Methode fest, z. B. aes-256-gcm.", + "udpCol": "UDP" + }, + "add": "Proxy hinzufügen", + "edit": "Proxy bearbeiten", + "delete": "Proxy löschen", + "import": "Importieren", + "export": "Exportieren", + "noProxies": "Keine Proxys konfiguriert", + "noProxiesDescription": "Fügen Sie einen Proxy hinzu, um den Browser-Datenverkehr darüber zu leiten.", + "form": { + "name": "Name", + "namePlaceholder": "Proxynamen eingeben", + "type": "Typ", + "host": "Host", + "hostPlaceholder": "proxy.example.com", + "port": "Port", + "portPlaceholder": "8080", + "username": "Benutzername", + "usernamePlaceholder": "Optional", + "password": "Passwort", + "passwordPlaceholder": "Optional", + "cipher": "Verschlüsselungsmethode", + "cipherPlaceholder": "aes-256-gcm", + "nameRequired": "Ein Proxyname ist erforderlich", + "hostPortRequired": "Host und Port sind erforderlich", + "ssCipherRequired": "Für Shadowsocks sind Verschlüsselungsmethode und Passwort erforderlich", + "selectType": "Proxytyp auswählen", + "saveFailed": "Der Proxy konnte nicht gespeichert werden: {{error}}", + "vlessUri": "VLESS-URI", + "vlessUriPlaceholder": "vless://…", + "vlessUriHint": "Erfordert XTLS Vision und REALITY.", + "vlessUriRequired": "Geben Sie eine VLESS-URI ein.", + "vlessUriInvalid": "Geben Sie eine gültige VLESS-URI mit Host und Port ein.", + "firstHopGroupEncrypted": "Erster Hop verschlüsselt", + "firstHopGroupPlaintext": "Erster Hop unverschlüsselt", + "firstHopGroupCipher": "Erster Hop hängt von der Verschlüsselungsmethode ab", + "firstHopCipherNote": "Ob die Verbindung von diesem Rechner zum Proxy verschlüsselt ist, hängt von der Verschlüsselungsmethode unten ab. Ohne Methode oder mit einer Null-Methode wie none bleibt der Datenverkehr für den Anbieter und für alle im Netzwerk dazwischen lesbar.", + "firstHopEncryptedNote": "Die Verbindung von diesem Rechner zum Proxy ist verschlüsselt. Der Anbieter sieht trotzdem jede Seite, die Sie aufrufen, und alles auf Seiten ohne HTTPS.", + "firstHopPlaintextNote": "Die Verbindung von diesem Rechner zum Proxy ist nicht verschlüsselt. Der Anbieter und alle im Netzwerk zwischen diesem Rechner und dem Proxy können den Datenverkehr mitlesen.", + "credentialsInClearHeading": "Diese Zugangsdaten werden lesbar über das Netzwerk übertragen", + "credentialsInClearBody": "Dieser Proxytyp sendet Benutzername und Passwort unverschlüsselt. Base64 ist eine Kodierung, keine Verschlüsselung. Betrachten Sie die Daten in jedem Netzwerk, das Sie nicht kontrollieren, als offengelegt.", + "nullCipherHeading": "Diese Methode verschlüsselt nichts", + "nullCipherBody": "Shadowsocks sendet das Passwort nie über das Netzwerk, daher gibt es hier keine Zugangsdaten, die offengelegt werden könnten. Eine Null-Methode legt stattdessen den Datenverkehr offen: Die Adresse jeder aufgerufenen Seite und alles, was Sie senden, gehen lesbar über das Netzwerk. Wählen Sie eine echte Methode, z. B. aes-256-gcm.", + "httpsTlsHint": "Dieser Typ benötigt einen Proxy-Endpunkt, der TLS terminiert. Anbieter stellen ihn meist als eigenen Port bereit, und sein Zertifikat muss gültig sein." + }, + "types": { + "http": "HTTP", + "https": "HTTPS (CONNECT)", + "socks4": "SOCKS4", + "socks5": "SOCKS5", + "ss": "Shadowsocks", + "httpstls": "HTTP über TLS", + "vless": "VLESS (REALITY)" + }, + "tabs": { + "regular": "Normal", + "dynamic": "Dynamisch" + }, + "dynamic": { + "description": "Ein dynamischer Proxy ruft die Verbindungsdaten bei jedem Profilstart von einer URL ab.", + "url": "Proxy-URL", + "urlPlaceholder": "https://api.example.com/proxy", + "urlRequired": "Die URL des dynamischen Proxys ist erforderlich", + "format": "Antwortformat", + "formatJson": "JSON", + "formatText": "Text", + "formatJsonHint": "Erwartet JSON: {\"ip\": \"...\", \"port\": ..., \"username\": \"...\", \"password\": \"...\"}", + "formatTextHint": "Erwartet Text wie: host:port:username:password oder protocol://user:pass@host:port", + "testUrl": "URL testen", + "testing": "Wird getestet...", + "testSuccess": "Proxy funktioniert: {{host}}:{{port}}", + "testFailed": "Proxytest fehlgeschlagen: {{error}}", + "fetchFailed": "Der dynamische Proxy konnte nicht abgerufen werden: {{error}}" + }, + "check": { + "checking": "Proxy wird geprüft...", + "valid": "Proxy ist gültig", + "invalid": "Proxy ist ungültig", + "lastChecked": "Zuletzt geprüft: {{time}}" + }, + "sync": { + "enabled": "Sync aktiviert", + "disabled": "Sync deaktiviert" + }, + "exportDialog": { + "title": "Proxys exportieren", + "description": "Exportieren Sie Ihre Proxy-Konfigurationen in eine Datei", + "format": "Exportformat", + "json": "JSON", + "txt": "TXT (URL-Format)", + "preview": "Vorschau", + "noProxies": "Keine Proxys zum Exportieren", + "downloaded": "{{filename}} heruntergeladen", + "failed": "Die Proxys konnten nicht exportiert werden", + "copied": "Kopiert" + }, + "importDialog": { + "title": "Proxys importieren", + "descDropzone": "Proxys aus einer JSON- oder TXT-Datei importieren", + "descPreview": "Prüfen Sie die zu importierenden Proxys", + "descAmbiguous": "Einige Proxys haben ein mehrdeutiges Format. Bitte wählen Sie das richtige Format aus.", + "descResult": "Import abgeschlossen", + "dropzonePrompt": "Proxy-Konfigurationsdatei hier ablegen", + "dropzoneFormats": "(.json, .txt)", + "pasteHint": "Mit {{modKey}}+V aus der Zwischenablage einfügen", + "wrongFileType": "Bitte legen Sie eine .json- oder .txt-Datei ab", + "fileReadError": "Die Datei konnte nicht gelesen werden", + "fileProcessError": "Die Datei konnte nicht verarbeitet werden", + "noValidProxies": "In der Datei wurden keine gültigen Proxys gefunden", + "namePrefix": "Namenspräfix", + "namePrefixDefault": "Importiert", + "namePrefixHint": "Die Proxys heißen „{{prefix}} Proxy 1“, „{{prefix}} Proxy 2“ usw.", + "proxiesToImport": "Zu importierende Proxys ({{count}})", + "invalidCount": "({{count}} ungültig)", + "ambiguousIntro": "Die folgenden Proxys haben ein mehrdeutiges Format. Bitte wählen Sie für jeden die richtige Interpretation aus.", + "imported": "Importiert:", + "skippedDuplicates": "Übersprungen (Duplikate):", + "errors": "Fehler", + "importButton": "{{count}} Proxys importieren", + "continueButton": "Weiter", + "doneButton": "Fertig", + "failed": "Die Proxys konnten nicht importiert werden", + "plaintextFirstHopCount": "{{count}} davon verwenden einen unverschlüsselten ersten Hop.", + "cipherUndecidedCount": "Für {{count}} davon ist keine Verschlüsselungsmethode hinterlegt, daher ist noch offen, ob ihr erster Hop verschlüsselt ist." + }, + "bulkDelete": { + "proxiesTitle": "Ausgewählte Proxys löschen", + "proxiesDescription": "Diese Aktion kann nicht rückgängig gemacht werden. {{count}} Proxy(s) werden dauerhaft gelöscht: {{names}}.", + "vpnsTitle": "Ausgewählte VPNs löschen", + "vpnsDescription": "Diese Aktion kann nicht rückgängig gemacht werden. {{count}} VPN(s) werden dauerhaft gelöscht: {{names}}.", + "confirmButton": "{{count}} löschen", + "skippedProxies_one": "{{count}} Proxy übersprungen, der noch von einem Profil verwendet wird", + "skippedProxies_other": "{{count}} Proxys übersprungen, die noch von Profilen verwendet werden", + "skippedVpns_one": "{{count}} VPN übersprungen, das noch von einem Profil verwendet wird", + "skippedVpns_other": "{{count}} VPNs übersprungen, die noch von Profilen verwendet werden" + } + }, + "groups": { + "title": "Gruppen", + "management": "Gruppenverwaltung", + "add": "Gruppe hinzufügen", + "edit": "Gruppe bearbeiten", + "delete": "Gruppe löschen", + "moveToDefault": "Profile aus der Gruppe entfernen", + "noGroupDescription": "Profile ohne Gruppe erscheinen im Filter „Alle“.", + "assignSuccess": "{{count}} Profil(e) erfolgreich {{group}} zugewiesen", + "noGroups": "Keine Gruppen erstellt", + "noGroupsDescription": "Erstellen Sie eine Gruppe, um Ihre Profile zu organisieren.", + "form": { + "name": "Name", + "namePlaceholder": "Gruppennamen eingeben" + }, + "profileCount": "{{count}} Profil", + "profileCount_plural": "{{count}} Profile", + "assignProfiles": "Profile zuweisen", + "sync": { + "enabled": "Sync aktiviert", + "disabled": "Sync deaktiviert" + }, + "createTitle": "Neue Gruppe erstellen", + "createDescription": "Erstellen Sie eine neue Gruppe, um Ihre Browserprofile zu organisieren.", + "editTitle": "Gruppe bearbeiten", + "editDescription": "Ändern Sie den Namen Ihrer Gruppe.", + "createSuccess": "Gruppe erfolgreich erstellt", + "createFailed": "Die Gruppe konnte nicht erstellt werden", + "updateSuccess": "Gruppe erfolgreich aktualisiert", + "updateFailed": "Die Gruppe konnte nicht aktualisiert werden", + "deleteTitle": "Gruppe löschen", + "deleteDescription": "Diese Aktion kann nicht rückgängig gemacht werden. Die Gruppe wird dauerhaft gelöscht.", + "deleteSuccess": "Gruppe erfolgreich gelöscht", + "deleteFailed": "Die Gruppe konnte nicht gelöscht werden", + "loadingProfiles": "Zugehörige Profile werden geladen...", + "associatedProfiles": "Zugehörige Profile ({{count}})", + "whatToDoWithProfiles": "Was soll mit diesen Profilen geschehen?", + "deleteAlongWithGroup": "Profile zusammen mit der Gruppe löschen", + "noAssociatedProfiles": "Dieser Gruppe sind keine Profile zugeordnet.", + "deleteGroup": "Gruppe löschen", + "deleteGroupAndProfiles": "Gruppe & Profile löschen", + "loadProfilesFailed": "Die Profile konnten nicht geladen werden", + "unknownGroup": "Unbekannte Gruppe", + "profileGroupsAriaLabel": "Profilgruppen", + "loading": "Gruppen werden geladen...", + "all": "Alle", + "noGroup": "Keine Gruppe", + "pageTitle": "Profilgruppen", + "pageDescription": "Mit Profilgruppen ordnen Sie Browser nach Kunde, Umgebung oder Einsatzzweck. Synchronisieren Sie Gruppen geräteübergreifend, um sie zu teilen." + }, + "sync": { + "mode": { + "title": "Profilsynchronisierung", + "description": "Sync-Einstellungen für „{{name}}“ verwalten", + "disabled": "Deaktiviert", + "regular": "Normale Synchronisierung", + "encrypted": "E2E-verschlüsselte Synchronisierung", + "disabledDescription": "Keine Synchronisierung für dieses Profil", + "regularDescription": "Schnelle Synchronisierung, unverschlüsselt", + "encryptedDescription": "Vor dem Hochladen verschlüsselt. Der Server sieht nie Klartextdaten.", + "noPasswordWarning": "Kein E2E-Passwort festgelegt. Bitte legen Sie in den Einstellungen ein Passwort fest.", + "passwordRequired": "Kein E2E-Passwort festgelegt. Bitte legen Sie zuerst in den Einstellungen ein Passwort fest.", + "enabledToast": "Sync aktiviert", + "disabledToast": "Sync deaktiviert", + "syncQueued": "Sync eingereiht", + "syncNow": "Jetzt synchronisieren", + "lastSynced": "Zuletzt synchronisiert", + "notConfigured": "Sync-Dienst nicht konfiguriert.", + "configureService": "Sync-Dienst konfigurieren" + }, + "title": "Konto", + "config": { + "serverUrlRequired": "Bitte geben Sie eine Server-URL ein", + "connectionSuccess": "Verbindung erfolgreich!", + "serverError": "Der Server hat mit einem Fehler geantwortet", + "connectFailed": "Keine Verbindung zum Server möglich", + "storageEndpoint": "Speicher: {{endpoint}}", + "storageUnreachableStatus": "Speicher nicht erreichbar", + "storageUnreachable": "Der Server ist erreichbar, aber seine Speicheradresse {{endpoint}} ist von diesem Gerät aus nicht erreichbar. Dateiübertragungen schlagen fehl. Wenn Sie selbst hosten, setzen Sie S3_PUBLIC_ENDPOINT auf eine Adresse, die dieses Gerät erreichen kann.", + "settingsSaved": "Sync-Einstellungen gespeichert", + "saveFailed": "Die Einstellungen konnten nicht gespeichert werden", + "disconnected": "Synchronisierung getrennt", + "disconnectFailed": "Trennen fehlgeschlagen" + }, + "serverUrl": "Server-URL", + "serverUrlPlaceholder": "https://sync.example.com", + "token": "Sync-Token", + "tokenPlaceholder": "Geben Sie Ihr Sync-Token ein", + "status": { + "connected": "Verbunden", + "disconnected": "Getrennt", + "syncing": "Wird synchronisiert...", + "error": "Sync-Fehler" + }, + "description": "Verbinden Sie sich mit einem Sync-Server, um Ihre Profile, Proxys und Gruppen geräteübergreifend zu synchronisieren.", + "cloud": { + "tabLabel": "Cloud", + "selfHostedTabLabel": "Selbst gehostet", + "email": "E-Mail", + "deviceLinkInstructions": "Klicken Sie auf „Anmelden“, um die Anmeldeseite in Ihrem Browser zu öffnen. Kopieren Sie nach der Anmeldung dort den angezeigten Code und fügen Sie ihn unten ein.", + "openLogin": "Anmelden", + "linkCodeLabel": "Anmeldecode", + "linkCodePlaceholder": "Code von der Website einfügen", + "signInTitle": "Anmelden", + "verifyAndLogin": "Prüfen & anmelden", + "loggingIn": "Anmeldung läuft...", + "connected": "Verbunden", + "plan": "Tarif", + "profiles": "Profile", + "profileUsage": "{{used}} / {{limit}}", + "manageAccount": "Konto verwalten", + "logout": "Abmelden", + "logoutConfirm": "Möchten Sie sich wirklich abmelden? Die Cloud-Synchronisierung wird beendet.", + "loginSuccess": "Erfolgreich angemeldet!", + "logoutSuccess": "Erfolgreich abgemeldet." + }, + "team": { + "title": "Team", + "name": "Teamname", + "role": "Rolle", + "roleOwner": "Inhaber", + "roleAdmin": "Admin", + "roleMember": "Mitglied", + "manageOnWeb": "Team im Web-Dashboard verwalten", + "profileLocked": "Wird von {{email}} verwendet", + "profileLockedShort": "In Verwendung", + "cannotLaunchLocked": "Start nicht möglich: Das Profil wird von {{email}} verwendet", + "createdBy": "Erstellt von {{email}}" + }, + "disabled": "Deaktiviert", + "toast": { + "profileSynced": "Profil „{{name}}“ erfolgreich synchronisiert", + "profileSyncFailed": "Profil „{{name}}“ konnte nicht synchronisiert werden", + "profileSyncFailedWithError": "Profil „{{name}}“ konnte nicht synchronisiert werden: {{error}}" + }, + "enabledToast": "Sync aktiviert", + "disabledToast": "Sync deaktiviert", + "enabledDescription": "Die Profilsynchronisierung wurde aktiviert", + "disabledDescription": "Die Profilsynchronisierung wurde deaktiviert" + }, + "integrations": { + "title": "Integrationen", + "mcp": { + "url": "MCP-Server-URL", + "urlCopied": "URL kopiert", + "clientsLabel": "Clients", + "add": "Hinzufügen", + "addedToClient": "Zu {{name}} hinzugefügt", + "removedFromClient": "Aus {{name}} entfernt", + "removeAriaLabel": "Aus {{name}} entfernen", + "category": { + "desktopApp": "Desktop-App", + "cli": "CLI", + "editor": "Editor", + "editorExt": "Editor-Erweiterung" + }, + "switchToLocal": "Wechseln", + "switchedToLocal": "{{name}} verwendet jetzt den lokalen MCP-Server", + "deprecatedBannerTitle": "Lokales MCP wird entfernt", + "deprecatedBannerBody": "Der lokale MCP-Server läuft nicht mehr. Verwenden Sie stattdessen Remote-MCP: Sie können sich von überall damit verbinden, nicht nur von diesem Rechner.", + "deprecatedCta": "Remote-MCP einrichten" + }, + "tabApi": "Lokale API", + "tabMcp": "MCP (KI-Assistenten)", + "apiEnableLabel": "Lokalen API-Server aktivieren", + "apiEnableDescription": "Ermöglicht die Verwaltung von Profilen, Gruppen und Proxys über die REST API.", + "apiPortLabel": "Port", + "apiTokenLabel": "Authentifizierungstoken", + "apiInvalidPort": "Ungültiger Port", + "apiInvalidPortDescription": "Der Port muss zwischen 1 und 65535 liegen", + "apiPortInUse": "Port {{port}} wird bereits verwendet", + "apiFallbackPort": "Server auf Ausweichport {{port}} gestartet", + "apiStarted": "API-Server auf Port {{port}} gestartet", + "apiRunning": "API-Server läuft auf Port {{port}}", + "apiStopped": "API-Server gestoppt", + "apiToggleFailed": "Der API-Server konnte nicht umgeschaltet werden", + "apiStartFailed": "Der API-Server konnte nicht gestartet werden", + "tokenCopied": "Token kopiert", + "mcpEnableLabel": "MCP-Server aktivieren (Model Context Protocol)", + "mcpEnableDescription": "Ermöglicht KI-Assistenten wie Claude Desktop, Browser zu steuern.", + "mcpAcceptTermsFirst": "(Akzeptieren Sie zuerst die Wayfern-Bedingungen in den Einstellungen)", + "mcpStarted": "MCP-Server auf Port {{port}} gestartet", + "mcpStopped": "MCP-Server gestoppt", + "mcpToggleFailed": "Der MCP-Server konnte nicht umgeschaltet werden", + "openSettings": "Integrationseinstellungen öffnen", + "apiRunningOn": "Läuft auf", + "apiExampleRequest": "Beispielanfrage", + "tabRemote": "Remote-MCP", + "remote": { + "enableLabel": "Fernsteuerung", + "enableDescription": "Erlaubt der Donut-Cloud, diesen Browser zu steuern, damit ein Agent auf donutbrowser.com ihn bedienen kann. Nichts wartet auf eingehende Verbindungen: Diese App baut die Verbindung selbst auf und kann sie jederzeit trennen.", + "signInRequired": "Melden Sie sich bei Ihrem Donut-Konto an, um die Fernsteuerung zu nutzen.", + "connected": "Verbunden als", + "connecting": "Wird verbunden als", + "notConnected": "Nicht verbunden", + "enabled": "Fernsteuerung aktiviert", + "disabled": "Fernsteuerung deaktiviert", + "toggleFailed": "Die Fernsteuerung konnte nicht geändert werden", + "endpointLabel": "Remote-MCP-Endpunkt", + "endpointCopied": "Endpunkt kopiert", + "endpointDescription": "Richten Sie einen MCP-Client auf diese Adresse aus und verwenden Sie die Zugangsdaten oben als Bearer-Token. Eine Instanz pro Konto: Die erste App, die sich verbindet, behält den Platz.", + "exampleRequest": "Beispielanfrage", + "credentialLabel": "Zugangsdaten", + "credentialPrefix": "{{prefix}}…", + "credentialNone": "Noch keine Zugangsdaten. Beim Hinzufügen eines Clients werden sie erstellt.", + "credentialHint": "In den Clients unten installiert; hier werden nur die ersten Zeichen angezeigt. Beim Rotieren werden sie ersetzt und in jedem verbundenen Client neu installiert.", + "credentialRotate": "Rotieren", + "credentialCreate": "Erstellen", + "credentialRotated": "Zugangsdaten rotiert", + "credentialCreated": "Zugangsdaten erstellt", + "credentialRotateFailed": "Die Zugangsdaten konnten nicht rotiert werden", + "credentialClientsFailed": "Die Zugangsdaten sind gespeichert, aber diese Clients konnten nicht aktualisiert werden: {{clients}}. Rotieren Sie erneut, um es noch einmal zu versuchen.", + "switchToRemote": "Wechseln", + "switchedClient": "{{name}} verwendet jetzt Remote-MCP", + "fxHint": "fx liest die Zugangsdaten aus DONUT_MCP_TOKEN. Exportieren Sie die Variable in der Shell, die fx startet.", + "fxExportCopied": "Export-Zeile kopiert" + } + }, + "import": { + "title": "Profil importieren", + "description": "Importieren Sie ein vorhandenes Browserprofil von Ihrem System.", + "selectProfile": "Wählen Sie ein Profil zum Importieren aus", + "noProfiles": "Keine Profile erkannt", + "noProfilesDescription": "Auf Ihrem System wurden keine Browserprofile erkannt.", + "importing": "Profil wird importiert...", + "success": "Profil erfolgreich importiert", + "error": "Das Profil konnte nicht importiert werden" + }, + "config": { + "wayfern": { + "title": "Wayfern-Konfiguration", + "fingerprint": { + "title": "Fingerprint", + "randomize": "Bei jedem Start zufällig erzeugen", + "randomizeDescription": "Erzeugt bei jedem Browserstart einen neuen Fingerprint.", + "platformPlaceholder": "z. B. Win32, MacIntel, Linux x86_64", + "timezoneOffsetPlaceholder": "z. B. 300 für EST (UTC-5)", + "webglRendererPlaceholder": "z. B. Intel(R) HD Graphics" + }, + "os": { + "title": "Betriebssystem", + "description": "Das Betriebssystem, das für die Fingerprint-Erzeugung emuliert wird.", + "windows": "Windows", + "macos": "macOS", + "linux": "Linux", + "android": "Android", + "ios": "iOS" + }, + "screen": { + "title": "Bildschirmgröße", + "minWidth": "Min. Breite", + "maxWidth": "Max. Breite", + "minHeight": "Min. Höhe", + "maxHeight": "Max. Höhe" + }, + "blocking": { + "title": "Blockieren", + "webrtc": "WebRTC blockieren", + "webgl": "WebGL blockieren" + } + }, + "shared": { + "browserBehavior": "Browserverhalten", + "allowAddonsOpenTabs": "Browser-Add-ons erlauben, automatisch neue Tabs zu öffnen" + } + }, + "cookies": { + "title": "Cookies", + "copy": { + "title": "Cookies kopieren", + "description": "Wählen Sie Cookies aus, die in andere Profile kopiert werden sollen.", + "selectSource": "Quellprofil auswählen", + "selectTarget": "Zielprofile auswählen", + "selectCookies": "Cookies auswählen", + "allDomains": "Alle Domains", + "selectedCount": "{{count}} Cookie ausgewählt", + "selectedCount_plural": "{{count}} Cookies ausgewählt", + "dialogDescription_one": "Cookies aus einem Quellprofil in {{count}} ausgewähltes Profil kopieren.", + "dialogDescription_other": "Cookies aus einem Quellprofil in {{count}} ausgewählte Profile kopieren.", + "sourceProfile": "Quellprofil", + "sourcePlaceholder": "Profil auswählen, aus dem Cookies kopiert werden", + "running": "(läuft)", + "targetProfiles": "Zielprofile ({{count}})", + "noOtherTargets": "Keine anderen Wayfern-Profile ausgewählt", + "selectSourceFirst": "Wählen Sie zuerst ein Quellprofil aus", + "selectionStatus": "({{selected}} von {{total}} ausgewählt)", + "searchPlaceholder": "Domains oder Cookies suchen...", + "noMatching": "Keine passenden Cookies gefunden", + "noFound": "Keine Cookies gefunden", + "replaceNote": "Vorhandene Cookies mit gleichem Namen und gleicher Domain werden ersetzt. Andere Cookies bleiben erhalten.", + "cannotCopyRunningOne": "Cookies können nicht kopiert werden: {{names}} läuft noch", + "cannotCopyRunningMany": "Cookies können nicht kopiert werden: {{names}} laufen noch", + "someErrors": "Es sind Fehler aufgetreten: {{errors}}", + "successMessage": "{{copied}} Cookies erfolgreich kopiert ({{replaced}} ersetzt)", + "failedMessage": "Die Cookies konnten nicht kopiert werden: {{error}}", + "copyButton_one": "{{count}} Cookie kopieren", + "copyButton_other": "{{count}} Cookies kopieren", + "copyButtonEmpty": "Cookies kopieren" + }, + "success": "Cookies erfolgreich kopiert", + "error": "Die Cookies konnten nicht kopiert werden", + "management": { + "title": "Cookie-Verwaltung", + "menuItem": "Cookie-Verwaltung", + "tabImport": "Importieren", + "tabExport": "Exportieren", + "importDescription": "Fügen Sie Cookies ein, die Sie aus einem anderen Browser oder Tool kopiert haben, oder wählen Sie eine Datei.", + "fileReadError": "Die Datei konnte nicht gelesen werden", + "loadFailed": "Die Cookies konnten nicht geladen werden: {{error}}", + "cookiesLabel": "Cookies", + "selectionStatus": "({{selected}} von {{total}} ausgewählt)", + "selectAll": "Alle auswählen", + "deselectAll": "Auswahl aufheben", + "noCookies": "In diesem Profil wurden keine Cookies gefunden", + "doneButton": "Fertig", + "exportButton": "Exportieren" + }, + "import": { + "title": "Cookies importieren", + "description": "Importieren Sie Cookies aus einer Datei im Netscape- oder JSON-Format.", + "selectFile": "Datei auswählen", + "preview": "{{count}} Cookies gefunden", + "success": "{{imported}} Cookies erfolgreich importiert ({{replaced}} ersetzt)", + "error": "Die Cookies konnten nicht importiert werden", + "proFeature": "Der Cookie-Import ist eine Pro-Funktion" + }, + "export": { + "title": "Cookies exportieren", + "description": "Cookies aus diesem Profil exportieren.", + "formatLabel": "Format", + "netscape": "Netscape TXT", + "json": "JSON", + "success": "Cookies erfolgreich exportiert", + "error": "Die Cookies konnten nicht exportiert werden" + }, + "paste": { + "label": "Cookies", + "placeholder": "Cookies hier einfügen. JSON (ein Array oder ein {cookies: [...]}-Objekt), eine Netscape-cookies.txt oder name=value; name2=value2", + "chooseFile": "oder eine Datei auswählen", + "analyzing": "Wird geprüft…", + "formatJson": "JSON", + "formatNetscape": "Netscape", + "formatNameValue": "Name=Wert", + "formatUnknown": "Format nicht erkannt", + "siteLabel": "Website", + "sitePlaceholder": "example.com oder https://example.com", + "siteHelp": "Eine name=value-Liste enthält keine eigene Domain. Geben Sie daher die Website an, zu der diese Cookies gehören.", + "scopeSubdomains": "{{domain}}: diese Domain und alle ihre Subdomains", + "scopeHostOnly": "{{domain}}: nur genau dieser Host, keine Subdomains", + "modeMerge": "Zusammenführen", + "modeMergeDesc": "Aktualisiert die gespeicherten Cookies, zu denen ein eingefügtes passt, fügt die übrigen hinzu und löscht nichts.", + "modeReplace": "Passende Websites ersetzen", + "modeReplaceDesc": "Löscht die gespeicherten Cookies dieses Profils für die hier genannten Websites, in der Form mit und ohne führenden Punkt, und schreibt dann die eingefügten Cookies. Cookies aller anderen Websites bleiben erhalten.", + "replaceDeleteCount": "Gespeicherte Cookies, die dadurch gelöscht würden: {{n}}", + "unknownCount": "unbekannt", + "includeExpired": "Auch bereits abgelaufene Cookies importieren", + "expiredNote": "In dieser Eingabe bereits abgelaufen: {{n}}", + "clearsOnCloseWarning": "Dieses Profil löscht seine Browserdaten beim Schließen des Browsers, daher werden diese Cookies am Ende der nächsten Sitzung gelöscht.", + "previewTitle": "Zu importierende Cookies: {{n}}", + "colSite": "Website", + "colName": "Name", + "colPath": "Pfad", + "colExpires": "Ablauf", + "colSecure": "Secure", + "colHttpOnly": "HttpOnly", + "colSameSite": "SameSite", + "session": "Sitzung", + "yes": "Ja", + "no": "Nein", + "sameSiteUnspecified": "Nicht angegeben", + "sameSiteNone": "None", + "sameSiteLax": "Lax", + "sameSiteStrict": "Strict", + "issuesTitle": "Probleme", + "showAll": "Alle {{n}} anzeigen", + "showFewer": "Weniger anzeigen", + "sourceLine": "Zeile {{n}}", + "sourceCookie": "Cookie {{n}}", + "disabledEmpty": "Fügen Sie oben Cookies ein, um sie zu importieren.", + "disabledSite": "Geben Sie die Website an, zu der diese Cookies gehören.", + "disabledNoCookies": "Aus dieser Eingabe konnten keine Cookies gelesen werden.", + "resultAdded": "Hinzugefügt", + "resultOverwritten": "Überschrieben", + "resultDeleted": "Gelöscht", + "resultSkipped": "Übersprungen", + "issues": { + "emptyInput": "Es wurde noch nichts eingefügt.", + "siteInvalid": "„{{site}}“ ist keine verwendbare Website und wurde ignoriert.", + "unrecognizedFormat": "Dies ist weder JSON noch eine Netscape-cookies.txt noch eine name=value-Liste.", + "siteRequired": "Eine name=value-Liste enthält keine Domain. Geben Sie die Website an, zu der diese Cookies gehören.", + "noCookiesFound": "Aus dieser Eingabe konnten keine Cookies gelesen werden.", + "nameEmpty": "Der Cookie-Name ist leer.", + "nameInvalid": "„{{name}}“ ist kein verwendbarer Cookie-Name.", + "nameMissing": "Dieser Eintrag hat keinen Namen.", + "valueInvalid": "Der Wert von „{{name}}“ enthält Zeichen, die ein Cookie nicht enthalten darf.", + "valueCoerced": "Der Wert von „{{name}}“ war kein Text und wurde in Text umgewandelt.", + "domainFromSite": "„{{name}}“ hatte keine Domain und wurde {{domain}} zugeordnet.", + "domainMissing": "„{{name}}“ hat keine Domain, und es wurde keine Website angegeben.", + "domainInvalid": "„{{name}}“ nennt eine Domain, die nicht verwendet werden kann: {{domain}}.", + "domainAttributeIgnored": "Das Attribut Domain={{domain}} wurde zugunsten der angegebenen Website {{site}} ignoriert.", + "hostOnlyMismatch": "„{{name}}“ gibt hostOnly={{hostOnly}} an, seine Domain war aber {{domain}}. Das Flag wurde angewendet.", + "pathRepaired": "Der Pfad von „{{name}}“ wurde aus {{path}} korrigiert.", + "expiryMilliseconds": "Der Ablauf von „{{name}}“ ({{expires}}) war in Millisekunden angegeben und wurde in Sekunden umgerechnet.", + "expiryClamped": "Ein Ablaufdatum lag unrealistisch weit in der Zukunft und wurde auf den Höchstwert begrenzt.", + "expiryInvalid": "{{field}} ist kein verwendbarer Zeitstempel: {{value}}.", + "expiresInvalid": "Expires ist kein lesbares Datum: {{value}}.", + "maxAgeInvalid": "Max-Age ist keine Zahl: {{value}}.", + "maxAgeDeletion": "Das Max-Age von „{{name}}“ löscht das Cookie sofort.", + "sameSiteNoneInsecure": "„{{name}}“ auf {{domain}} ist SameSite=None, aber nicht Secure, daher wird der Browser es nicht senden.", + "sameSiteUnrecognized": "SameSite „{{value}}“ wurde nicht erkannt und bleibt nicht angegeben.", + "duplicateCookie": "„{{name}}“ für {{domain}}{{path}} kommt später in der Eingabe erneut vor. Die spätere Kopie gilt.", + "boolCoercedFromString": "{{field}} war der Text „{{value}}“ statt true oder false und wurde als boolescher Wert gelesen.", + "boolInvalid": "{{field}} ist weder true noch false: {{value}}.", + "quotedValue": "Die Anführungszeichen um den Wert von „{{name}}“ wurden entfernt.", + "jsonParseFailed": "Das JSON konnte nicht gelesen werden: {{message}}", + "jsonNotCookieList": "Das JSON ist weder ein Array von Cookies noch ein Objekt mit einem cookies-Array.", + "jsonEntryNotObject": "Dieser Eintrag ist kein JSON-Objekt.", + "netscapePathOmitted": "Diese Zeile hat keine Pfadspalte, daher wurde / verwendet.", + "netscapeFieldCount": "Diese Zeile hat {{actual}} Spalten; eine Netscape-Cookie-Zeile hat {{expected}}.", + "netscapeIncludeSubdomainsInvalid": "Die Spalte include-subdomains ist weder TRUE noch FALSE: {{value}}.", + "netscapeSecureInvalid": "Die Spalte secure ist weder TRUE noch FALSE: {{value}}.", + "netscapeExpiryInvalid": "Die Ablaufspalte ist keine Zahl: {{value}}. Die Zeile wurde verworfen, statt daraus ein gültiges Cookie zu machen.", + "nameValueNoPair": "Dieser Teil enthält kein name=value-Paar und wurde ignoriert.", + "pairTreatedAsAttribute": "„{{name}}“ wurde als Set-Cookie-Attribut statt als Cookie gelesen, und sein Wert wurde verworfen.", + "unknown": "{{code}}" + } + } + }, + "toasts": { + "success": { + "profileCreated": "Profil erfolgreich erstellt", + "profileDeleted": "Profil erfolgreich gelöscht", + "profileUpdated": "Profil erfolgreich aktualisiert", + "profileLaunched": "Profil erfolgreich gestartet", + "proxyCreated": "Proxy erfolgreich erstellt", + "proxyDeleted": "Proxy erfolgreich gelöscht", + "proxyUpdated": "Proxy erfolgreich aktualisiert", + "groupCreated": "Gruppe erfolgreich erstellt", + "groupDeleted": "Gruppe erfolgreich gelöscht", + "groupUpdated": "Gruppe erfolgreich aktualisiert", + "settingsSaved": "Einstellungen erfolgreich gespeichert", + "copied": "In die Zwischenablage kopiert", + "permissionRequested": "Zugriff auf {{permission}} angefordert", + "downloadComplete": "{{browser}} {{version}} erfolgreich heruntergeladen!", + "importSuccess": "{{count}} Elemente erfolgreich importiert", + "exportSuccess": "{{count}} Elemente erfolgreich exportiert", + "syncSuccess": "Synchronisierung erfolgreich abgeschlossen", + "profileSynced": "Profil „{{name}}“ erfolgreich synchronisiert", + "cacheCleared": "Cache erfolgreich geleert" + }, + "error": { + "profileCreateFailed": "Das Profil konnte nicht erstellt werden", + "profileDeleteFailed": "Das Profil konnte nicht gelöscht werden", + "profileUpdateFailed": "Das Profil konnte nicht aktualisiert werden", + "profileLaunchFailed": "Das Profil konnte nicht gestartet werden", + "proxyCreateFailed": "Der Proxy konnte nicht erstellt werden", + "proxyDeleteFailed": "Der Proxy konnte nicht gelöscht werden", + "proxyUpdateFailed": "Der Proxy konnte nicht aktualisiert werden", + "groupCreateFailed": "Die Gruppe konnte nicht erstellt werden", + "groupDeleteFailed": "Die Gruppe konnte nicht gelöscht werden", + "groupUpdateFailed": "Die Gruppe konnte nicht aktualisiert werden", + "settingsSaveFailed": "Die Einstellungen konnten nicht gespeichert werden", + "copyFailed": "Kopieren in die Zwischenablage fehlgeschlagen", + "downloadFailed": "{{browser}} konnte nicht heruntergeladen werden", + "importFailed": "Import fehlgeschlagen", + "exportFailed": "Export fehlgeschlagen", + "syncFailed": "Sync fehlgeschlagen", + "profileSyncFailed": "Profil „{{name}}“ konnte nicht synchronisiert werden", + "cacheClearFailed": "Der Cache konnte nicht geleert werden", + "unknown": "Ein unbekannter Fehler ist aufgetreten" + }, + "loading": { + "downloading": "{{browser}} {{version}} wird heruntergeladen", + "extracting": "{{browser}} {{version}} wird entpackt", + "verifying": "{{browser}} {{version}} wird überprüft", + "syncing": "Wird synchronisiert...", + "syncingProfile": "Profil „{{name}}“ wird synchronisiert...", + "syncingProfileWithProgress": "{{count}} Dateien ({{size}})", + "updatingVersions": "Browserversionen werden aktualisiert..." + }, + "progress": { + "remaining": "Noch {{time}}", + "filesProgress": "{{completed}}/{{total}} Dateien", + "filesFailed": "{{count}} Datei(en) fehlgeschlagen" + } + }, + "errors": { + "required": "Dieses Feld ist erforderlich", + "invalidUrl": "Bitte geben Sie eine gültige URL ein", + "invalidPort": "Bitte geben Sie eine gültige Portnummer ein (1-65535)", + "invalidEmail": "Bitte geben Sie eine gültige E-Mail-Adresse ein", + "minLength": "Muss mindestens {{min}} Zeichen lang sein", + "maxLength": "Darf höchstens {{max}} Zeichen lang sein", + "networkError": "Netzwerkfehler. Bitte prüfen Sie Ihre Verbindung.", + "serverError": "Serverfehler. Bitte versuchen Sie es später erneut.", + "unknownError": "Ein unbekannter Fehler ist aufgetreten. Bitte versuchen Sie es erneut.", + "noProfilesForUrl": "Keine Profile verfügbar. Bitte erstellen Sie zuerst ein Profil, bevor Sie URLs öffnen.", + "updateWayfernConfigFailed": "Die Wayfern-Konfiguration konnte nicht aktualisiert werden: {{error}}", + "createProfileFailed": "Das Profil konnte nicht erstellt werden: {{error}}", + "launchBrowserFailed": "Der Browser konnte nicht gestartet werden: {{error}}", + "cannotDeleteRunningProfile": "Das Profil kann nicht gelöscht werden, solange der Browser läuft. Bitte stoppen Sie zuerst den Browser.", + "deleteProfileFailed": "Das Profil konnte nicht gelöscht werden: {{error}}", + "renameProfileFailed": "Das Profil konnte nicht umbenannt werden: {{error}}", + "killBrowserFailed": "Der Browser konnte nicht beendet werden: {{error}}", + "deleteSelectedProfilesFailed": "Die ausgewählten Profile konnten nicht gelöscht werden: {{error}}", + "cookieCopyUnsupportedBrowser": "Das Kopieren von Cookies funktioniert nur mit Wayfern-Profilen", + "updateSyncSettingsFailed": "Die Sync-Einstellungen konnten nicht aktualisiert werden", + "cloneProfileFailed": "Das Profil konnte nicht geklont werden: {{error}}", + "loadSupportedBrowsersFailed": "Die unterstützten Browser konnten nicht geladen werden", + "setupExtensionListenersFailed": "Die Ereignis-Listener für Erweiterungen konnten nicht eingerichtet werden: {{error}}", + "loadGroupsFailed": "Die Gruppen konnten nicht geladen werden: {{error}}", + "setupGroupListenersFailed": "Die Ereignis-Listener für Gruppen konnten nicht eingerichtet werden: {{error}}", + "loadProfilesFailed": "Die Profile konnten nicht geladen werden: {{error}}", + "setupProfileListenersFailed": "Die Ereignis-Listener für Profile konnten nicht eingerichtet werden: {{error}}", + "loadProxiesFailed": "Die Proxys konnten nicht geladen werden: {{error}}", + "setupProxyListenersFailed": "Die Ereignis-Listener für Proxys konnten nicht eingerichtet werden: {{error}}", + "loadVpnConfigsFailed": "Die VPN-Konfigurationen konnten nicht geladen werden: {{error}}", + "setupVpnListenersFailed": "Die Ereignis-Listener für VPNs konnten nicht eingerichtet werden: {{error}}", + "themeNotFound": "Design „Tokyo Night“ nicht gefunden", + "setProfilePasswordFailed": "Das Profilpasswort konnte nicht festgelegt werden: {{error}}" + }, + "browser": { + "wayfern": "Wayfern" + }, + "fingerprint": { + "crossOsWarning": "Einen Fingerprint für ein anderes Betriebssystem vorzutäuschen ist weniger zuverlässig, da sich nicht alle zugrunde liegenden Komponenten perfekt nachahmen lassen. Mit Vorsicht verwenden.", + "crossOsLimitations": "Betriebssystemübergreifende Fingerprints haben Grenzen. APIs auf Systemebene können weiterhin Ihr tatsächliches Betriebssystem verraten, und manche Funktionen laufen eventuell langsamer.", + "osLabel": "Betriebssystem-Fingerprint", + "selectOSPlaceholder": "Betriebssystem auswählen", + "generateRandomOnLaunch": "Bei jedem Start einen zufälligen Fingerprint erzeugen", + "generateRandomDescription": "Wenn aktiviert, wird bei jedem Browserstart ein neuer Fingerprint erzeugt.", + "restoreSession": "Dort weitermachen, wo Sie aufgehört haben", + "restoreSessionDescription": "Öffnet beim Start dieses Profils die Fenster und Tabs der letzten Sitzung erneut. Automatisierungsläufe, flüchtige Profile und Profile, die beim Schließen gelöscht werden, starten immer leer.", + "webrtcModeLabel": "WebRTC", + "webrtcMode": { + "auto": "Automatisch", + "tcp_only": "Nur Proxy-Exit", + "block": "Blockiert" + }, + "webrtcModeDescription": "„Automatisch“ zeigt Websites die Exit-Adresse des Proxys, wenn die Route WebRTC überträgt, und verbirgt sonst alles. „Nur Proxy-Exit“ gibt immer genau eine Adresse preis: den Exit des Proxys. „Blockiert“ gibt Websites überhaupt keine WebRTC-Adresse.", + "personaLabel": "Persona", + "personaDescription": "Die Person, mit der dieses Profil Formulare ausfüllt. Jeder Wert stammt aus dem eigenen Seed des Profils: Er ist bei jedem Start gleich und für jedes Profil anders. Bearbeiten Sie ein Feld, um einen eigenen Wert festzulegen.", + "personaReset": "Auf generierte Werte zurücksetzen", + "cameraLabel": "Kamera", + "cameraChoose": "Quelle auswählen", + "cameraFileFilter": "Bild oder Video", + "cameraCrop": "Zuschnitt (x, y, Breite, Höhe in Quellpixeln)", + "cameraDescription": "Was die vorgegebene Kamera zeigt. Ein PNG wird als Standbild gezeigt, ein Y4M- oder MJPEG-Clip läuft in Schleife. Ohne Quelle liefert die Kamera dunkle Bilder und öffnet nie die echte Kamera.", + "generateRandomDescriptionAuto": "Wenn aktiviert, wird bei jedem Browserstart ein neuer Fingerprint erzeugt. Der erzeugte Fingerprint wird zur Nachverfolgung gespeichert.", + "autoLocationDescription": "Standortinformationen automatisch anhand der Proxy-Konfiguration oder, ohne Proxy, anhand Ihrer Verbindung konfigurieren", + "editingDisabledRunning": "Die Bearbeitung des Fingerprints ist deaktiviert, da das Profil gerade läuft. Stoppen Sie das Profil, um Änderungen vorzunehmen.", + "editingDisabledRandomized": "Die Bearbeitung des Fingerprints ist deaktiviert, da die zufällige Fingerprint-Erzeugung aktiv ist. Deaktivieren Sie die Option oben, um die Fingerprint-Konfiguration manuell zu bearbeiten.", + "advancedWarning": "Warnung: Bearbeiten Sie diese Parameter nur, wenn Sie wissen, was Sie tun. Falsche Werte können Websites beschädigen, zu Ihrer Erkennung führen und schwer auffindbare Fehler verursachen.", + "basicWarning": "Warnung: Bearbeiten Sie diese Parameter nur, wenn Sie wissen, was Sie tun.", + "automatic": "Automatisch", + "manual": "Manuell", + "blockingOptions": "Blockieroptionen", + "blockImages": "Bilder blockieren", + "blockWebRTC": "WebRTC blockieren", + "blockWebGL": "WebGL blockieren", + "navigatorProperties": "Navigator-Eigenschaften", + "userAgent": "User-Agent", + "userAgentAndPlatform": "User-Agent & Plattform", + "platform": "Plattform", + "platformVersion": "Plattformversion", + "appVersion": "App-Version", + "osCpu": "OS-CPU", + "hardwareConcurrency": "Logische Prozessoren", + "maxTouchPoints": "Max. Touchpunkte", + "doNotTrack": "Do Not Track", + "selectDntPlaceholder": "DNT-Wert auswählen", + "dntAllowed": "0 (Tracking erlaubt)", + "dntNotAllowed": "1 (Tracking nicht erlaubt)", + "dntUnspecified": "nicht angegeben", + "language": "Sprache", + "primaryLanguage": "Primäre Sprache (navigator.language)", + "languages": "Sprachen (JSON-Array)", + "languageAndLocale": "Sprache & Gebietsschema", + "screenProperties": "Bildschirmeigenschaften", + "screenWidth": "Bildschirmbreite", + "screenHeight": "Bildschirmhöhe", + "availableWidth": "Verfügbare Breite", + "availableHeight": "Verfügbare Höhe", + "colorDepth": "Farbtiefe", + "pixelDepth": "Pixeltiefe", + "devicePixelRatio": "Gerätepixelverhältnis", + "windowProperties": "Fenstereigenschaften", + "outerWidth": "Äußere Breite", + "outerHeight": "Äußere Höhe", + "innerWidth": "Innere Breite", + "innerHeight": "Innere Höhe", + "screenX": "Bildschirm X", + "screenY": "Bildschirm Y", + "geolocation": "Geolokalisierung", + "timezoneAndGeolocation": "Zeitzone & Geolokalisierung", + "timezoneGeolocationDescription": "Diese Werte überschreiben die Zeitzonen- und Geolokalisierungs-APIs des Browsers.", + "latitude": "Breitengrad", + "longitude": "Längengrad", + "timezone": "Zeitzone", + "timezoneIana": "Zeitzone (IANA)", + "timezoneOffset": "Versatz (Minuten zu UTC)", + "accuracy": "Genauigkeit (Meter)", + "locale": "Gebietsschema", + "region": "Region", + "script": "Schriftsystem", + "webglProperties": "WebGL-Eigenschaften", + "webglVendor": "WebGL-Hersteller", + "webglRenderer": "WebGL-Renderer", + "webglParameters": "WebGL-Parameter", + "webglParametersJson": "WebGL-Parameter (JSON)", + "webgl2Parameters": "WebGL2-Parameter", + "webglShaderPrecisionFormats": "WebGL-Shader-Präzisionsformate", + "webgl2ShaderPrecisionFormats": "WebGL2-Shader-Präzisionsformate", + "canvasFingerprint": "Canvas-Fingerprint", + "canvasNoiseSeed": "Canvas-Rausch-Seed", + "canvasNoiseSeedDescription": "Mit diesem Seed wird ein konsistenter, aber eindeutiger Canvas-Fingerprint erzeugt. Jedes Profil sollte einen anderen Seed haben.", + "fonts": "Schriftarten", + "fontsJson": "Schriftarten (JSON-Array)", + "battery": "Akku", + "charging": "Wird geladen", + "chargingTime": "Ladezeit", + "dischargingTime": "Entladezeit", + "batteryLevel": "Ladestand (0-1)", + "screenResolution": "Bildschirmauflösung", + "maxWidth": "Max. Breite", + "maxHeight": "Max. Höhe", + "minWidth": "Min. Breite", + "minHeight": "Min. Höhe", + "hardwareProperties": "Hardware-Eigenschaften", + "deviceMemory": "Gerätespeicher (GB)", + "audioProperties": "Audio-Eigenschaften", + "sampleRate": "Abtastrate", + "maxChannelCount": "Max. Kanalanzahl", + "vendorInfo": "Herstellerinfos", + "vendor": "Hersteller", + "vendorSub": "Vendor Sub", + "productSub": "Product Sub", + "brand": "Marke", + "brandVersion": "Markenversion", + "proFeature": "Dies ist eine Pro-Funktion", + "generateFingerprint": "Fingerprint erzeugen", + "regenerateFingerprint": "Fingerprint neu erzeugen", + "regenerateConfirmTitle": "Diesen Fingerprint neu erzeugen?", + "regenerateConfirmDescription": "Das Profil behält seine Cookies und Anmeldungen, erscheint aber als anderes Gerät. Websites, die dieses Profil bereits kennen, können eine erneute Anmeldung verlangen, Sie überprüfen oder das Konto sperren. Erzeugen Sie den Fingerprint nur für ein Profil neu, das Sie noch nicht verwendet haben oder auf das Sie verzichten können. Dies kann nicht rückgängig gemacht werden.", + "canvasNoiseSeedPlaceholder": "Seed-Zeichenfolge für den Canvas-Fingerprint eingeben", + "addFontsPlaceholder": "Schriftarten hinzufügen...", + "enterAsJson": "{{title}} als JSON eingeben" + }, + "warnings": { + "windowResizeTitle": "Benutzerdefinierte Fenstergröße", + "windowResizeDescription": "Wenn Sie die Größe des Browserfensters ändern, steigt eventuell die Wahrscheinlichkeit, dass Websites die gefälschten Browserinformationen erkennen.", + "dontShowAgain": "Nicht mehr anzeigen", + "continue": "Fortfahren", + "cancel": "Abbrechen" + }, + "syncAll": { + "title": "Synchronisierung für vorhandene Elemente aktivieren", + "description": "Einige Ihrer Elemente werden nicht synchronisiert. Möchten Sie die Synchronisierung für alle aktivieren?", + "enableAll": "Alle aktivieren", + "skip": "Überspringen", + "success": "Synchronisierung für alle Elemente aktiviert", + "labels": { + "proxies": "Proxys", + "vpns": "VPNs", + "groups": "Gruppen", + "extensions": "Erweiterungen", + "extensionGroups": "Erweiterungsgruppen" + } + }, + "crossOs": { + "viewOnly": "Dieses Profil wurde unter {{os}} erstellt und wird auf diesem System nicht unterstützt", + "cannotLaunch": "Dieses Profil wurde unter {{os}} erstellt und wird auf diesem System nicht unterstützt", + "cannotModify": "Die Sync-Einstellungen eines Profils von einem anderen Betriebssystem können nicht geändert werden" + }, + "profileInfo": { + "title": "Profildetails", + "tabs": { + "info": "Info", + "settings": "Einstellungen" + }, + "fields": { + "profileId": "Profil-ID", + "browser": "Browser", + "releaseType": "Versionstyp", + "proxyVpn": "Proxy / VPN", + "launchHook": "Start-Hook", + "group": "Gruppe", + "tags": "Tags", + "note": "Notiz", + "syncStatus": "Sync-Status", + "lastLaunched": "Zuletzt gestartet", + "hostOs": "Host-Betriebssystem", + "ephemeral": "Flüchtig", + "extensionGroup": "Erweiterungsgruppe", + "totalSessions": "Sitzungen insgesamt", + "syncMode": "Sync-Modus", + "proxy": "PROXY", + "vpn": "VPN", + "cookieCount": "Gespeicherte Cookies", + "localDataTransfer": "Lokale Datenübertragung", + "created": "Erstellt", + "windowColor": "Fensterfarbe" + }, + "values": { + "none": "Keine", + "never": "Nie", + "copied": "Kopiert!", + "yes": "Ja", + "activeNow": "Gerade aktiv", + "direct": "Direkt", + "loading": "Wird geladen…", + "unknown": "Unbekannt" + }, + "network": { + "bypassRules": "Proxy-Umgehungsregeln", + "bypassRulesTitle": "Proxy-Umgehungsregeln", + "bypassRulesDescription": "Anfragen, die diesen Regeln entsprechen, werden direkt verbunden und umgehen den Proxy.", + "addRule": "Regel hinzufügen", + "rulePlaceholder": "z. B. example.com, 192.168.1.*, .*\\.local", + "noRules": "Keine Umgehungsregeln konfiguriert.", + "ruleTypes": "Unterstützt Hostnamen, IP-Adressen und reguläre Ausdrücke.", + "vpnLabel": "VPN: {{name}}", + "proxyLabel": "Proxy: {{name}}" + }, + "launchHook": { + "title": "Start-Hook-URL", + "label": "Start-Hook-URL", + "description": "Donut Browser sendet bei jedem Start des Profils eine GET-Anfrage an diese URL.", + "placeholder": "https://example.com/hooks/profile-launch", + "invalidUrlHint": "Geben Sie eine gültige http://- oder https://-URL ein." + }, + "actions": { + "manageCookies": "Cookies verwalten", + "assignExtensionGroup": "Erweiterungsgruppe zuweisen" + }, + "clone": { + "title": "Profil klonen", + "description": "Geben Sie einen Namen für das geklonte Profil ein", + "namePlaceholder": "Profilname", + "button": "Klonen" + }, + "duplicate": "Duplizieren", + "breadcrumbRoot": "Profil", + "openDialog": "Einstellungen öffnen", + "sections": { + "overview": "Übersicht", + "fingerprint": "Fingerprint", + "network": "Netzwerk", + "cookies": "Cookies", + "extensions": "Erweiterungen", + "sync": "Synchronisierung", + "automation": "Automatisierung", + "security": "Sicherheit", + "delete": "Profil löschen", + "activity": "Aktivität", + "launchHook": "Start-Hook", + "transfer": "Übertragung" + }, + "sectionDesc": { + "fingerprint": "Legen Sie fest, wie dieses Profil für Fingerprinting-Skripte erscheint.", + "network": "Verwalten Sie den Proxy oder das VPN, über das dieses Profil ins Internet geht.", + "cookies": "Cookies für dieses Profil importieren, kopieren oder löschen.", + "extensions": "Legen Sie fest, welche Erweiterungen beim Start dieses Profils geladen werden.", + "sync": "Legen Sie fest, wie dieses Profil auf Ihre anderen Geräte gespiegelt wird.", + "automation": "Bei jedem Start dieses Profils einen Befehl oder ein Skript ausführen.", + "security": "Die Profildaten mit einem Passwort verschlüsseln.", + "launchHook": "Bei jedem Start des Profils eine GET-Anfrage an diese URL senden." + }, + "badges": { + "locked": "GESPERRT", + "active": "AKTIV" + }, + "cookies": { + "runningNotice": "Cookies können nicht gelesen werden, solange der Browser läuft. Schließen Sie zuerst dieses Profil.", + "domainsHeader": "Domains ({{count}})" + }, + "security": { + "protected": "Dieses Profil ist mit einem Passwort verschlüsselt.", + "unprotected": "Dieses Profil ist nicht verschlüsselt. Legen Sie ein Passwort fest, um die gespeicherten Daten zu verschlüsseln.", + "cannotWhileRunning": "Stoppen Sie das Profil, bevor Sie sein Passwort ändern." + }, + "fingerprint": { + "notSupported": "Die Bearbeitung des Fingerprints ist nur für Wayfern-Profile verfügbar.", + "lockedTitle": "Das Anzeigen und Bearbeiten des Fingerprints ist eine Pro-Funktion", + "lockedDescription": "Ihre Geräteinformationen sind in jedem Profil geschützt. Zum Anzeigen und Bearbeiten des Fingerprints eines Profils ist ein aktiver kostenpflichtiger Tarif erforderlich." + }, + "syncStatusValue": { + "waiting": "Wartet", + "syncing": "Wird synchronisiert", + "synced": "Synchronisiert", + "error": "Fehler" + }, + "ephemeral": { + "cookiesUnavailable": "Flüchtige Profile werden beim Schließen des Browsers verworfen, daher gibt es hier keine Cookies zu verwalten.", + "extensionsUnavailable": "Flüchtige Profile werden beim Schließen des Browsers verworfen, daher können ihnen keine Erweiterungsgruppen zugewiesen werden.", + "syncUnavailable": "Flüchtige Profile werden beim Schließen des Browsers verworfen, daher gibt es nichts, was in die Cloud synchronisiert werden könnte.", + "hint": "Erstellen Sie ein normales Profil, wenn die Daten erhalten bleiben sollen." + } + }, + "profileTransfer": { + "exportTitle": "Profil exportieren", + "archiveFilter": "Donut-Profilarchiv", + "exportDescription": "Schreibt dieses Profil in eine Datei, die ein anderer Rechner lesen kann. Das Archiv enthält die Konfiguration und auf Wunsch die Browserdaten: Cookies, Anmeldungen und den Zustand der Erweiterungen.", + "includeData": "Browserdaten einschließen", + "protectedNotice": "Dieses Profil ist passwortgeschützt, daher bleiben seine Daten auf diesem Rechner. Das Archiv enthält nur die Konfiguration.", + "runningNotice": "Schließen Sie den Browser vor dem Export, damit das Archiv nicht geschrieben wird, während sich das Profil ändert.", + "exportButton": "Exportieren", + "exportedWithData": "Profil mit Browserdaten exportiert", + "exportedConfigOnly": "Profilkonfiguration exportiert", + "importTitle": "Profilarchiv auswählen", + "importDescription": "Fügen Sie ein Profil hinzu, das auf einem anderen Rechner exportiert wurde. Es wird als neues Profil angelegt und ersetzt nie ein vorhandenes.", + "chooseArchive": "Archiv auswählen", + "archiveVersion": "{{browser}} {{version}}", + "archiveWithData": "Enthält die Browserdaten", + "archiveConfigOnly": "Nur Konfiguration", + "importButton": "Importieren", + "imported": "Importiert als {{name}}" + }, + "extensions": { + "title": "Erweiterungen", + "description": "Verwalten Sie Browsererweiterungen und Erweiterungsgruppen für Ihre Profile.", + "upload": "Hochladen", + "delete": "Löschen", + "extensionsTab": "Erweiterungen", + "groupsTab": "Gruppen", + "managedNotice": "Hier verwaltete Erweiterungen ersetzen beim Start alle manuell in Profilen installierten Erweiterungen.", + "proRequired": "Die Erweiterungsverwaltung ist eine Pro-Funktion", + "empty": "Noch keine Erweiterungen hochgeladen.", + "noGroups": "Noch keine Erweiterungsgruppen erstellt.", + "createGroup": "Gruppe erstellen", + "newGroup": "Neue Gruppe", + "addToGroup": "Erweiterung hinzufügen...", + "removeFromGroup": "Aus der Gruppe entfernen", + "deleteGroup": "Gruppe löschen", + "extensionGroup": "Erweiterungsgruppe", + "compatibility": { + "label": "Kompatibilität", + "chromium": "Chromium" + }, + "selectedFile": "Ausgewählte Datei", + "namePlaceholder": "Name der Erweiterung", + "groupNamePlaceholder": "Gruppenname", + "uploadSuccess": "Erweiterung erfolgreich hochgeladen", + "deleteSuccess": "Erweiterung erfolgreich gelöscht", + "groupCreateSuccess": "Erweiterungsgruppe erfolgreich erstellt", + "groupUpdateSuccess": "Erweiterungsgruppe erfolgreich aktualisiert", + "groupDeleteSuccess": "Erweiterungsgruppe erfolgreich gelöscht", + "deleteConfirmTitle": "Erweiterung löschen", + "deleteConfirmDescription": "Möchten Sie „{{name}}“ wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "deleteGroupConfirmTitle": "Erweiterungsgruppe löschen", + "deleteGroupConfirmDescription": "Möchten Sie die Gruppe „{{name}}“ wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "invalidFileType": "Ungültiger Dateityp. Bitte wählen Sie eine .crx- oder .zip-Datei.", + "readError": "Die Erweiterungsdatei konnte nicht gelesen werden.", + "assignTitle": "Erweiterungsgruppe zuweisen", + "assignDescription": "{{count}} ausgewählte(s) Profil(e) einer Erweiterungsgruppe zuweisen.", + "noGroup": "Keine (keine Erweiterungsgruppe)", + "assignSuccess": "Erweiterungsgruppe erfolgreich zugewiesen", + "editExtension": "Erweiterung bearbeiten", + "updateSuccess": "Erweiterung erfolgreich aktualisiert", + "version": "Version", + "author": "Autor", + "homepage": "Homepage", + "editGroup": "Gruppe bearbeiten", + "editGroupDescription": "Ändern Sie den Gruppennamen und legen Sie fest, welche Erweiterungen enthalten sind.", + "groupExtensions": "Erweiterungen in dieser Gruppe", + "noExtensionsInGroup": "Noch keine Erweiterungen hinzugefügt", + "editExtensionDescription": "Ändern Sie den Namen der Erweiterung, sehen Sie ihre Metadaten ein oder ersetzen Sie sie durch ein anderes Archiv oder einen anderen Ordner.", + "metadata": "Metadaten", + "noMetadata": "Keine Metadaten aus dem Manifest verfügbar.", + "selectFile": "Datei auswählen", + "loadUnpacked": "Entpackte laden", + "loadUnpackedTooltip": "Eine Erweiterung aus einem Ordner mit manifest.json laden", + "selectFolderTitle": "Erweiterungsordner auswählen", + "selectedFolder": "Ausgewählter Ordner", + "selectFolder": "Ordner auswählen", + "linkFolder": "Direkt aus diesem Ordner laden", + "linkFolderOff": "Der Ordner wird in Donut kopiert. Die Erweiterung ist portabel und wird mit Ihren anderen Geräten synchronisiert.", + "linkFolderOn": "Donut lädt die Erweiterung bei jedem Start direkt aus diesem Ordner. Ihre Änderungen gelten ab dem nächsten Browserstart, aber die Erweiterung bleibt auf diesem Rechner und wird nie synchronisiert.", + "replaceSource": "Quelle ersetzen", + "linkedNoSync": "Verknüpfte Erweiterungen bleiben auf diesem Rechner und können nicht synchronisiert werden.", + "uploadFailed": "Die Erweiterung konnte nicht hinzugefügt werden", + "updateFailed": "Die Erweiterung konnte nicht aktualisiert werden", + "deleteFailed": "Die Erweiterung konnte nicht gelöscht werden", + "groupCreateFailed": "Die Erweiterungsgruppe konnte nicht erstellt werden", + "groupUpdateFailed": "Die Erweiterungsgruppe konnte nicht aktualisiert werden", + "groupDeleteFailed": "Die Erweiterungsgruppe konnte nicht gelöscht werden", + "syncEnabled": "Sync aktiviert", + "syncDisabled": "Sync deaktiviert", + "syncEnableTooltip": "Sync aktivieren", + "syncDisableTooltip": "Sync deaktivieren", + "loadGroupsFailed": "Die Erweiterungsgruppen konnten nicht geladen werden", + "assignGroupFailed": "Die Erweiterungsgruppe konnte nicht zugewiesen werden", + "bulkDelete": { + "extensionsTitle": "Erweiterungen löschen", + "extensionsDescription": "{{count}} Erweiterungen löschen? {{names}}", + "groupsTitle": "Erweiterungsgruppen löschen", + "groupsDescription": "{{count}} Erweiterungsgruppen löschen? {{names}}", + "confirmButton": "Löschen" + }, + "source": { + "label": "Quelle", + "archive": "Archiv", + "unpacked": "Entpackter Ordner", + "linked": "Verknüpfter Ordner", + "folderLabel": "Ordner", + "linkedTooltip": "Direkt geladen aus {{path}}" + }, + "fromUrl": "Über Link", + "fromUrlTooltip": "Eine Erweiterung über einen Chrome Web Store-Link, eine Erweiterungs-ID oder einen direkten .crx- oder .zip-Link hinzufügen", + "urlPlaceholder": "Web Store-Link, Erweiterungs-ID oder .crx-Link", + "urlHint": "Donut lädt das Paket über HTTPS herunter und liest Name und Version, bevor etwas gespeichert wird.", + "fetchExtension": "Abrufen", + "fetching": "Wird abgerufen…", + "fetchedIdentity": "{{name}} · Version {{version}}", + "fetchedFrom": "Heruntergeladen von {{source}}", + "fetchSuccess": "Erweiterung heruntergeladen. Prüfen Sie den Namen und fügen Sie sie dann hinzu.", + "fetchFailed": "Die Erweiterung konnte nicht heruntergeladen werden" + }, + "pro": { + "badge": "PRO", + "fingerprintLocked": "Die Bearbeitung des Fingerprints ist eine Pro-Funktion", + "cookieCopyLocked": "Das Kopieren von Cookies ist eine Pro-Funktion", + "cookieImportLocked": "Der Cookie-Import ist eine Pro-Funktion", + "cookieExportLocked": "Der Cookie-Export ist eine Pro-Funktion", + "cookieManagementLocked": "Die Cookie-Verwaltung ist eine Pro-Funktion" + }, + "dnsBlocklist": { + "title": "DNS-Sperrliste", + "none": "Keine", + "light": "Light", + "normal": "Normal", + "pro": "Pro", + "proPlus": "Pro++", + "ultimate": "Ultimate", + "settingsDescription": "DNS-Sperrlisten blockieren Werbung, Tracker und Malware-Domains auf Proxy-Ebene. Die Listen werden alle 12 Stunden automatisch aktualisiert.", + "manageLists": "DNS-Sperrlisten verwalten", + "refreshAll": "Alle Listen aktualisieren", + "refreshFailed": "Die DNS-Sperrlisten konnten nicht aktualisiert werden", + "domains": "Domains", + "fresh": "Aktuell", + "stale": "Veraltet", + "notCached": "Nicht im Cache", + "tabBlocklists": "Sperrlisten", + "tabCustom": "Eigene Listen", + "custom.description": "Erstellen Sie Ihre eigene Sperrliste aus Quell-URLs und manuellen Regeln. Erlaubte Domains haben immer Vorrang vor gesperrten.", + "custom.sourcesLabel": "Quell-URLs für Sperrlisten", + "custom.sourcesPlaceholder": "Eine URL pro Zeile", + "custom.blockLabel": "Gesperrte Domains", + "custom.blockPlaceholder": "Eine Domain pro Zeile", + "custom.allowLabel": "Erlaubte Domains", + "custom.allowPlaceholder": "Eine Domain pro Zeile", + "custom.allowHint": "Erlaubte Domains werden aus der erstellten Sperrliste entfernt und haben Vorrang vor jeder Sperrregel.", + "custom.saved": "Eigene DNS-Regeln gespeichert", + "custom.imported": "Eigene DNS-Regeln importiert", + "custom.exported": "Eigene DNS-Regeln exportiert", + "custom.exportTxt": "TXT exportieren", + "custom.exportJson": "JSON exportieren", + "customLevel": "Eigene", + "custom.allowlistModeLabel": "Positivlisten-Modus", + "custom.allowlistModeOn": "Nur die unten aufgeführten Domains sind erreichbar; alles andere wird blockiert.", + "custom.allowlistModeOff": "Aufgeführte Domains blockieren; alles andere erlauben.", + "custom.allowedOnlyLabel": "Erlaubte Domains (nur diese)", + "custom.allowedOnlyHint": "Subdomains einer aufgeführten Domain sind ebenfalls erlaubt. Eine leere Liste deaktiviert die Filterung." + }, + "vpns": { + "form": { + "titleEdit": "VPN bearbeiten", + "titleCreate": "WireGuard-VPN erstellen", + "descEdit": "Ändern Sie den Namen Ihrer VPN-Konfiguration.", + "descCreate": "Geben Sie die Daten Ihrer WireGuard-Schnittstelle und Ihres Peers ein.", + "name": "Name", + "namePlaceholder": "z. B. WireGuard Zuhause", + "privateKey": "Privater Schlüssel", + "privateKeyPlaceholder": "Base64-kodierter privater Schlüssel", + "address": "Adresse", + "addressPlaceholder": "z. B. 10.0.0.2/24", + "dnsOptional": "DNS (optional)", + "dnsPlaceholder": "z. B. 1.1.1.1", + "mtuOptional": "MTU (optional)", + "mtuPlaceholder": "z. B. 1420", + "peerPublicKey": "Öffentlicher Peer-Schlüssel", + "peerPublicKeyPlaceholder": "Base64-kodierter öffentlicher Peer-Schlüssel", + "peerEndpoint": "Peer-Endpunkt", + "peerEndpointPlaceholder": "z. B. vpn.example.com:51820", + "allowedIps": "Erlaubte IPs", + "allowedIpsPlaceholder": "z. B. 0.0.0.0/0, ::/0", + "keepaliveOptional": "Persistent Keepalive (optional)", + "keepalivePlaceholder": "z. B. 25", + "presharedKeyOptional": "Preshared Key (optional)", + "presharedKeyPlaceholder": "Base64-kodierter Preshared Key", + "updateButton": "VPN aktualisieren", + "createButton": "VPN erstellen", + "nameRequired": "Ein VPN-Name ist erforderlich", + "privateKeyRequired": "Der private Schlüssel ist erforderlich", + "addressRequired": "Die Adresse ist erforderlich", + "peerPublicKeyRequired": "Der öffentliche Peer-Schlüssel ist erforderlich", + "peerEndpointRequired": "Der Peer-Endpunkt ist erforderlich", + "updated": "VPN erfolgreich aktualisiert", + "created": "WireGuard-VPN erfolgreich erstellt", + "updateFailed": "Das VPN konnte nicht aktualisiert werden: {{error}}", + "createFailed": "Das VPN konnte nicht erstellt werden: {{error}}" + }, + "import": { + "title": "VPN-Konfiguration importieren", + "descDropzone": "Eine WireGuard-Konfigurationsdatei (.conf) importieren", + "descPreview": "Prüfen Sie die zu importierende VPN-Konfiguration", + "descResult": "VPN-Import abgeschlossen", + "dropzonePrompt": "WireGuard-.conf-Datei hier ablegen oder klicken, um sie auszuwählen", + "pasteHint": "Mit {{modKey}}+V aus der Zwischenablage einfügen", + "invalidContent": "Der Inhalt scheint keine gültige VPN-Konfiguration zu sein", + "fileReadError": "Die Datei konnte nicht gelesen werden", + "wrongFileType": "Bitte legen Sie eine WireGuard-.conf-Datei ab", + "configurationLabel": "{{type}}-Konfiguration", + "endpointLabel": "Endpunkt: {{endpoint}}", + "vpnNameLabel": "VPN-Name", + "vpnNamePlaceholder": "Mein VPN", + "configPreview": "Konfigurationsvorschau", + "importedSuccess": "VPN erfolgreich importiert", + "importFailed": "Import fehlgeschlagen", + "importButton": "VPN importieren", + "doneButton": "Fertig", + "failedGeneric": "Die VPN-Konfiguration konnte nicht importiert werden", + "defaultName": "{{type}}-VPN" + }, + "management": { + "loading": "VPNs werden geladen...", + "noneCreated": "Noch keine VPN-Konfigurationen erstellt. Importieren oder erstellen Sie eine über die Schaltflächen oben.", + "editVpn": "VPN bearbeiten", + "deleteVpn": "VPN löschen", + "cannotDelete_one": "Löschen nicht möglich: wird von {{count}} Profil verwendet", + "cannotDelete_other": "Löschen nicht möglich: wird von {{count}} Profilen verwendet", + "syncCannotDisable": "Die Synchronisierung kann nicht deaktiviert werden, solange synchronisierte Profile dieses VPN verwenden", + "deleteSuccess": "VPN erfolgreich gelöscht", + "deleteFailed": "Das VPN konnte nicht gelöscht werden", + "deleteTitle": "VPN löschen", + "deleteDescription": "Diese Aktion kann nicht rückgängig gemacht werden. Das VPN „{{name}}“ wird dauerhaft gelöscht." + } + }, + "importProfile": { + "title": "Browserprofil importieren", + "autoDetect": "Automatisch erkennen", + "manualImport": "Manueller Import", + "donutArchive": "Donut-Archiv", + "detectedProfilesTitle": "Erkannte Browserprofile", + "scanning": "Suche nach Browserprofilen...", + "noneFound": "Auf Ihrem System wurden keine Browserprofile gefunden.", + "noneFoundHint": "Nutzen Sie den manuellen Import, wenn Ihre Profile an eigenen Speicherorten liegen.", + "newProfileName": "Neuer Profilname:", + "newProfileNamePlaceholder": "Geben Sie einen Namen für das importierte Profil ein", + "manualTitle": "Manueller Profilimport", + "profileFolderPath": "Pfad des Profilordners:", + "profileFolderPlaceholder": "Geben Sie den vollständigen Pfad zum Profilordner ein", + "browseFolderTitle": "Ordner durchsuchen", + "examplePaths": "Beispielpfade:", + "selectFolderTitle": "Browserprofilordner auswählen", + "folderDialogFailed": "Der Ordnerdialog konnte nicht geöffnet werden", + "detectFailed": "Vorhandene Browserprofile konnten nicht erkannt werden", + "proxyOptional": "Proxy (optional)", + "noProxy": "Kein Proxy", + "nextButton": "Weiter", + "importedAs": "Dieses Profil wird als {{browser}}-Profil importiert.", + "selectAll": "Alle auswählen", + "selectedCount": "{{count}} ausgewählt", + "scanButton": "Suchen", + "manualHint": "Wählen Sie einen Profilordner, einen Benutzerdatenordner eines Browsers, einen Ordner mit exportierten Profilen oder ein ZIP-Archiv.", + "selectArchiveTitle": "ZIP-Archiv auswählen", + "noProfilesInLocation": "An diesem Speicherort wurden keine Profile gefunden.", + "selectAtLeastOne": "Wählen Sie mindestens ein Profil zum Importieren aus", + "emptyNames": "Jedes ausgewählte Profil benötigt einen Namen", + "profilesToImport": "Zu importierende Profile", + "groupOptional": "Gruppe (optional)", + "noGroup": "Keine Gruppe", + "createNewGroup": "Neue Gruppe erstellen…", + "newGroupNamePlaceholder": "Name der neuen Gruppe", + "duplicateStrategyLabel": "Wenn ein Profilname bereits existiert", + "duplicateRename": "Automatisch umbenennen", + "duplicateSkip": "Überspringen", + "proxyRoundRobin": "Gespeicherte Proxys verteilen (Round-Robin)", + "importingTitle": "Profile werden importiert…", + "importProgress": "{{completed}} von {{total}} verarbeitet", + "resultsSummary": "{{imported}} importiert, {{skipped}} übersprungen, {{failed}} fehlgeschlagen", + "statusImported": "Importiert", + "statusSkipped": "Übersprungen", + "statusFailed": "Fehlgeschlagen", + "importButtonCount": "Importieren ({{count}})", + "vpnOptional": "VPN (optional)", + "noVpn": "Kein VPN", + "advancedOptions": "Erweiterte Optionen", + "configureFingerprint": "Fingerprint konfigurieren (optional)", + "reportCookies": "Cookies", + "reportPasswords": "Passwörter", + "reportAutofill": "Zahlungsmethoden", + "reportExtensions": "Erweiterungen", + "reportHistory": "Verlauf", + "reportBookmarks": "Lesezeichen", + "reportLocalStorage": "Websitedaten", + "reportNothingCarried": "Es wurden keine lesbaren Daten übernommen", + "reportUnrecoverable": "Nicht entschlüsselbar: {{count}}", + "closeSourceBrowserHint": "Schließen Sie den Quellbrowser und versuchen Sie es erneut, um eine vollständige Kopie zu erhalten, oder importieren Sie jetzt und nehmen Sie in Kauf, dass Websitedaten unvollständig sein können.", + "importAnyway": "Trotzdem importieren", + "warnings": { + "secretsNotMigrated": "Cookies und Passwörter konnten nicht entsperrt werden, daher müssen Sie sich erneut anmelden.", + "appBoundEncrypted": "Chrome 127+ unter Windows bindet Cookies an den Browser selbst; diese Cookies kann keine andere App übernehmen.", + "storeTooOld": "Eine Datenbank war zu alt, um von diesem Browser geöffnet zu werden, und wurde übersprungen.", + "storeTooNew": "Eine Datenbank stammte von einem neueren Browser als diesem und wurde übersprungen.", + "sourceBrowserRunning": "Der Quellbrowser lief, daher können Websitedaten unvollständig sein.", + "securePreferencesReset": "Geschützte Einstellungen wie Startseite und Suchmaschine wurden auf die Standardwerte zurückgesetzt.", + "extensionsPartial": "Einige Erweiterungen gehörten zum Quellbrowser und wurden nicht übernommen.", + "storeUnreadable": "Eine Datenbank konnte nicht gelesen werden und wurde übersprungen, statt beschädigt kopiert zu werden." + } + }, + "syncTooltips": { + "syncing": "Wird synchronisiert...", + "syncedAt": "Synchronisiert {{time}}", + "synced": "Synchronisiert", + "waiting": "Wartet auf Sync", + "errorWith": "Sync-Fehler: {{error}}", + "error": "Sync-Fehler", + "notSynced": "Nicht synchronisiert", + "enable": "Sync aktivieren", + "disable": "Sync deaktivieren", + "lockedInUse": "Die Synchronisierung ist gesperrt, solange ein synchronisiertes Profil dies verwendet", + "bulkToggle": "Sync umschalten" + }, + "groupManagement": { + "description": "Verwalten Sie Ihre Profilgruppen", + "createGroup": "Gruppe erstellen", + "noGroups": "Noch keine Gruppen erstellt. Erstellen Sie Ihre erste Gruppe über die Schaltfläche oben.", + "loading": "Gruppen werden geladen...", + "profileCount_one": "{{count}} Profil", + "profileCount_other": "{{count}} Profile", + "groupsLabel": "Gruppen", + "profilesCol": "Profile", + "syncCannotDisable": "Die Synchronisierung kann nicht deaktiviert werden, solange synchronisierte Profile diese Gruppe verwenden", + "editGroupTooltip": "Gruppe bearbeiten", + "deleteGroupTooltip": "Gruppe löschen", + "loadFailed": "Die Gruppen konnten nicht geladen werden", + "bulkDelete": { + "title": "Gruppen löschen", + "description": "Möchten Sie {{count}} Gruppen wirklich löschen? {{names}}. Die Profile werden nach „Standard“ verschoben.", + "description_one": "Möchten Sie {{count}} Gruppe wirklich löschen? {{names}}. Die Profile werden nach „Standard“ verschoben.", + "confirmButton": "Gruppen löschen" + } + }, + "proxyAssignment": { + "title": "Proxy / VPN zuweisen", + "description_one": "{{count}} ausgewähltem Profil einen Proxy oder ein VPN zuweisen.", + "description_other": "{{count}} ausgewählten Profilen einen Proxy oder ein VPN zuweisen.", + "selectLabel": "Proxy / VPN", + "placeholder": "Proxy oder VPN auswählen", + "noProxy": "Kein Proxy / VPN", + "searchPlaceholder": "Proxys oder VPNs suchen...", + "notFound": "Keine Proxys oder VPNs gefunden.", + "assignButton": "Zuweisen", + "success": "Proxy/VPN erfolgreich {{count}} Profil(en) zugewiesen", + "failed": "Proxy/VPN konnte nicht zugewiesen werden", + "selectedProfilesLabel": "Ausgewählte Profile:", + "assignProxyVpnLabel": "Proxy / VPN zuweisen:", + "noneOption": "Keine", + "noValidProfiles": "Keine gültigen Profile ausgewählt.", + "vpnGroupHeading": "VPNs", + "failedFallback": "Proxy/VPN konnte den Profilen nicht zugewiesen werden" + }, + "groupAssignment": { + "title": "Gruppe zuweisen", + "description_one": "{{count}} ausgewähltem Profil eine Gruppe zuweisen.", + "description_other": "{{count}} ausgewählten Profilen eine Gruppe zuweisen.", + "selectLabel": "Gruppe", + "placeholder": "Gruppe auswählen", + "noGroup": "Keine Gruppe (Standard)", + "assignButton": "Zuweisen", + "success": "Gruppe erfolgreich {{count}} Profil(en) zugewiesen", + "failed": "Die Gruppe konnte nicht zugewiesen werden", + "selectedProfilesLabel": "Ausgewählte Profile:", + "assignGroupLabel": "Einer Gruppe zuweisen:", + "noValidProfiles": "Keine gültigen Profile ausgewählt.", + "failedFallback": "Die Gruppe konnte den Profilen nicht zugewiesen werden" + }, + "profileSelector": { + "title": "Profil auswählen", + "description": "Wählen Sie ein Profil, mit dem diese URL geöffnet wird", + "searchPlaceholder": "Profile durchsuchen...", + "noProfiles": "Keine Profile verfügbar", + "noResults": "Keine Profile entsprechen Ihrer Suche", + "selectButton": "Auswählen", + "launching": "Wird gestartet...", + "chooseProfileTitle": "Profil wählen", + "openingUrl": "URL wird geöffnet:", + "urlCopied": "URL in die Zwischenablage kopiert!", + "selectProfileLabel": "Profil auswählen:", + "noneAvailableShort": "Keine Profile verfügbar. Bitte erstellen Sie zuerst ein Profil.", + "noneAvailableLong": "Schließen Sie diesen Dialog und erstellen Sie im Hauptfenster ein Profil, um loszulegen.", + "chooseAProfile": "Profil wählen", + "badgeProxy": "Proxy", + "badgeRunning": "Läuft", + "badgeUnavailable": "Nicht verfügbar", + "openButton": "Öffnen" + }, + "wayfernTerms": { + "title": "Nutzungsbedingungen von Wayfern", + "description": "Bevor Sie Donut Browser verwenden, müssen Sie die Nutzungsbedingungen von Wayfern lesen und ihnen zustimmen.", + "reviewLabel": "Bitte lesen Sie die Nutzungsbedingungen unter:", + "agreeNotice": "Mit einem Klick auf „Ich stimme zu“ erklären Sie sich an diese Bedingungen gebunden.", + "acceptButton": "Ich stimme zu", + "acceptSuccess": "Bedingungen erfolgreich akzeptiert", + "acceptFailed": "Die Bedingungen konnten nicht akzeptiert werden", + "tryAgain": "Bitte versuchen Sie es erneut" + }, + "commercialTrial": { + "title": "Kommerzielle Testphase abgelaufen", + "description": "Ihre zweiwöchige kommerzielle Testphase ist beendet.", + "body": "Wenn Sie Donut Browser geschäftlich nutzen, benötigen Sie für die weitere Nutzung eine kommerzielle Lizenz. Für die private Nutzung bleibt die App weiterhin kostenlos.", + "understandButton": "Verstanden", + "failed": "Die Bestätigung konnte nicht gespeichert werden", + "tryAgain": "Bitte versuchen Sie es erneut" + }, + "permissionDialog": { + "titleMicrophone": "Mikrofonzugriff erforderlich", + "titleCamera": "Kamerazugriff erforderlich", + "descMicrophone": "Donut Browser benötigt Zugriff auf Ihr Mikrofon, um Mikrofonfunktionen in Webbrowsern zu ermöglichen. Jede Website, die Ihr Mikrofon nutzen möchte, fragt trotzdem einzeln nach Ihrer Erlaubnis.", + "descCamera": "Donut Browser benötigt Zugriff auf Ihre Kamera, um Kamerafunktionen in Webbrowsern zu ermöglichen. Jede Website, die Ihre Kamera nutzen möchte, fragt trotzdem einzeln nach Ihrer Erlaubnis.", + "grantedMicrophone": "Berechtigung erteilt! Browser, die aus Donut Browser gestartet werden, können jetzt auf Ihr Mikrofon zugreifen.", + "grantedCamera": "Berechtigung erteilt! Browser, die aus Donut Browser gestartet werden, können jetzt auf Ihre Kamera zugreifen.", + "notGrantedMicrophone": "Berechtigung nicht erteilt. Klicken Sie auf die Schaltfläche unten, um Zugriff auf Ihr Mikrofon anzufordern.", + "notGrantedCamera": "Berechtigung nicht erteilt. Klicken Sie auf die Schaltfläche unten, um Zugriff auf Ihre Kamera anzufordern.", + "doneButton": "Fertig", + "cancelButton": "Abbrechen", + "grantAccessButton": "Zugriff erteilen", + "requestSuccessMicrophone": "Berechtigung für Mikrofonzugriff angefordert", + "requestSuccessCamera": "Berechtigung für Kamerazugriff angefordert", + "requestFailed": "Die Berechtigung konnte nicht angefordert werden", + "stillNotGrantedMicrophone": "Der Mikrofonzugriff wurde noch immer nicht erteilt. Eventuell müssen Sie ihn manuell unter Systemeinstellungen → Datenschutz & Sicherheit → Mikrofon aktivieren.", + "stillNotGrantedCamera": "Der Kamerazugriff wurde noch immer nicht erteilt. Eventuell müssen Sie ihn manuell unter Systemeinstellungen → Datenschutz & Sicherheit → Kamera aktivieren.", + "grantedToastMicrophone": "Mikrofonzugriff erteilt", + "grantedToastCamera": "Kamerazugriff erteilt" + }, + "traffic": { + "title": "Details zum Datenverkehr", + "bandwidthOverTime": "Bandbreite im Zeitverlauf", + "timePeriodPlaceholder": "Zeitraum", + "last1m": "Letzte Minute", + "last5m": "Letzte 5 Min.", + "last30m": "Letzte 30 Min.", + "last1h": "Letzte Stunde", + "last2h": "Letzte 2 Stunden", + "last4h": "Letzte 4 Stunden", + "last1d": "Letzter Tag", + "last7d": "Letzte 7 Tage", + "last30d": "Letzte 30 Tage", + "allTime": "Gesamter Zeitraum", + "allTimeShort": "gesamter Zeitraum", + "totalSuffix": "gesamt", + "sentLabel": "Gesendet ({{period}})", + "receivedLabel": "Empfangen ({{period}})", + "requestsLabel": "Anfragen ({{period}})", + "allTimeTraffic": "Datenverkehr insgesamt:", + "allTimeRequests": "Anfragen insgesamt:", + "proxyDisclaimer": "Hinweis: Wenn Sie einen Proxy, ein VPN oder einen ähnlichen Dienst nutzen, kann Ihr Anbieter den Datenverkehr aufgrund von Verschlüsselungs-Overhead und Protokollunterschieden anders berechnen.", + "topByTraffic": "Top-Domains nach Datenverkehr ({{period}})", + "topByRequests": "Top-Domains nach Anfragen ({{period}})", + "columnDomain": "Domain", + "columnRequests": "Anfragen", + "columnSent": "Gesendet", + "columnReceived": "Empfangen", + "columnTotal": "Datenverkehr gesamt", + "uniqueIps": "Eindeutige IPs ({{count}})", + "noData": "Für dieses Profil sind keine Daten zum Datenverkehr verfügbar.", + "noDataHint": "Daten zum Datenverkehr erscheinen, nachdem Sie das Profil gestartet haben.", + "sentLegend": "Gesendet", + "receivedLegend": "Empfangen", + "tooltipSent": "↑ Gesendet: ", + "tooltipReceived": "↓ Empfangen: ", + "clearHistory": "Verlauf löschen", + "clearHistoryTitle": "Datenverkehrsverlauf löschen", + "clearHistoryDescription": "Den gesamten erfassten Datenverkehrsverlauf für „{{name}}“ dauerhaft und sicher löschen. Dies kann nicht rückgängig gemacht werden.", + "tabOverview": "Übersicht", + "tabTopDomains": "Top-Domains", + "searchDomains": "Domains suchen…", + "noDomainMatch": "Keine Domains entsprechen Ihrer Suche." + }, + "proxyCheck": { + "unknownLocation": "Unbekannt", + "locationToast": "Standort Ihres Proxys:", + "failed": "Proxy-Prüfung fehlgeschlagen: {{error}}", + "tooltipChecking": "Proxy wird geprüft...", + "tooltipIp": "IP: {{ip}}", + "tooltipChecked": "Geprüft {{time}}", + "tooltipFailed": "Fehlgeschlagen {{time}}", + "tooltipFailedTitle": "Proxy-Prüfung fehlgeschlagen", + "tooltipDefault": "Gültigkeit des Proxys prüfen", + "udpLabel": "UDP", + "udpYes": "Ja", + "udpNo": "Nein", + "udpUnknown": "Unbekannt", + "udpTooltipYes": "Dieser Proxy überträgt UDP, daher kann WebRTC über ihn geleitet werden.", + "udpTooltipNo": "Dieser Proxy kann kein UDP übertragen, daher kann WebRTC nicht über ihn geleitet werden.", + "udpTooltipUnknown": "Ob dieser Proxy UDP überträgt, ist noch nicht ermittelt.", + "ispLabel": "ISP", + "timezoneLabel": "Zeitzone", + "latencyLabel": "Dauer", + "latencyValue": "{{ms}} ms", + "historyTitle": "Letzte Prüfungen", + "historyEmpty": "Noch keine Prüfungen erfasst.", + "historyOk": "Bestanden", + "historyFailed": "Fehlgeschlagen", + "trendLabel": "Latenz der letzten {{count}} Prüfungen, die neueste rechts", + "trendPeak": "Langsamste: {{ms}} ms" + }, + "vpnCheck": { + "valid": "Die Konfiguration des VPN „{{name}}“ ist gültig", + "invalid": "Die Konfiguration des VPN „{{name}}“ ist ungültig", + "failed": "VPN-Prüfung fehlgeschlagen: {{error}}", + "tooltipChecking": "VPN-Konfiguration wird geprüft...", + "tooltipValid": "Konfiguration gültig", + "tooltipInvalid": "Konfiguration ungültig", + "tooltipChecked": "Geprüft {{time}}", + "tooltipDefault": "Gültigkeit der VPN-Konfiguration prüfen" + }, + "profileTable": { + "syncTooltipDisabled": "Sync deaktiviert", + "syncTooltipSyncing": "Wird synchronisiert...", + "syncTooltipSyncedAt": "Synchronisiert {{time}}", + "syncTooltipSynced": "Synchronisiert", + "syncTooltipWaiting": "Wartet auf Sync", + "syncTooltipErrorWith": "Sync-Fehler: {{error}}", + "syncTooltipError": "Sync-Fehler", + "syncTooltipNotSynced": "Nicht synchronisiert", + "noTags": "Keine Tags", + "syncTooltipCloseToSync": "Schließen Sie das Profil, um es zu synchronisieren", + "syncTooltipDisabledWithLast": "Sync deaktiviert, zuletzt synchronisiert {{time}}", + "addTagsPlaceholder": "Tags hinzufügen", + "tagsHeader": "Tags", + "noteHeader": "Notiz", + "vpnsHeading": "VPNs", + "createByCountryHeading": "Nach Land erstellen" + }, + "dataTableActionBar": { + "selected": "{{count}} ausgewählt", + "clearSelection": "Auswahl aufheben" + }, + "appUpdate": { + "toast": { + "updateFailed": "Donut Browser konnte nicht aktualisiert werden", + "restartFailed": "Neustart fehlgeschlagen", + "updateReady": "Update bereit, zum Anwenden neu starten", + "manualDownloadRequired": "Manueller Download erforderlich", + "restartNow": "Jetzt neu starten", + "viewRelease": "Release anzeigen", + "later": "Später", + "uploading": "Wird hochgeladen", + "downloading": "Wird heruntergeladen", + "startingUpdate": "Update wird gestartet..." + } + }, + "browserDownload": { + "toast": { + "fetchVersionsFailed": "{{browser}}-Versionen konnten nicht abgerufen werden", + "foundNewVersions": "{{count}} neue {{browser}}-Versionen gefunden!", + "totalAvailableVersions": "Insgesamt verfügbar: {{count}} Versionen", + "downloadFailed": "{{browser}} {{version}} konnte nicht heruntergeladen werden", + "calculating": "wird berechnet...", + "extractionFailed": "{{browser}} {{version}}: Entpacken fehlgeschlagen", + "extractionFailedDescription": "Die beschädigte Datei wurde gelöscht. Sie wird beim nächsten Versuch erneut heruntergeladen.", + "extracting": "Browserdateien werden entpackt... Bitte schließen Sie die App nicht.", + "verifying": "Browserdateien werden überprüft...", + "downloadingRolling": "Rolling-Release-Build wird heruntergeladen...", + "geoipDownloading": "GeoIP-Datenbank wird heruntergeladen", + "geoipDownloaded": "GeoIP-Datenbank erfolgreich heruntergeladen!", + "downloadFailedDescription": "Der Download konnte nicht abgeschlossen werden. Prüfen Sie Ihre Verbindung und versuchen Sie es erneut." + } + }, + "versionUpdater": { + "toast": { + "alreadyAvailable": "{{browser}} {{version}} ist bereits verfügbar", + "updatingProfiles": "Profilkonfigurationen werden aktualisiert...", + "updateCompleted": "Update von {{browser}} abgeschlossen", + "singleProfileUpdated": "Das Profil „{{name}}“ wurde auf Version {{version}} aktualisiert. Sie können Ihre Browser jetzt mit der neuesten Version starten.", + "multipleProfilesUpdated": "{{count}} Profile wurden auf Version {{version}} aktualisiert. Sie können Ihre Browser jetzt mit der neuesten Version starten.", + "versionAvailable": "Version {{version}} ist jetzt verfügbar. Laufende Profile verwenden die neue Version nach einem Neustart.", + "autoUpdateFailed": "Automatisches Update von {{browser}} fehlgeschlagen", + "updateWithErrors": "Update mit einigen Fehlern abgeschlossen", + "updateWithErrorsDescription": "{{newVersions}} neue Versionen gefunden, {{failedUpdates}} Browser konnten nicht aktualisiert werden", + "updateSuccess": "Browserversionen erfolgreich aktualisiert", + "updateSuccessDescription": "{{newVersions}} neue Versionen für {{successfulUpdates}} Browser gefunden. Automatische Downloads beginnen in Kürze.", + "upToDate": "Keine neuen Browserversionen gefunden", + "upToDateDescription": "Alle Browserversionen sind auf dem neuesten Stand", + "updateAllFailed": "Die Browserversionen konnten nicht aktualisiert werden", + "updateStarted": "Update von {{browser}} gestartet", + "updateStartedDescription": "Der Download von Version {{version}} beginnt in Kürze. Der Browserstart ist bis zum Abschluss des Updates deaktiviert.", + "downloadStarting": "Download von {{browser}} {{version}} wird gestartet", + "downloadProgressBelow": "Der Downloadfortschritt wird unten angezeigt...", + "autoDownloadStarted": "{{browser}} {{version}} wird automatisch heruntergeladen. Der Fortschritt wird unten angezeigt.", + "lookingForUpdates": "Suche nach Updates für {{browser}}" + } + }, + "profilePassword": { + "set": { + "title": "Profilpasswort festlegen", + "description": "Verschlüsselt die Daten von {{name}} auf dem Datenträger. Sie benötigen dieses Passwort bei jedem Start des Profils.", + "button": "Profil verschlüsseln" + }, + "unlock": { + "title": "Profil entsperren", + "description": "Geben Sie das Passwort ein, um {{name}} zu entsperren.", + "button": "Entsperren" + }, + "change": { + "title": "Profilpasswort ändern", + "description": "{{name}} mit einem neuen Passwort neu verschlüsseln.", + "button": "Passwort ändern" + }, + "remove": { + "title": "Profilpasswort entfernen", + "description": "Entschlüsselt die Daten von {{name}} auf dem Datenträger. Das Profil ist danach nicht mehr passwortgeschützt.", + "button": "Passwort entfernen" + }, + "fields": { + "password": "Passwort", + "currentPassword": "Aktuelles Passwort", + "newPassword": "Neues Passwort", + "confirm": "Passwort bestätigen", + "confirmPassword": "Neues Passwort bestätigen" + }, + "errors": { + "oldPasswordRequired": "Das aktuelle Passwort ist erforderlich", + "passwordRequired": "Ein Passwort ist erforderlich", + "tooShort": "Das Passwort muss mindestens 8 Zeichen lang sein", + "mismatch": "Die Passwörter stimmen nicht überein" + }, + "toasts": { + "set": "Das Profil ist jetzt passwortgeschützt", + "changed": "Profilpasswort geändert", + "removed": "Profilpasswort entfernt" + }, + "warnings": { + "forgetWarningTitle": "Wichtig: Dieses Passwort lässt sich nicht wiederherstellen", + "forgetWarningBody": "Donut Browser kann dieses Passwort weder zurücksetzen noch wiederherstellen oder umgehen. Wenn Sie es vergessen, verlieren Sie dauerhaft den Zugriff auf die Daten dieses Profils." + }, + "modes": { + "set": "Festlegen", + "change": "Ändern", + "remove": "Entfernen", + "validate": "Prüfen" + }, + "verifyDialog": { + "title": "Profilpasswort prüfen", + "description": "Geben Sie das Profilpasswort ein, um zu bestätigen, dass es mit dem auf dem Datenträger gespeicherten übereinstimmt.", + "submit": "Prüfen", + "matchToast": "Das Passwort ist korrekt" + } + }, + "backendErrors": { + "incorrectPassword": "Falsches Passwort", + "lockedOut": "Zu viele Fehlversuche. Versuchen Sie es in {{duration}} erneut.", + "lockedOutDuration": { + "seconds": "{{seconds}} s", + "minutes": "{{minutes}} min", + "hours": "{{hours}} h" + }, + "profileNotFound": "Profil nicht gefunden", + "profileNotProtected": "Das Profil ist nicht passwortgeschützt", + "profileAlreadyProtected": "Das Profil ist bereits passwortgeschützt", + "profileRunning": "Diese Aktion ist nicht möglich, solange das Profil läuft", + "profileEphemeral": "Flüchtige Profile können nicht mit einem Passwort geschützt werden, da ihre Daten beim Beenden gelöscht werden.", + "profileMissingSalt": "Dem Profil fehlt sein Verschlüsselungs-Salt", + "profileLocked": "Das Profil ist gesperrt. Geben Sie zuerst das Passwort ein.", + "invalidProfileId": "Ungültige Profil-ID", + "passwordTooShort": "Das Passwort muss mindestens {{min}} Zeichen lang sein", + "proxyNotFound": "Proxy nicht gefunden", + "groupNotFound": "Gruppe nicht gefunden", + "groupAlreadyExists": "Eine Gruppe mit diesem Namen existiert bereits", + "vpnNotFound": "VPN nicht gefunden", + "extensionNotFound": "Erweiterung nicht gefunden", + "extensionGroupNotFound": "Erweiterungsgruppe nicht gefunden", + "extensionUnsupportedFileType": "Dieser Dateityp wird nicht unterstützt. Eine Erweiterung muss ein .crx- oder .zip-Archiv oder ein Ordner sein.", + "extensionDirNotFound": "Dieser Ordner existiert nicht mehr.", + "extensionNotADirectory": "Dieser Pfad ist kein Ordner.", + "extensionManifestMissing": "Dieser Ordner enthält keine manifest.json. Wählen Sie den Ordner, in dem die manifest.json der Erweiterung liegt.", + "extensionManifestInvalid": "Die manifest.json in diesem Ordner konnte nicht gelesen werden.", + "extensionDirTooLarge": "Dieser Ordner ist zu groß, um in Donut kopiert zu werden (Grenze: 256 MB und 20.000 Dateien). Verknüpfen Sie ihn stattdessen direkt.", + "extensionPathHasComma": "Der Pfad dieses Ordners enthält ein Komma, das Chromium nicht laden kann. Benennen Sie den Ordner um oder verschieben Sie ihn.", + "extensionLinkRequiresDirectory": "Nur ein Ordner kann direkt geladen werden. Deaktivieren Sie die Verknüpfung, um ein Archiv hinzuzufügen.", + "extensionLinkedCannotSync": "Diese Erweiterung wird aus einem Ordner auf diesem Rechner geladen, daher gibt es nichts zu synchronisieren.", + "cannotModifyCloudManagedProxy": "Die Synchronisierung eines in der Cloud verwalteten Proxys kann nicht geändert werden", + "syncLockedByProfile": "Die Synchronisierung kann nicht deaktiviert werden, solange synchronisierte Profile dies verwenden", + "syncNotConfigured": "Die Synchronisierung ist nicht konfiguriert. Melden Sie sich an oder konfigurieren Sie zuerst einen selbst gehosteten Server.", + "internal": "Etwas ist schiefgelaufen: {{detail}}", + "invalidLaunchHookUrl": "Ungültige Start-Hook-URL. Verwenden Sie eine vollständige http://- oder https://-URL.", + "cookieDbLocked": "Cookies konnten nicht gelesen werden, da die Datenbank gesperrt ist. Schließen Sie den Browser und versuchen Sie es erneut.", + "cookieDbUnavailable": "Cookies konnten nicht gelesen werden, da der Cookie-Speicher nicht verfügbar ist.", + "cookieImportBrowserRunning": "Cookies können nicht importiert werden, solange der Browser läuft. Schließen Sie ihn und versuchen Sie es erneut.", + "cookieImportProfileProtected": "In ein passwortgeschütztes Profil können keine Cookies importiert werden. Entfernen Sie zuerst das Passwort.", + "cookieImportRemoteSession": "Cookies können nicht importiert werden, solange eine entfernte Sitzung dieses Profil nutzt. Warten Sie, bis die Synchronisierung abgeschlossen ist.", + "cookieImportNoCookies": "In Ihrer Eingabe wurden keine Cookies gefunden.", + "selfHostedRequiresLogout": "Melden Sie sich von Ihrem Donut-Konto ab, bevor Sie einen selbst gehosteten Server konfigurieren.", + "fingerprintRequiresPro": "Zum Anzeigen oder Bearbeiten des Fingerprints ist ein aktiver kostenpflichtiger Tarif erforderlich. Der Schutz ist in allen Tarifen enthalten.", + "proxyNotWorking": "Der ausgewählte Proxy funktioniert nicht, daher wurde das Profil nicht erstellt.", + "proxyPaymentRequired": "Der ausgewählte Proxy erfordert eine Zahlung (402), möglicherweise ist sein Abonnement abgelaufen. Daher wurde das Profil nicht erstellt.", + "vpnNotWorking": "Das ausgewählte VPN funktioniert nicht, daher wurde das Profil nicht erstellt.", + "camoufoxImportDeprecated": "Der Import dieses Profiltyps wird nicht mehr unterstützt. Bitte verwenden Sie stattdessen Wayfern.", + "updateChecksumsUnavailable": "Das Update {{version}} konnte nicht überprüft werden, da seine Prüfsummendatei nicht abgerufen werden konnte. Das Update wurde nicht installiert und wird später erneut versucht.", + "updateChecksumMismatch": "Die heruntergeladene Update-Datei {{file}} hat die Prüfsummenprüfung nicht bestanden und wurde verworfen. Bitte versuchen Sie es erneut.", + "browserChecksumUnavailable": "{{browser}} {{version}} konnte nicht überprüft werden, da die Prüfsummendatei nicht abgerufen werden konnte. Der Download wurde gestoppt und wird später erneut versucht.", + "browserChecksumMismatch": "Das heruntergeladene Archiv von {{browser}} {{version}} hat die Prüfsummenprüfung nicht bestanden und wurde verworfen. Bitte versuchen Sie es erneut.", + "nameCannotBeEmpty": "Der Name darf nicht leer sein", + "wayfernVersionNotAvailable": "Wayfern-Version {{requested}} ist nicht zum Download verfügbar. Die aktuelle Version ist {{current}}.", + "profileNameExists": "Ein Profil namens „{{name}}“ existiert bereits", + "importSourceNotFound": "Der Quellpfad existiert nicht", + "importNoItems": "Nichts zum Importieren ausgewählt", + "browserNotDownloaded": "Es ist keine heruntergeladene Version von {{browser}} verfügbar. Laden Sie sie zuerst herunter und wiederholen Sie dann den Import.", + "archiveExtractionFailed": "Das Archiv konnte nicht entpackt werden: {{detail}}", + "unsupportedArchiveFormat": "Nicht unterstütztes Archivformat. Nur ZIP-Archive werden unterstützt.", + "clearOnCloseUnavailable": "„Beim Schließen löschen“ ist für flüchtige oder passwortgeschützte Profile nicht verfügbar.", + "proxyAndVpnMutuallyExclusive": "Ein Profil kann entweder einen Proxy oder ein VPN verwenden, nicht beides.", + "invalidDnsRulesJson": "Die ausgewählte Datei ist kein gültiges JSON mit DNS-Regeln.", + "unsupportedDnsRulesFormat": "Nicht unterstütztes Regelformat: {{format}}", + "dnsRulesSaveFailed": "Die DNS-Regeln konnten nicht gespeichert werden.", + "dnsRulesExportFailed": "Die DNS-Regeln konnten nicht exportiert werden.", + "fingerprintMatchFailed": "Der Fingerprint konnte nicht an den Proxy angepasst werden.", + "proxySidecarVersionMismatch": "Einige Dateien von Donut Browser stammen aus unterschiedlichen Versionen. Installieren Sie das neueste Update erneut; Ihre Profile bleiben dabei erhalten.", + "updateProfilesRunning": "Stoppen Sie alle laufenden Profile, bevor Sie das Update installieren.", + "updatePreparationFailed": "Donut Browser konnte einen Netzwerkprozess im Hintergrund nicht sicher beenden. Starten Sie Ihren Computer neu und versuchen Sie das Update dann erneut.", + "wayfernTermsRequired": "Akzeptieren Sie die Nutzungsbedingungen von Wayfern, um Wayfern zu verwenden.", + "apiPortUnavailable": "Der API-Server konnte keinen freien Port finden.", + "mcpServerAlreadyRunning": "Der MCP-Server läuft bereits.", + "mcpServerNotRunning": "Der MCP-Server läuft nicht.", + "mcpPortUnavailable": "Der MCP-Server konnte keinen freien Port finden.", + "mcpConfigurationUnavailable": "Die Konfiguration des MCP-Servers ist nicht verfügbar. Starten Sie den Server neu und versuchen Sie es erneut.", + "mcpAgentUnknown": "Dieser MCP-Client wird nicht unterstützt.", + "mcpAgentInstallFailed": "Donut Browser konnte dem MCP-Client nicht hinzugefügt werden: {{detail}}", + "mcpAgentRemoveFailed": "Donut Browser konnte nicht aus dem MCP-Client entfernt werden: {{detail}}", + "vlessConfigInvalid": "Die VLESS-URI ist ungültig.", + "xrayUnavailable": "Xray-core ist auf diesem System nicht verfügbar.", + "xrayUnsupportedOs": "VLESS erfordert macOS 12 oder neuer.", + "xrayStartFailed": "Xray-core konnte nicht gestartet werden.", + "cloudNotSignedIn": "Melden Sie sich bei Ihrem Donut Browser-Konto an, um dies zu nutzen.", + "cloudUnreachable": "Die Server von Donut Browser sind nicht erreichbar. Prüfen Sie Ihre Verbindung und versuchen Sie es erneut.", + "cloudRequestFailed": "Die Anfrage ist fehlgeschlagen. Bitte versuchen Sie es gleich noch einmal.", + "remoteRateLimited": "Zu viele Anfragen. Warten Sie einen Moment und versuchen Sie es erneut.", + "remoteNoCapacity": "Derzeit ist kein entfernter Host frei. Versuchen Sie es in einigen Minuten erneut.", + "remoteNotEntitled": "Ihr Tarif umfasst keine entfernte Ausführung.", + "remoteInteractiveNotEntitled": "Ihr Tarif umfasst Remote-Stunden nur für den Cookie Bot, nicht für interaktive Remote-Sitzungen.", + "remoteRequiresRemoteExitNode": "Der Proxy dieses Profils funktioniert nur auf diesem Computer (zum Beispiel 127.0.0.1 oder eine Adresse im Heimnetz). Eine Remote-Sitzung läuft auf unseren Hosts und benötigt daher einen Proxy mit öffentlicher Adresse.", + "remoteProxyKindUnsupported": "Dieses Profil verwendet einen {{kind}}-Proxy, der den Xray-Sidecar benötigt, den unsere Hosts nicht ausführen. Eine Remote-Sitzung läuft auf unseren Hosts, verwenden Sie daher stattdessen einen HTTP-, HTTPS-, SOCKS- oder WireGuard-Exit.", + "remoteSessionRefused": "Der entfernte Host hat diese Sitzung abgelehnt.", + "remoteSessionNotFound": "Diese Remote-Sitzung existiert nicht mehr.", + "remoteSessionConflict": "Dieses Profil ist bereits an anderer Stelle geöffnet.", + "remoteSyncInProgress": "Dieses Profil wird noch in die Cloud-Synchronisierung hochgeladen. Warten Sie, bis die Synchronisierung abgeschlossen ist, und versuchen Sie es dann erneut.", + "remoteHoursExhausted": "Sie haben alle {{used}} Ihrer {{granted}} Remote-Stunden in diesem Monat verbraucht.", + "notTeamMember": "Sie sind kein Mitglied eines Teams.", + "cookieBotNotEntitled": "Ihr Tarif umfasst den Cookie Bot nicht.", + "cookieBotNotEnrolled": "Dieses Profil ist noch nicht für den Cookie Bot eingerichtet.", + "cookieBotScheduleConflict": "{{email}} wärmt dieses Profil bereits um {{time}} auf.", + "cookieBotRunInProgress": "Für dieses Profil läuft bereits ein Durchlauf.", + "cookieBotRunNotFound": "Dieser Durchlauf existiert nicht mehr.", + "cookieBotInvalidSchedule": "Dieser Zeitplan ist ungültig. Prüfen Sie Startzeit, Tage und Dauer.", + "cookieBotInvalidTimezone": "{{timezone}} ist keine Zeitzone, die der Server kennt.", + "cookieBotInvalidPeriod": "Dieser Zeitraum ist ungültig. Verwenden Sie einen Monat wie 2026-08.", + "cookieBotSiteLimit": "Geben Sie zwischen {{min}} und {{max}} Websites ein, jeweils als vollständige http- oder https-Adresse.", + "cookieBotRequiresCloudSync": "Aktivieren Sie zuerst die Cloud-Synchronisierung für dieses Profil, da ein entfernter Host es sonst nicht erhalten kann.", + "cookieBotEncryptedSyncUnsupported": "Dieses Profil verwendet eine Ende-zu-Ende-verschlüsselte Synchronisierung, die ein entfernter Host nicht entschlüsseln kann. Stellen Sie es auf normale Synchronisierung um.", + "cookieBotUnknownPlatform": "Für dieses Profil ist kein Betriebssystem hinterlegt, daher kann ihm kein Host zugeordnet werden.", + "cookieBotUnsupportedPlatform": "Der Cookie Bot kann keine {{platform}}-Profile ausführen. Nur Windows-, macOS- und Linux-Profile werden unterstützt.", + "cookieBotRequiresExitNode": "Verknüpfen Sie zuerst einen Proxy oder ein VPN. Ohne diese käme der Durchlauf von einer Rechenzentrumsadresse, was der Identität des Profils schadet.", + "cookieBotRequiresRemoteExitNode": "Der Proxy dieses Profils funktioniert nur auf diesem Computer (zum Beispiel 127.0.0.1 oder eine Adresse im Heimnetz). Der Cookie Bot läuft auf unseren Hosts und benötigt daher einen Proxy mit öffentlicher Adresse.", + "cookieBotProxyKindUnsupported": "Dieses Profil verwendet einen {{kind}}-Proxy, der den Xray-Sidecar benötigt, den unsere Hosts nicht ausführen. Der Cookie Bot läuft auf unseren Hosts, verwenden Sie daher stattdessen einen HTTP-, HTTPS-, SOCKS- oder WireGuard-Exit.", + "unknownCode": "Etwas ist schiefgelaufen: {{code}}", + "cookieBotTouchFingerprintUnsupported": "Dieses Profil gibt sich als Touch-Gerät aus, das der Bot nicht steuern kann. Verwenden Sie einen Desktop-Fingerprint.", + "profileRunningRemotely": "Dieses Profil läuft auf einem entfernten Rechner. Stoppen Sie zuerst die Remote-Sitzung.", + "profileRemoteSyncPending": "Eine Remote-Sitzung wurde gerade beendet. Ihre Änderungen werden heruntergeladen, bevor dieses Profil hier geöffnet werden kann.", + "profileLockedByMember": "Dieses Profil wird von {{email}} verwendet.", + "profileLockedElsewhere": "Dieses Profil wird auf einem anderen Gerät verwendet.", + "profileLockUnavailable": "Es konnte nicht geprüft werden, ob dieses Profil an anderer Stelle verwendet wird. Prüfen Sie Ihre Verbindung und versuchen Sie es erneut.", + "fingerprintExitMismatch": "Der Exit-Node des Proxys passt nicht zum Fingerprint dieses Profils.", + "launchConsentExpired": "Diese Bestätigung ist nicht mehr gültig. Starten Sie erneut.", + "vpnWorkerStartFailed": "Die VPN-Verbindung konnte nicht gestartet werden: {{detail}}", + "exitProbeFailed": "Der Exit-Node des Proxys war nicht erreichbar, um seinen Standort zu prüfen.", + "vlessUnsupported": { + "security": "Dieser VLESS-Server verwendet kein REALITY. Donut unterstützt VLESS nur mit REALITY.", + "flow": "Dieser VLESS-Server verwendet keinen XTLS-Vision-Flow, den Donut benötigt.", + "transport": "Donut unterstützt VLESS nur über reines TCP. Dieser Server verwendet einen anderen Transport (z. B. WebSocket oder gRPC).", + "encryption": "Dieser VLESS-Server verwendet eine Verschlüsselungseinstellung, die Donut nicht unterstützt.", + "headerType": "Dieser VLESS-Server verwendet eine Header-Verschleierung, die Donut nicht unterstützt.", + "fingerprint": "Diese VLESS-URI fordert einen TLS-Fingerprint an, den Donut nicht unterstützt.", + "sni": "Der VLESS-URI fehlt die für REALITY benötigte SNI (sni).", + "publicKey": "Der VLESS-URI fehlt der öffentliche REALITY-Schlüssel (pbk).", + "scheme": "Das ist kein VLESS-Link. Er muss mit vless:// beginnen.", + "parameter": "Die VLESS-URI enthält eine Option, die Donut nicht unterstützt.", + "malformed": "Die VLESS-URI ist ungültig." + }, + "camoufoxRemoved": "Camoufox wird nicht mehr unterstützt. Erstellen Sie dieses Profil mit Wayfern neu.", + "noE2ePasswordSet": "Es ist kein Passwort für die Ende-zu-Ende-Verschlüsselung festgelegt. Legen Sie eines fest, bevor Sie verschlüsselte Daten synchronisieren.", + "importSourceNotChromium": "Dieser Ordner ist kein Chromium-Browserprofil", + "importSourceNotChromiumNamed": "{{family}}-Profile können nicht importiert werden; nur Chromium-basierte Browser werden unterstützt", + "importSourceBrowserRunning": "Schließen Sie zuerst {{browser}} oder importieren Sie trotzdem", + "wayfernFingerprintApplyFailed": "Der Fingerprint dieses Profils konnte nicht angewendet werden, daher wurde der Browser nicht gestartet. {{detail}}", + "wayfernFingerprintGenerationFailed": "Für dieses Profil konnte kein Fingerprint erstellt werden. {{detail}}", + "wayfernGenerationLimitReached": "Vorübergehendes Limit für die Fingerprint-Erzeugung erreicht. Versuchen Sie es später erneut.", + "wayfernCrossOsRequiresPlan": "Dieses Profil gibt {{detail}} an, was einen kostenpflichtigen Tarif und eine aktive Anmeldung erfordert. Melden Sie sich an oder stellen Sie das Profil auf Ihr eigenes Betriebssystem um.", + "wayfernIdentityRefused": "Der Browser ist nicht mit der Identität dieses Profils gestartet und wurde daher geschlossen. {{detail}}", + "wayfernInstanceLimitReached": "Für Ihren Tarif sind zu viele Browser geöffnet. Schließen Sie einen Browser und versuchen Sie es erneut.", + "wayfernPlanCheckUnavailable": "Ihr Tarif kann gerade nicht geprüft werden. Versuchen Sie es gleich noch einmal.", + "wayfernCustomFingerprintRequiresPlan": "Ihr Tarif umfasst keine benutzerdefinierten Fingerprints.", + "wayfernGenerationUnavailable": "Derzeit kann kein Fingerprint erstellt werden. Versuchen Sie es später erneut.", + "profileGenerationLimitReached": "Sie haben in der letzten Stunde 100 Profile erstellt, das ist das Limit im Pro-Tarif. Warten Sie etwa {{minutes}} Minuten, bevor Sie ein weiteres erstellen.", + "wayfernBrowserBusy": "Der Browser war mit dem Anwenden eines Fingerprints beschäftigt. Versuchen Sie es erneut.", + "wayfernBrowserExited": "Der Browser wurde beim Start geschlossen. {{detail}}", + "profileExportFailed": "Dieses Profil konnte nicht exportiert werden. {{detail}}", + "profileExportTooLarge": "Dieses Profil ist zu groß für den Export. Löschen Sie einen Teil seiner Browserdaten und versuchen Sie es erneut.", + "profileImportFailed": "Dieses Archiv konnte nicht gelesen werden. {{detail}}", + "profileImportTooNew": "Dieses Archiv wurde von einer neueren Version von Donut Browser erstellt. Aktualisieren Sie die App und versuchen Sie es erneut.", + "profileImportUnsafeArchive": "Dieses Archiv versucht, außerhalb des Profilordners zu schreiben, und wurde daher abgelehnt.", + "recordingAlreadyRunning": "Es läuft bereits eine Aufzeichnung. Stoppen Sie sie, bevor Sie eine neue starten.", + "profileNotRunning": "Starten Sie den Browser dieses Profils, bevor Sie aufzeichnen.", + "wayfern152Required": "Für die Aufzeichnung ist Wayfern 152 oder neuer erforderlich. Aktualisieren Sie den Browser für dieses Profil.", + "recordingFailed": "Die Aufzeichnung konnte nicht gestartet werden. {{detail}}", + "mcpRemoteRequiresSignIn": "Melden Sie sich bei Ihrem Donut-Konto an, bevor Sie die Fernsteuerung aktivieren.", + "mcpRemoteUnauthorized": "Die Donut-Cloud hat die Zugangsdaten dieses Geräts abgelehnt. Melden Sie sich ab und wieder an.", + "mcpRemoteSlotTaken": "Eine andere Donut-Instanz dieses Kontos ist bereits verbunden. Es kann immer nur eine Instanz ferngesteuert werden.", + "mcpRemoteNotEntitled": "Remote-MCP erfordert den Pro-Tarif oder höher.", + "mcpRemoteUnreachable": "Die Donut-Cloud ist gerade nicht erreichbar. Die Verbindung wird automatisch wiederhergestellt.", + "mcpRemoteKeyMissing": "Dieses Gerät hat noch keine Zugangsdaten für Remote-MCP. Erstellen Sie zuerst welche und fügen Sie den Client dann erneut hinzu.", + "mcpRemoteKeyLimit": "Dieses Konto hat bereits die maximale Anzahl an MCP-Zugangsdaten. Widerrufen Sie welche auf der Kontoseite und versuchen Sie es erneut.", + "mcpRemoteKeyUnavailable": "Die Donut-Cloud konnte gerade keine MCP-Zugangsdaten ausstellen. Versuchen Sie es gleich noch einmal.", + "urlSchemeNotAllowed": "Es können nur http- und https-Adressen geöffnet werden.", + "toolIsLocalOnly": "Diese Aktion benötigt eine Datei auf diesem Computer und kann daher nicht aus der Ferne ausgeführt werden.", + "typingTooLong": "Die Eingabe dieses Texts würde etwa {{seconds}} Sekunden dauern, eine einzelne Anfrage darf aber höchstens {{limit}} dauern. Senden Sie ihn in kleineren Teilen.", + "proxyTlsHandshakeFailed": "Es konnte keine TLS-Verbindung zu {{proxy}} hergestellt werden. Möglicherweise terminiert der Proxy auf diesem Port kein TLS, oder sein Zertifikat ist für diesen Hostnamen nicht gültig.", + "remoteNoCapacityPlatform": "Derzeit ist kein {{platform}}-Rechner frei. Versuchen Sie es in einer Minute erneut.", + "remoteNotConfigured": "Die entfernte Ausführung ist in dieser Bereitstellung nicht eingerichtet.", + "remoteLaunchRefused": "Der entfernte Host hat den Start dieser Sitzung abgelehnt. Bitte versuchen Sie es erneut.", + "remoteLaunchRefusedDetail": "Der entfernte Host hat den Start dieser Sitzung abgelehnt: {{detail}}", + "remoteFleetUnreachable": "Die entfernten Rechner haben nicht geantwortet. Versuchen Sie es in einer Minute erneut.", + "remoteConcurrencyLimit": "Für dieses Konto laufen bereits {{live}} von {{limit}} Remote-Sitzungen. Beenden Sie eine und versuchen Sie es erneut.", + "remoteSessionNotDrivable": "Diese Remote-Sitzung kann noch nicht gesteuert werden. Warten Sie, bis sie als aktiv gemeldet wird.", + "remotePlatformUnsupported": "Remote-Sitzungen laufen nur auf macOS-, Windows- oder Linux-Hosts. Die Plattform dieses Profils ist {{platform}}.", + "remoteProfileNotSynced": "Dieses Profil wurde noch nicht vollständig in die Cloud-Synchronisierung hochgeladen. Warten Sie, bis die erste Synchronisierung abgeschlossen ist, und versuchen Sie es dann erneut.", + "mcpLocalRemoved": "Der lokale MCP-Server von Donut wurde entfernt. MCP läuft jetzt remote und erfordert den Pro-Tarif oder höher.", + "trashEntryNotFound": "Dieses Profil befindet sich nicht mehr im Papierkorb.", + "trashRestoreConflict": "Es existiert bereits ein Profil mit derselben ID, daher kann dieses nicht wiederhergestellt werden.", + "agentNotEntitled": "Ihr Tarif umfasst den Agenten nicht.", + "agentNotConfigured": "Der Agent ist in dieser Bereitstellung noch nicht verfügbar.", + "agentTargetOffline": "Der Browser, den der Durchlauf benötigt, war nicht erreichbar.", + "agentBudgetExceeded": "Der Durchlauf wurde gestoppt, weil er eines seiner Limits erreicht hat.", + "agentRunLimitReached": "Sie haben bereits so viele laufende Durchläufe, wie Ihr Tarif erlaubt.", + "agentRunNotFound": "Dieser Durchlauf existiert nicht mehr.", + "agentRunNotCancellable": "Dieser Durchlauf ist bereits beendet.", + "agentGoalInvalid": "Das Ziel ist leer oder zu lang.", + "agentBudgetInvalid": "Eines der Limits ist keine verwendbare Zahl.", + "agentTokenProfileMismatch": "Dieser Durchlauf wurde für ein anderes Profil gestartet. Melden Sie sich erneut an und versuchen Sie es noch einmal.", + "agentRecipeInvalid": "Ein Rezept benötigt einen Namen und mindestens einen Schritt.", + "agentRecipeNotFound": "Dieses Rezept existiert nicht mehr.", + "profilePairedTwice": "Dieses Profil wurde in derselben Verteilung mehr als einmal aufgeführt", + "extensionUrlInvalid": "Das ist weder ein Chrome Web Store-Link noch eine Erweiterungs-ID noch ein direkter .crx- oder .zip-Link.", + "extensionDownloadFailed": "Die Erweiterung konnte nicht heruntergeladen werden. Prüfen Sie den Link und Ihre Verbindung.", + "extensionNotAnExtension": "Dieser Download ist keine Browsererweiterung.", + "extensionTooLarge": "Diese Erweiterung ist zu groß für den Import.", + "dataRootSameAsCurrent": "Das ist bereits das Datenverzeichnis.", + "dataRootDestinationInsideSource": "Wählen Sie einen Ordner außerhalb des aktuellen Datenverzeichnisses.", + "dataRootBrowserRunning": "Schließen Sie alle laufenden Browser, bevor Sie das Datenverzeichnis verschieben.", + "dataRootSyncInProgress": "Eine Synchronisierung läuft. Warten Sie, bis sie abgeschlossen ist, bevor Sie das Datenverzeichnis verschieben.", + "dataRootInsufficientSpace": "Nicht genügend Speicherplatz: {{required}} werden benötigt, aber nur {{available}} sind frei.", + "dataRootDestinationNotWritable": "In diesen Ordner kann nicht geschrieben werden. Wählen Sie einen anderen.", + "dataRootDestinationNotEmpty": "Dieser Ordner enthält bereits Dateien. Wählen Sie einen leeren Ordner.", + "dataRootMoveInProgress": "Es läuft bereits ein Verschiebevorgang.", + "dataRootCopyFailed": "Das Kopieren ist fehlgeschlagen, daher wurde nichts entfernt: {{detail}}", + "dataRootVerifyFailed": "Die Kopie stimmte nicht mit dem Original überein, daher wurde nichts entfernt. Ihre Daten liegen weiterhin am bisherigen Ort.", + "syncSessionNotFound": "Diese Sync-Sitzung wurde beendet.", + "syncFollowerNotFound": "Dieses Folgeprofil hat die Sitzung verlassen.", + "syncSessionUnavailable": "Die Sync-Sitzung ist gerade nicht erreichbar.", + "syncDisplayUnavailable": "Die Bildschirmgröße konnte nicht ermittelt werden, daher lassen sich die Fenster nicht anordnen.", + "syncDisplayTooSmall": "Der Bildschirm ist zu klein für {{windows}} Fenster in dieser Anordnung.", + "syncArrangeFailed": "Es konnte kein Fenster verschoben werden.", + "extensionPathInvalid": "Dieser Pfad ist nicht erlaubt: Er enthält „..“.", + "systemProxyUnreachable": "Donut konnte keine Verbindung über den System-Proxy {{proxy}} herstellen. Korrigieren oder deaktivieren Sie den Proxy in den Netzwerkeinstellungen Ihres Systems und versuchen Sie es erneut.", + "profileRouteRequired": "Dieses Profil hat keinen Proxy und kein VPN. Starts ohne diese sind unter Einstellungen > Datenschutz blockiert.", + "profileRouteUnavailable": "Der Proxy oder das VPN dieses Profils ist nicht verfügbar. Der Start wurde gestoppt, damit Ihre IP-Adresse verborgen bleibt. Weisen Sie dem Profil einen funktionierenden Proxy oder ein VPN zu." + }, + "rail": { + "profiles": "Profile", + "extensions": "Erweiterungen", + "groups": "Gruppen", + "settings": "Einstellungen", + "more": { + "label": "Mehr", + "closeAriaLabel": "Menü schließen", + "importProfile": "Profil importieren", + "importProfileHint": "Profile aus einem anderen Tool übernehmen", + "keyboardShortcuts": "Tastenkürzel", + "keyboardShortcutsHint": "Alle Tastenkürzel anzeigen", + "about": "Über Donut Browser", + "aboutHint": "Version und App-Informationen", + "trash": "Papierkorb", + "trashHint": "Gelöschte Profile wiederherstellen", + "tips": "Tipps", + "tipsHint": "Funktionen Schritt für Schritt" + }, + "network": "Netzwerk", + "integrations": "Integrationen", + "account": "Konto", + "cookieBot": "Cookie Bot", + "cookieBotRunning": "Cookie Bot: läuft gerade", + "agent": "Agent" + }, + "pageTitle": { + "proxies": "Netzwerk", + "extensions": "Erweiterungen", + "groups": "Gruppen", + "vpns": "Netzwerk", + "settings": "Einstellungen", + "integrations": "Integrationen", + "account": "Konto", + "import": "Profil importieren", + "shortcuts": "Tastenkürzel", + "cookieBot": "Cookie Bot", + "trash": "Papierkorb", + "agent": "Agent" + }, + "encryption": { + "required": { + "title": "Synchronisierung pausiert: Passwort erforderlich", + "description": "Es wurden verschlüsselte Daten heruntergeladen, aber auf diesem Gerät ist kein E2E-Passwort festgelegt. Öffnen Sie Einstellungen → Verschlüsselung und geben Sie das Passwort ein, um die Synchronisierung fortzusetzen.", + "openSettings": "Einstellungen öffnen" + }, + "rollover": { + "startedTitle": "Ihre Daten werden neu verschlüsselt", + "startedDescription": "Alle synchronisierten Elemente werden mit dem neuen Passwort erneut hochgeladen. Zuerst Profile, dann Proxys, Gruppen, VPNs und Erweiterungen.", + "progressTitle": "{{stage}} werden neu verschlüsselt", + "progressDescription": "{{done}} von {{total}}", + "completedTitle": "Neuverschlüsselung abgeschlossen", + "completedDescription": "Alle synchronisierten Daten sind mit dem neuen Passwort gesichert.", + "stage": { + "profiles": "Profile", + "proxies": "Proxys", + "groups": "Gruppen", + "vpns": "VPNs", + "extensions": "Erweiterungen", + "extension_groups": "Erweiterungsgruppen" + } + } + }, + "account": { + "refreshed": "Konto aktualisiert", + "loggedOut": "Abgemeldet", + "signedOut": "Abgemeldet", + "signedOutDescription": "Melden Sie sich an, um Cloud-Synchronisierung, verschlüsselte Profile und Team-Funktionen zu nutzen.", + "plan": "Tarif: {{plan}} · {{period}}", + "teamSeat": "Platz als {{role}} in {{team}}", + "teamSeatUnnamed": "Platz als {{role}} in einem Team", + "refresh": "Aktualisieren", + "logout": "Abmelden", + "signIn": "Anmelden", + "fields": { + "plan": "Tarif", + "status": "Status", + "teamRole": "Rolle im Team", + "period": "Abrechnungszeitraum", + "device": "Gerät" + }, + "tabs": { + "account": "Konto", + "selfHosted": "Selbst gehostet", + "teamUsage": "Team-Nutzung" + }, + "selfHosted": { + "title": "Selbst gehosteter Sync-Server", + "description": "Verbinden Sie Donut mit Ihrem eigenen donut-sync-Server, um Profile, Proxys, Gruppen und Erweiterungen ohne die gehostete Cloud zu synchronisieren.", + "disabledWhileLoggedIn": "Die selbst gehostete Synchronisierung ist nicht verfügbar, solange Sie bei Ihrem Donut-Konto angemeldet sind. Melden Sie sich ab, um einen eigenen Server zu verwenden.", + "connectionStatus": "Verbindung:", + "statusUnknown": "Nicht getestet", + "testConnection": "Verbindung testen", + "disconnect": "Trennen" + }, + "deviceOrdinal": "{{ordinal}} von {{count}}", + "automationPrimaryOnly": "Die Browser-Automatisierung läuft nur auf Ihrem Hauptgerät (Gerät 1). Melden Sie sich dort ab, um sie hier zu nutzen.", + "automationActiveHere": "Die Browser-Automatisierung ist auf diesem Gerät aktiv.", + "viewTeamUsage": "Team-Nutzung anzeigen" + }, + "shortcutsPage": { + "title": "Tastenkürzel", + "description": "Arbeiten Sie mit diesen Tastenkürzeln schneller." + }, + "commandPalette": { + "placeholder": "Befehl eingeben oder suchen...", + "empty": "Keine Ergebnisse gefunden.", + "groups": { + "navigation": "Navigation", + "profiles": "Profile", + "actions": "Aktionen", + "profileGroups": "Profilgruppen" + }, + "actions": { + "launchProfile": "{{name}} starten", + "stopProfile": "{{name}} stoppen", + "profileInfo": "Info: {{name}}", + "createProfile": "Profil erstellen", + "about": "Über Donut Browser" + } + }, + "shortcuts": { + "openPalette": "Befehlspalette öffnen", + "openShortcuts": "Tastenkürzel anzeigen", + "importProfile": "Profil importieren", + "goProfiles": "Zu „Profile“ wechseln", + "goProxies": "Zu „Netzwerk“ wechseln", + "goExtensions": "Zu „Erweiterungen“ wechseln", + "goGroups": "Zu „Gruppen“ wechseln", + "goIntegrations": "Zu „Integrationen“ wechseln", + "goAccount": "Zu „Konto“ wechseln", + "goSettings": "Zu „Einstellungen“ wechseln", + "goCookieBot": "Cookie Bot", + "goTrash": "Zum Papierkorb wechseln", + "goAgent": "Zu „Agent“ wechseln", + "openTips": "Tipps öffnen" + }, + "closeConfirm": { + "title": "Donut Browser schließen?", + "description": "Möchten Sie die App in den Infobereich verschieben oder beenden?", + "minimize": "In den Infobereich minimieren", + "quit": "Beenden" + }, + "tray": { + "show": "Donut Browser anzeigen", + "quit": "Beenden" + }, + "onboarding": { + "steps": { + "createProfile": { + "title": "Erstellen Sie Ihr erstes Profil", + "content": "Klicken Sie hier, um Ihr erstes Profil zu erstellen. Wählen Sie Wayfern als Browser: das empfohlene Chromium mit Fingerprint-Schutz." + }, + "dnsBlocking": { + "title": "DNS-Blockierung", + "content": "Legen Sie mit diesem Dropdown eine DNS-Sperrstufe für das Profil fest. Sie blockiert Werbung, Tracker und Malware auf Netzwerkebene. Höhere Stufen blockieren mehr." + } + }, + "buttons": { + "skip": "Überspringen", + "back": "Zurück", + "next": "Weiter", + "finish": "Fertig" + }, + "thankYou": { + "title": "Danke, dass Sie sich für Donut Browser entschieden haben", + "body": "Wir hoffen, dass Ihr Surfen damit privater wird: Jede Identität bleibt für sich, und nichts verlässt Ihren Rechner. Viel Spaß.", + "cta": "Lossurfen" + } + }, + "welcome": { + "title": "Willkommen bei Donut Browser", + "tagline": "Ein Open-Source-Anti-Detect-Browser, mit dem Sie viele Identitäten gleichzeitig verwalten.", + "skip": "Überspringen", + "next": "Weiter", + "permissions": { + "title": "Mikrofon & Kamera erlauben", + "desc": "Erteilen Sie den Zugriff, damit Websites, die ein Mikrofon oder eine Kamera brauchen, in Ihren Browserprofilen funktionieren. macOS fragt einmal; jede Website fragt Sie trotzdem einzeln.", + "skip": "Nicht jetzt", + "grant": "Zugriff erlauben", + "requesting": "Wird angefordert…" + }, + "ready": { + "title": "Alles wird eingerichtet", + "descDownloading": "Ihr erster Browser (Wayfern) wird heruntergeladen. Diese einmalige Einrichtung läuft im Hintergrund. Einen Moment Geduld.", + "descReady": "Ihr Browser ist bereit. Erstellen wir Ihr erstes Profil.", + "cta": "Mein erstes Profil erstellen", + "downloading": "Wird heruntergeladen…", + "extracting": "Wird entpackt…", + "stats": "{{downloaded}} von {{total}}", + "speed": "{{speed}}/s", + "timeLeft": "Noch {{time}}", + "descExtracting": "Ihr Browser wird entpackt. Diese einmalige Einrichtung läuft im Hintergrund. Einen Moment Geduld.", + "almostFinished": "Fast fertig…", + "errorTitle": "Einrichtung fehlgeschlagen", + "errorDownload": "{{browser}} konnte nicht heruntergeladen werden. Prüfen Sie Ihre Verbindung und versuchen Sie es erneut.", + "errorExtraction": "{{browser}} konnte nicht entpackt werden. Bitte versuchen Sie es erneut.", + "errorGeneric": "Beim Einrichten von {{browser}} ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.", + "retry": "Erneut versuchen" + }, + "features": { + "title": "Funktionen", + "items": { + "setDefault": "Als Standardbrowser festlegen", + "proxy": "Proxy-Unterstützung (HTTP/SOCKS5)", + "vpn": "VPN-Unterstützung (WireGuard)", + "profiles": "Unbegrenzt lokale Profile", + "api": "API zur Profilverwaltung", + "openSource": "Open Source", + "groups": "Profilgruppen", + "cookies": "Cookie-Import & -Export" + } + }, + "license": { + "title": "Lizenzierung", + "body": "Donut Browser ist Open Source und kostenlos nutzbar.", + "agree": "Verstanden", + "personalTitle": "Private Nutzung", + "personalDesc": "Für immer kostenlos.", + "commercialTitle": "Kommerzielle Nutzung", + "trialBadge": "2 Wochen kostenlos", + "commercialDesc": "Zwei Wochen kostenlos zum Testen. Danach sorgt ein kostenpflichtiger Tarif dafür, dass das Projekt gepflegt wird und weiter wächst." + } + }, + "wayfernBlocked": { + "title": "Browser-Automatisierung pausiert", + "description": "Die Browser-Automatisierung läuft immer nur auf einem Gerät, und ein anderes angemeldetes Gerät nutzt sie gerade. Melden Sie sich dort ab und starten Sie das Profil dann neu." + }, + "profileGenerationLimit": { + "title": "Stündliches Profillimit erreicht", + "description": "Ihr Pro-Tarif erlaubt 100 neue Profile pro Stunde. Das Erstellen ist bis zur nächsten vollen Stunde pausiert, Ihr Konto ist also nicht gesperrt." + }, + "wayfernConfigDialog": { + "titleView": "Fingerprint-Einstellungen anzeigen - {{name}} ({{browser}})", + "titleConfigure": "Fingerprint-Einstellungen konfigurieren - {{name}} ({{browser}})", + "invalidFingerprint": "Ungültige Fingerprint-Konfiguration", + "invalidFingerprintDescription": "Die Fingerprint-Konfiguration enthält ungültiges JSON. Bitte prüfen Sie Ihre erweiterten Einstellungen.", + "saveFailed": "Die Konfiguration konnte nicht gespeichert werden", + "unknownError": "Ein unbekannter Fehler ist aufgetreten" + }, + "cookieCopy": { + "noOtherTargets": "Keine anderen Wayfern-Profile ausgewählt" + }, + "about": { + "title": "Über", + "version": "Version {{version}}", + "portableBadge": "portabel", + "licenseNotice": "Open-Source-Anti-Detect-Browser.", + "website": "Website", + "github": "GitHub", + "licenses": "Lizenzen", + "searchLicenses": "Lizenzen suchen…", + "noMatchingLicenses": "Keine passenden Lizenzen.", + "openSource": "Quellcode von {{name}} anzeigen", + "snack": { + "found": "Sie haben die Snack-Schublade gefunden.", + "finished": "Nur Krümel. Keine Cookies.", + "takeBite": "Abbeißen", + "again": "Noch ein Donut" + } + }, + "clearOnClose": { + "label": "Daten beim Schließen löschen", + "description": "Löscht Cookies, Verlauf und Cache, wenn der Browser geschlossen wird. Erweiterungen und Lesezeichen bleiben erhalten." + }, + "consistencyWarning": { + "timezoneDetail": "Der Exit-Node liegt in {{exit}}, aber der Fingerprint meldet {{fingerprint}}.", + "languageDetail": "Das Exit-Land ist {{country}}, aber die Sprache des Fingerprints ist {{fingerprint}}.", + "explainer": "Eine Zeitzone oder Sprache, die nicht zu Ihrer Exit-IP passt, ist ein starkes Signal für Anti-Bot-Systeme, auch wenn Ihr echtes Gerät nie preisgegeben wird. Passen Sie den Fingerprint an den Proxy-Standort an, um feindselige Behandlung zu vermeiden.", + "matchToProxy": "Fingerprint an Proxy anpassen", + "matching": "Wird angepasst…", + "matchSuccess": "Fingerprint an den Proxy angepasst. Starten Sie das Profil neu, um die Änderung zu übernehmen.", + "unverifiedTitle": "Nichts wurde mit dem Exit abgeglichen", + "unverifiedTimezoneDetail": "Der Exit liegt in {{exit}}, aber der Fingerprint dieses Profils gibt keine Zeitzone an, daher wurde nichts verglichen.", + "unverifiedLanguageDetail": "Das Exit-Land ist {{country}}, aber die Sprache des Fingerprints dieses Profils konnte damit nicht verglichen werden." + }, + "cookieBot": { + "title": "Cookie Bot", + "description": "Nächtliches Aufwärmen von Profilen auf einem entfernten Rechner.", + "tabs": { + "overview": "Übersicht", + "schedule": "Zeitplan", + "activity": "Aktivität", + "team": "Team" + }, + "locked": { + "title": "Cookie Bot", + "hint": "Der Cookie Bot wärmt Ihre Profile nachts auf einem entfernten Rechner auf, damit sie ihre Cookies und ihren Verlauf behalten, ohne dass Ihr Computer eingeschaltet sein muss." + }, + "empty": { + "title": "Keine Profile aufgenommen", + "hint": "Wählen Sie ein Profil, und der Bot wärmt es nachts auf einem entfernten Rechner auf. Ihr Computer kann ausgeschaltet sein.", + "cta": "Profil aufnehmen" + }, + "tonight": { + "label": "Heute Nacht", + "nextRun": "Nächster Durchlauf {{time}}", + "dueCount_one": "{{count}} Profil fällig", + "dueCount_other": "{{count}} Profile fällig", + "nothingScheduled": "Nichts geplant" + }, + "lastDay": { + "label": "Letzte 24 Stunden", + "none": "Noch keine Durchläufe", + "ran_one": "{{count}} ausgeführt", + "ran_other": "{{count}} ausgeführt", + "partial_one": "{{count}} teilweise", + "partial_other": "{{count}} teilweise", + "failed_one": "{{count}} fehlgeschlagen", + "failed_other": "{{count}} fehlgeschlagen" + }, + "chart": { + "machineTime": "Rechnerzeit pro Nacht", + "minutes": "{{minutes}} min" + }, + "hours": { + "label": "Remote-Stunden", + "remaining": "Noch {{remaining}} h von {{total}}", + "remainingOf": "von {{total}} h", + "used": "{{used}} von {{total}} h verbraucht", + "resets": "Wird am {{date}} zurückgesetzt", + "exhausted": "Keine Remote-Stunden mehr übrig. Die Zeitpläne bleiben erhalten und werden im nächsten Zeitraum fortgesetzt.", + "exhaustedOn": "Keine Remote-Stunden mehr übrig. Die Zeitpläne bleiben erhalten und werden am {{date}} fortgesetzt.", + "estimate": "Etwa {{hours}} h pro Woche · noch {{remaining}} h in diesem Zeitraum", + "estimateOverBudget": "Benötigt etwa {{hours}} h pro Woche, aber nur noch {{remaining}} h übrig", + "estimateOnly": "Etwa {{hours}} h pro Woche" + }, + "enrolled": { + "columnProfile": "Profil", + "columnCadence": "Rhythmus", + "columnTime": "Uhrzeit", + "columnNextRun": "Nächster Durchlauf", + "columnLastRun": "Letzter Durchlauf", + "enrolProfiles": "Profile aufnehmen", + "edit": "Zeitplan bearbeiten", + "neverRun": "Nie", + "pausedNoHours": "Pausiert: keine Stunden mehr", + "profileMissing": "Dieses Profil ist nicht auf diesem Computer." + }, + "schedule": { + "empty": "Noch nichts geplant.", + "unenrol": "Aus dem Cookie Bot entfernen", + "unenrolTitle": "{{name}} aus dem Cookie Bot entfernen?", + "unenrolDescription": "Das Aufwärmen endet ab heute Nacht. Frühere Durchläufe bleiben unter „Aktivität“ erhalten.", + "unenrolled": "Aus dem Cookie Bot entfernt" + }, + "status": { + "provisioning": "Rechner wird vorbereitet", + "ready": "Profil wird geladen", + "warming": "Wird aufgewärmt", + "finished": "Wird abgeschlossen", + "failed": "Fehlgeschlagen" + }, + "runStatus": { + "pending": "In Warteschlange", + "running": "Läuft", + "succeeded": "Abgeschlossen", + "partial": "Teilweise", + "failed": "Fehlgeschlagen", + "skipped": "Übersprungen", + "cancelled": "Gestoppt" + }, + "running": { + "label": "Läuft gerade", + "more": "+{{count}} weitere", + "stop": "Durchlauf stoppen", + "stopped": "Durchlauf gestoppt" + }, + "live": { + "idle": "Gerade läuft nichts", + "streamOffline": "Live-Updates sind offline", + "streamOfflineDetail": "Live-Updates sind offline, die Verbindung wird wiederhergestellt. Die Durchläufe unten sind eventuell nicht aktuell.", + "unnamedSession": "Remote-Sitzung", + "notStartedYet": "Der Rechner hat noch keine Startzeit gemeldet.", + "sitesProgress": "{{visited}} von {{total}} Websites", + "sitesUnknown": "Websites noch nicht gemeldet", + "consentHandled_one": "{{count}} Einwilligungsabfrage bearbeitet", + "consentHandled_other": "{{count}} Einwilligungsabfragen bearbeitet", + "consentUnknown": "Einwilligungsabfragen noch nicht gemeldet", + "billed": "{{duration}} abgerechnet", + "billedUnknown": "Abgerechnete Zeit noch nicht gemeldet", + "chunk": "Teil {{index}} von {{total}}" + }, + "history": { + "title": "Durchläufe", + "allProfiles": "Alle Profile", + "searchPlaceholder": "Profile durchsuchen…", + "filterAll": "Alle Durchläufe", + "filterComplete": "Abgeschlossen", + "filterPartial": "Teilweise", + "filterFailed": "Fehlgeschlagen", + "columnStarted": "Gestartet", + "columnProfile": "Profil", + "columnDuration": "Dauer", + "columnSites": "Websites", + "columnStatus": "Status", + "columnOperator": "Ausgelöst von", + "empty": "Noch keine Durchläufe.", + "noMatch": "Keine Durchläufe entsprechen diesem Filter.", + "unknownProfile": "Unbekanntes Profil", + "outcome": "Grund: {{reason}}", + "sitesVisited": "{{visited}}/{{total}}", + "sitesFailed_one": "{{count}} Website war nicht erreichbar", + "sitesFailed_other": "{{count}} Websites waren nicht erreichbar", + "consentHandled_one": "{{count}} Einwilligungsabfrage bearbeitet", + "consentHandled_other": "{{count}} Einwilligungsabfragen bearbeitet", + "sitesUnknown": "Nicht gemeldet" + }, + "duration": { + "hm": "{{hours}} h {{minutes}} min", + "ms": "{{minutes}} min {{seconds}} s", + "s": "{{seconds}} s" + }, + "picker": { + "title": "Profile aufnehmen", + "description": "Wählen Sie die Profile, die der Bot nachts aufwärmen soll.", + "searchPlaceholder": "Profile durchsuchen…", + "noProfiles": "Keine passenden Profile.", + "alreadyEnrolled": "Aufgenommen", + "continue_one": "Weiter mit {{count}}", + "continue_other": "Weiter mit {{count}}" + }, + "enrol": { + "titleOne": "{{name}} aufnehmen", + "titleCount_one": "{{count}} Profil aufnehmen", + "titleCount_other": "{{count}} Profile aufnehmen", + "editTitle": "Zeitplan bearbeiten", + "description": "Der Bot öffnet das Profil auf einem entfernten Rechner und besucht die von Ihnen angegebenen Websites. Ihr Computer kann ausgeschaltet sein.", + "summaryNightly": "Läuft jede Nacht um {{time}}, jeweils bis zu {{minutes}} min.", + "summaryWeeknights": "Läuft Montag bis Freitag um {{time}}, jeweils bis zu {{minutes}} min.", + "summaryAlternate": "Läuft jede zweite Nacht um {{time}}, jeweils bis zu {{minutes}} min.", + "summaryCustom_one": "Läuft {{count}} Nacht pro Woche um {{time}}, jeweils bis zu {{minutes}} min.", + "summaryCustom_other": "Läuft {{count}} Nächte pro Woche um {{time}}, jeweils bis zu {{minutes}} min.", + "confirm": "Ab heute Nacht aufnehmen", + "confirmSome": "{{eligible}} von {{total}} ab heute Nacht aufnehmen", + "fixFirst": "Zuerst diese Punkte beheben", + "saving": "Wird aufgenommen…", + "saved": "Zeitplan gespeichert", + "enrolled_one": "{{count}} Profil aufgenommen", + "enrolled_other": "{{count}} Profile aufgenommen", + "adjust": "Zeitplan anpassen", + "cadenceLabel": "Rhythmus", + "cadenceNightly": "Jede Nacht", + "cadenceWeeknights": "Werktags nachts", + "cadenceAlternate": "Jede zweite Nacht", + "cadenceCustom_one": "{{count}} Nacht pro Woche", + "cadenceCustom_other": "{{count}} Nächte pro Woche", + "timeLabel": "Startzeit", + "timeHint": "Bezogen auf die Fingerprint-Zeitzone des jeweiligen Profils.", + "maxMinutesLabel": "Max. Minuten", + "intensityLabel": "Tiefe", + "sitesLabel": "Websites", + "sitesPlaceholder": "Eine Adresse pro Zeile", + "sitesHint_one": "{{count}} Website. Es werden nur die hier aufgeführten Seiten besucht.", + "sitesHint_other": "{{count}} Websites. Es werden nur die hier aufgeführten Seiten besucht.", + "sitesTooMany": "Höchstens {{max}} Websites.", + "presetsUnavailable": "Die Tiefenvorgaben konnten nicht geladen werden. Versuchen Sie es gleich noch einmal.", + "confirmBulkTitle_one": "{{count}} Profil in den Cookie Bot aufnehmen?", + "confirmBulkTitle_other": "{{count}} Profile in den Cookie Bot aufnehmen?", + "confirmBulkDescription_one": "Dafür wird ein nächtlicher Durchlauf von Ihren gemeinsamen Remote-Stunden gebucht. Uhrzeit und Websites wählen Sie im nächsten Schritt.", + "confirmBulkDescription_other": "Dafür werden {{count}} nächtliche Durchläufe von Ihren gemeinsamen Remote-Stunden gebucht. Uhrzeit und Websites wählen Sie im nächsten Schritt.", + "confirmBulkButton_one": "Weiter mit {{count}} Profil", + "confirmBulkButton_other": "Weiter mit {{count}} Profilen", + "sitesRequired": "Fügen Sie mindestens eine Website hinzu.", + "addSitesFirst": "Zuerst eine Website hinzufügen", + "presetsMissing": "Tiefenvorgaben nicht verfügbar", + "sourceOwn": "Eigene Liste", + "sourceCurated": "Kuratiert", + "sourceSaved": "Gespeichert", + "curatedEmpty": "Derzeit sind keine kuratierten Listen verfügbar.", + "curatedNote": "Eine kuratierte Liste, die wir aktuell halten. Jedes Profil zieht daraus eine eigene Stichprobe, sodass keine zwei Profile dieselben Websites besuchen. Genau das verhindert, dass die Liste selbst zur Signatur wird. Die Adressen bleiben bei uns.", + "savedEmpty": "Noch nichts gespeichert. Geben Sie unter „Eigene Liste“ eine Liste ein und speichern Sie sie dort.", + "savedNote": "Die Websites werden beim Speichern in den Zeitplan kopiert. Spätere Änderungen an einer Liste wirken sich daher nicht auf bestehende Zeitpläne aus.", + "savedUnavailable": "Ihre gespeicherten Listen konnten nicht geladen werden.", + "saveAsList": "Als Liste speichern", + "listNamePlaceholder": "Name der Liste", + "listSaved": "Liste gespeichert", + "listRenamed": "Liste umbenannt", + "listDeleted": "Liste gelöscht", + "listRename": "Umbenennen", + "listDeleteConfirm": "Löschen?", + "templateMissing": "Diese gespeicherte Liste existiert nicht mehr. Wählen Sie eine andere.", + "templateNameTaken": "Sie haben bereits eine Liste mit diesem Namen.", + "templateNameInvalid": "Geben Sie der Liste einen Namen mit höchstens {{max}} Zeichen.", + "calendarLabel": "Ausführungszeiten", + "daysLabel": "Wochentage", + "addSlot": "Uhrzeit hinzufügen", + "slotsFull": "Höchstens {{max}} Startzeiten.", + "removeSlot": "Diese Uhrzeit entfernen", + "pickListFirst": "Zuerst eine Liste wählen", + "finishCalendarFirst": "Zuerst den Zeitplan abschließen", + "duplicateSlot": "Zwei Zeilen haben dieselben Tage und dieselbe Uhrzeit", + "listSites_one": "{{count}} Website", + "listSites_other": "{{count}} Websites", + "summarySlots_one": "Läuft {{count}}-mal pro Woche, jeweils bis zu {{minutes}} min.", + "summarySlots_other": "Läuft {{count}}-mal pro Woche, jeweils bis zu {{minutes}} min.", + "templateNameInvalidNoMax": "Dieser Name kann für eine gespeicherte Liste nicht verwendet werden." + }, + "preset": { + "light": "Leicht", + "balanced": "Standard", + "deep": "Gründlich" + }, + "template": { + "lowIntentPurchaser": "Käufer mit geringer Kaufabsicht", + "lowIntentPurchaserHint": "Positioniert das Profil als preisbewussten Käufer: Vergleichs-, Gutschein-, Cashback- und Wiederverkaufsseiten, wobei Händler über Aggregatoren statt direkt aufgerufen werden." + }, + "preflight": { + "ineligible_one": "{{count}} Profil kann nicht remote ausgeführt werden", + "ineligible_other": "{{count}} Profile können nicht remote ausgeführt werden", + "reasonSync": "Sync ist aus", + "reasonEncrypted": "Ende-zu-Ende-verschlüsselt", + "reasonNoFingerprint": "Kein Betriebssystem hinterlegt", + "reasonCrossOs": "Für {{os}} erstellt, kein passender entfernter Rechner", + "reasonNoExitNode": "Kein Proxy oder VPN", + "fixSync": "Sync aktivieren", + "fixEncrypted": "Sync-Einstellungen öffnen", + "fixProxy": "Proxy verknüpfen", + "fixFailed": "Diese Korrektur konnte nicht angewendet werden.", + "exitNodeHint": "Ohne Proxy oder VPN geht der Durchlauf von der eigenen Rechenzentrumsadresse der Remote-Rechner aus. Stundenlanger Datenverkehr aus einem Hosting-Netz schadet der Identität des Profils mehr, als es gar nicht aufzuwärmen." + }, + "conflict": { + "title": "{{email}} wärmt dieses Profil bereits um {{time}} auf", + "detail": "Zwei Zeitpläne für ein Profil verbrauchen doppelt Stunden und können sich mitten im Durchlauf überschneiden.", + "keepTheirs": "Deren Zeitplan verwenden", + "replace": "Durch meinen ersetzen", + "replaceForbidden": "Nur ein Team-Inhaber oder Admin kann den Zeitplan einer anderen Person ändern.", + "askThem": "{{email}} kopieren", + "emailCopied": "E-Mail-Adresse kopiert", + "copyFailed": "Die Adresse konnte nicht kopiert werden." + }, + "actionBar": { + "enrol": "In den Cookie Bot aufnehmen", + "proRequired": "Der Cookie Bot erfordert einen kostenpflichtigen Tarif", + "noneEligible": "Keines der ausgewählten Profile kann remote aufgewärmt werden" + }, + "actions": { + "enrol": "In den Cookie Bot aufnehmen", + "editSchedule": "Zeitplan bearbeiten", + "runNow": "Jetzt ausführen", + "runStarted": "Durchlauf gestartet", + "viewActivity": "Aktivität anzeigen", + "runNotStarted": "Der Durchlauf wurde nicht gestartet: {{reason}}" + }, + "state": { + "enrolled": "Aufgenommen", + "notEnrolled": "Nicht aufgenommen", + "paused": "Pausiert", + "summary": "{{cadence}} um {{time}}", + "rowMenu": "Cookie-Bot-Optionen für {{name}}", + "blocked": "Ausführung nicht möglich: {{reason}}" + }, + "team": { + "title": "Team-Nutzung", + "pooled_one": "{{used}} von {{total}} h, {{count}} Platz", + "pooled_other": "{{used}} von {{total}} h, gemeinsam für {{count}} Plätze", + "hours": "{{hours}} h", + "legendBot": "Cookie Bot", + "legendInteractive": "Interaktiv", + "columnMember": "Mitglied", + "columnRuns": "Durchläufe", + "columnHours": "Stunden", + "columnShare": "Anteil", + "noActivity": "Keine Remote-Sitzungen in diesem Zeitraum.", + "soloNote": "Bisher nur Ihre eigene Nutzung. Laden Sie Teammitglieder ein, um die Aufteilung nach Mitglied zu sehen.", + "runsFailed": "· {{n}} fehlgeschlagen" + }, + "closeReason": { + "stoppedByUser": "Manuell gestoppt", + "maxDuration": "Zeitlimit erreicht", + "other": "Beendet: {{reason}}" + }, + "outcome": { + "notEntitled": "Nicht in Ihrem Tarif enthalten", + "syncDisabled": "Die Cloud-Synchronisierung ist für dieses Profil deaktiviert", + "encryptedSync": "Ende-zu-Ende-verschlüsselte Synchronisierung wird nicht unterstützt", + "proxyRequired": "Kein Proxy oder VPN verknüpft", + "proxyLocalOnly": "Der Proxy funktioniert nur auf diesem Computer, verknüpfen Sie daher einen mit öffentlicher Adresse", + "touchFingerprint": "Touch-Fingerprints werden nicht unterstützt", + "platformUnsupported": "Kein Rechner führt das System dieses Profils aus", + "noSites": "Keine Websites zum Besuchen", + "quotaExhausted": "Remote-Stunden aufgebraucht", + "profileLocked": "Das Profil war an anderer Stelle geöffnet", + "noCapacity": "Kein Rechner war frei", + "managerError": "Die Remote-Rechner konnten den Browser nicht starten", + "budgetExceeded": "Das Budget der Nacht war aufgebraucht", + "browsingIncomplete": "Der Browser wurde geöffnet, aber das nächtliche Surfen wurde nicht abgeschlossen", + "proxyUnsupported": "Kein Host kann diesen Proxytyp verwenden, nutzen Sie daher einen HTTP-, SOCKS- oder WireGuard-Exit", + "profileNotSynced": "Die Cloud-Kopie ist unvollständig, schließen Sie daher die Synchronisierung dieses Profils auf einem Desktop ab", + "profileOsMismatch": "Das Profil stammt von einem anderen Betriebssystem als der Host, der es ausgeführt hat", + "cancelledByUser": "Manuell gestoppt", + "unknown": "Unbekannter Grund ({{code}})" + } + }, + "prelaunchGate": { + "titleBlocked": "Start blockiert", + "titleWarning": "Vor dem Start", + "intro": "Prüfen Sie diese Probleme mit „{{name}}“, bevor Sie den Browser starten.", + "fingerprintHeading": "Der gemessene Exit passt nicht zum Fingerprint", + "vpnExtensionHeading": "VPN- oder Proxy-Erweiterung erkannt", + "vpnExtensionIntro": "Erweiterungen in diesem Profil, die den Datenverkehr des Browsers umleiten können:", + "vpnExtensionConfirmed": "Bekanntes VPN- oder Proxy-Tool", + "vpnExtensionLikely": "Sieht aus wie ein VPN- oder Proxy-Tool", + "vpnExtensionCapability": "Besitzt die Proxy-Berechtigung", + "vpnExtensionExplainer": "Wenn eine davon Ihren Datenverkehr umleitet, passt der tatsächliche Standort des Browsers nicht mehr zu Zeitzone, Sprache und Geolokalisierung, mit denen dieses Profil erstellt wurde, und Donut kann das von außen nicht erkennen.", + "proxyCapableHeading": "Erweiterungen, die den Proxy ändern können", + "proxyCapableIntro": "Diese sehen nicht wie VPNs aus, besitzen aber die Proxy-Berechtigung von Chromium, die auch Download-Manager und Debugging-Tools benötigen. Donut kann nicht erkennen, ob eine davon sie nutzt:", + "sourceDonut": "Von Donut verwaltet", + "sourceBrowser": "Im Profil installiert", + "measurementUnreliable": "Eine Erweiterung in diesem Profil besitzt die Proxy-Berechtigung, daher beschreibt die Exit-Prüfung eventuell nicht die Route, die der Browser tatsächlich nimmt.", + "scanIncompleteEncrypted": "Dieses Profil ist verschlüsselt, daher konnten nur von Donut verwaltete Erweiterungen geprüft werden.", + "scanIncompleteEphemeral": "Dieses Profil hat noch keine Daten, daher konnten nur von Donut verwaltete Erweiterungen geprüft werden.", + "scanIncompletePartial": "Die Suche nach Erweiterungen wurde vorzeitig beendet, daher fehlen eventuell einige Erweiterungen in der Liste.", + "probePending": "Der Proxy-Exit wurde noch nicht gemessen. Donut prüft ihn beim Start und bricht ab, wenn er nicht passt.", + "launchAnyway": "Trotzdem starten", + "dontBlockAgain": "Bei genau dieser Abweichung nicht mehr blockieren", + "dontWarnExtensions": "Bei diesen Erweiterungen nicht mehr warnen", + "applyToRemaining": "Diese Auswahl auf die übrigen Profile anwenden", + "cancelledSummary": "{{cancelled}} von {{total}} Starts abgebrochen", + "vpnExtensionEntry": " {{version}} · {{capability}}, {{source}}", + "vpnExtensionEntryNoVersion": " · {{capability}}, {{source}}", + "scanIncompleteMissing": "Dieses Profil wurde noch nie gestartet, daher konnten nur von Donut verwaltete Erweiterungen geprüft werden.", + "exitUnverifiedTimezone": "Der Fingerprint dieses Profils gibt keine Zeitzone an, daher kann die Exit-Prüfung keine verifizieren. Der Start wird nicht blockiert, es wurde aber auch nichts verglichen.", + "exitUnverifiedLanguage": "Die Sprache des Fingerprints dieses Profils lässt sich nicht mit dem Exit-Land vergleichen, daher ist diese Prüfung nicht verifiziert statt bestanden." + }, + "profileMotion": { + "inspectorSections": "Profilbereiche", + "dragHandle": "{{name}} in eine Gruppe verschieben", + "dragHint": "Ziehen Sie auf eine Gruppe oder klicken Sie, um eine auszuwählen. Escape bricht ab.", + "dragSelection": "Ausgewählte Profile: {{count}}", + "dragPickedUp": "Auswahl wird verschoben ({{count}}). Legen Sie sie auf einer Gruppe ab oder drücken Sie Escape zum Abbrechen.", + "dragTarget": "Nach {{group}} verschieben", + "dragUnavailable": "Diese Profile können gerade nicht verschoben werden.", + "dragCancelled": "Verschieben abgebrochen.", + "dragSaving": "Profile werden verschoben…", + "handoffError": "Die Änderungen konnten noch nicht zurückgeholt werden", + "handoffRemote": "Läuft remote", + "handoffReturning": "Änderungen werden zurückgeholt", + "handoffReturned": "Änderungen zurückgeholt", + "handoffTitle": "Profilübergabe", + "handoffErrorHint": "Öffnen Sie die Sync-Details, um den Fehler zu prüfen und es erneut zu versuchen.", + "handoffReturnedHint": "Die Änderungen der Remote-Sitzung sind jetzt auf diesem Computer.", + "handoffRemoteLocation": "Entfernter Rechner", + "handoffLocalLocation": "Dieser Computer", + "handoffSyncDetails": "Sync-Details öffnen" + }, + "synchronizerPreview": { + "title": "Einen Klick proben", + "description": "Sehen Sie sich an, wie eine Aktion des Leitprofils Ihre ausgewählten Folgeprofile erreicht. Dieses Beispiel startet keine Browser.", + "send": "Beispielklick senden", + "empty": "Wählen Sie ein Folgeprofil aus, um die Vorschau auszuprobieren.", + "ready": "Ausgewählte Folgeprofile: {{count}}", + "sent": "Beispielklick angezeigt. Empfangende Folgeprofile: {{count}}", + "received": "Beispielklick empfangen", + "starting": "Profile werden gestartet und der Synchronizer wird verbunden…", + "startError": "Der Synchronizer konnte nicht starten. Ihre Auswahl ist gespeichert. Prüfen Sie die Profile und versuchen Sie es erneut." + }, + "isolationDemo": { + "title": "Eine Änderung. Ein Profil.", + "description": "Probieren Sie diese Beispielprofile aus. Nichts hier ändert Ihre echten Profile.", + "research": "Recherche", + "shopping": "Shopping", + "cookies": "Sitzungscookie", + "noCookie": "Kein Sitzungscookie", + "savedCookie": "Sitzungscookie gespeichert", + "route": "Route", + "direct": "Direkt", + "proxy": "Beispiel-Proxy", + "signIn": "Anmelden", + "signOut": "Abmelden", + "switchRoute": "Route wechseln", + "reset": "Beispiel zurücksetzen", + "hint": "Wählen Sie ein Profil und ändern Sie dann sein Cookie oder seine Route.", + "changed": "{{name}} wurde geändert. Das andere Profil hat sein eigenes Cookie und seine eigene Route behalten.", + "resetDone": "Beide Beispiele wurden zurückgesetzt.", + "replay": "Profilisolierung erkunden", + "device": "Gerät", + "site": "Website" + }, + "mcpLocalDeprecated": { + "title": "Lokales MCP wurde entfernt", + "description": "Donut verwendet jetzt Remote-MCP, mit dem Sie sich von überall verbinden können. Richten Sie es auf dem Tab „Remote-MCP“ ein und verbinden Sie Ihre KI-Clients damit." + }, + "mcpMigration": { + "title": "Zu Remote-MCP wechseln", + "doneTitle": "Zu Remote-MCP gewechselt", + "body": "Der lokale MCP-Server wurde entfernt. Remote-MCP verbindet Ihre KI-Clients über die Donut-Cloud mit diesem Browser, sodass sie überall funktionieren, solange Donut geöffnet ist.", + "changes": "Donut richtet diese Clients mit privaten Zugangsdaten auf den Remote-Endpunkt aus. Sonst ändert sich nichts an ihren Einstellungen.", + "changesNone": "Kein KI-Client auf diesem Computer verwendet den lokalen Server. Donut aktiviert Remote-MCP und erstellt Zugangsdaten für die Clients, die Sie selbst einrichten.", + "start": "Zu Remote-MCP wechseln", + "notNow": "Nicht jetzt", + "done": "Fertig", + "stepBridge": "Remote-MCP", + "stepClients": "Clients", + "bridgeWorking": "Wird aktiviert", + "bridgeOn": "Aktiv", + "credentialWorking": "Wird erstellt", + "clientsProgress": "{{moved}} von {{total}} umgestellt", + "clientsNone": "Nichts umzustellen", + "clientMoving": "Wird umgestellt", + "clientMoved": "Umgestellt", + "clientFailed": "Nicht geändert", + "summary_one": "{{count}} Client verwendet jetzt Remote-MCP.", + "summary_other": "{{count}} Clients verwenden jetzt Remote-MCP.", + "failed_one": "{{count}} Client wurde nicht geändert. Versuchen Sie es erneut oder richten Sie ihn mit den Angaben unten manuell ein.", + "failed_other": "{{count}} Clients wurden nicht geändert. Versuchen Sie es erneut oder richten Sie sie mit den Angaben unten manuell ein.", + "manual": "Verwenden Sie für jeden anderen Client diesen Endpunkt mit den Zugangsdaten als Bearer-Token.", + "credentialCopied": "Zugangsdaten kopiert", + "localServer": "Der lokale Server teilt alten Clients jetzt nur noch mit, dass er umgezogen ist. Sie können ihn ausschalten.", + "localServerOff": "Lokalen Server ausschalten", + "localServerIsOff": "Lokaler Server ist aus", + "localServerOffFailed": "Der lokale Server konnte nicht ausgeschaltet werden" + }, + "appFeedback": { + "saveFailed": "Die Einstellungen konnten nicht gespeichert werden", + "searchSettings": "Einstellungen durchsuchen…", + "pendingChanges": "Ungespeicherte Änderungen: {{count}}", + "reviewChanges": "Änderungen prüfen", + "noChanges": "Alles gespeichert", + "discardChanges": "Änderungen verwerfen", + "appliesImmediately": "Aktionen in diesem Bereich werden sofort angewendet.", + "searchShortcuts": "Tastenkürzel durchsuchen…", + "requestedSchedule": "Balken zeigen die maximal angeforderte Dauer in jeder Zeitzone. Überschneidungen teilen sich Wochentage; tatsächliche Durchläufe können abweichen.", + "overlappingBookings": "Überschneidende Buchungen: {{count}}", + "source": "Quelle", + "profileCount": "Profile: {{count}}", + "extensionCount": "Erweiterungen: {{count}}", + "groupCount": "Gruppen: {{count}}", + "transfer": "Übertragung", + "finished": "Abgeschlossen", + "receipts": "Ergebnisse", + "waiting": "Wartet", + "routeDetails": "Verbindungsdetails", + "notChecked": "Noch nicht geprüft", + "notVerified": "Nicht verifiziert", + "notObserved": "Nicht erreicht", + "thisDevice": "Dieses Gerät", + "connectionTest": "Verbindungstest", + "verifiedExit": "Verifizierter Exit", + "lastCheckPassed": "Letzte Prüfung erfolgreich", + "routeScope": "Hier wird der gespeicherte Proxy getestet. Ein Profil kann ein anderes Routing verwenden.", + "assignmentImpact": "Verwendet von", + "pendingImpact": "Nach dem Speichern", + "nextLaunchImpact": "Änderungen gelten beim nächsten Start dieser Profile. Laufende Browser behalten ihre aktuellen Erweiterungen.", + "assignedProfiles": "Profile, die {{name}} verwenden", + "noAssignments": "Keine Profile zugewiesen", + "referencesFailed": "Die zugewiesenen Profile konnten nicht geladen werden", + "useManifestName": "Namen aus dem Manifest verwenden", + "launchActivity": "Startaktivität", + "browser": "Browser", + "launch": { + "queued": "Start angefordert", + "preparing": "Profil wird vorbereitet", + "network": "Netzwerk wird vorbereitet", + "extensions": "Erweiterungen werden vorbereitet", + "starting": "Browser wird gestartet", + "running": "Browser läuft", + "failed": "Start fehlgeschlagen", + "stopped": "Letzter Start abgeschlossen; der Browser ist gestoppt" + }, + "checking": "Wird geprüft…", + "testConnection": "Verbindung testen", + "configured": "Konfiguriert", + "reachable": "Erreichbar", + "authorized": "Zugangsdaten akzeptiert", + "confirmed": "Ja", + "unavailable": "Nein", + "configuredLocal": "Für lokales MCP konfiguriert", + "configuredRemote": "Für Remote-MCP konfiguriert", + "apiProbeScope": "Prüft die laufende lokale API mit den gespeicherten Zugangsdaten. Es wird kein Profil gestartet.", + "remoteProbeScope": "Prüft die gespeicherten MCP-Zugangsdaten. Die Fernsteuerung benötigt außerdem ein verbundenes Gerät und einen passenden Tarif; ein konfigurierter Client ist noch keine aktive Sitzung." + }, + "easterEgg": { + "konami": { + "title": "Cheatcode akzeptiert", + "description": "30 zusätzliche Donuts hinzugefügt. Sie dienen nur der Dekoration." + } + }, + "trash": { + "title": "Papierkorb", + "description": "Gelöschte Profile warten hier, bis sie ablaufen. Stellen Sie eines wieder her, um es mit seiner Identität, seinem Proxy und seinen Tags zurückzubekommen.", + "empty": "Der Papierkorb ist leer", + "emptyHint": "Profile, die Sie löschen, erscheinen hier und können wiederhergestellt werden, bis sie ablaufen.", + "columns": { + "name": "Profil", + "browser": "Browser", + "deleted": "Gelöscht", + "expires": "Läuft ab", + "size": "Größe" + }, + "expiresIn_one": "in {{count}} Tag", + "expiresIn_other": "in {{count}} Tagen", + "expiresToday": "heute", + "restore": "Wiederherstellen", + "deleteForever": "Endgültig löschen", + "emptyTrash": "Papierkorb leeren", + "passwordProtected": "Passwortgeschützt", + "confirmDeleteForeverTitle": "Endgültig löschen?", + "confirmDeleteForeverDescription": "„{{name}}“ und alle zugehörigen Daten werden vernichtet. Dies kann nicht rückgängig gemacht werden.", + "confirmEmptyTitle": "Papierkorb leeren?", + "confirmEmptyDescription_one": "{{count}} Profil und alle zugehörigen Daten werden vernichtet. Dies kann nicht rückgängig gemacht werden.", + "confirmEmptyDescription_other": "{{count}} Profile und alle zugehörigen Daten werden vernichtet. Dies kann nicht rückgängig gemacht werden.", + "restored": "„{{name}}“ wurde wiederhergestellt", + "restoreFailed": "Das Profil konnte nicht wiederhergestellt werden: {{error}}", + "deletedForever": "„{{name}}“ wurde endgültig gelöscht", + "deleteForeverFailed": "Das Profil konnte nicht gelöscht werden: {{error}}", + "emptied_one": "{{count}} Profil aus dem Papierkorb entfernt", + "emptied_other": "{{count}} Profile aus dem Papierkorb entfernt", + "emptyFailed": "Der Papierkorb konnte nicht geleert werden: {{error}}", + "loadFailed": "Der Papierkorb konnte nicht geladen werden: {{error}}" + }, + "agent": { + "title": "Agent", + "description": "Geben Sie dem Agenten ein Ziel, und er arbeitet es in einem Ihrer Profile ab.", + "tabs": { + "run": "Neuer Durchlauf", + "history": "Verlauf", + "recipes": "Rezepte" + }, + "unavailable": { + "signInTitle": "Melden Sie sich an, um den Agenten zu nutzen", + "signInHint": "Agent-Durchläufe werden über die Donut-Cloud vermittelt. Melden Sie sich auf der Kontoseite an, um einen zu starten.", + "planTitle": "Der Agent ist nicht in Ihrem Tarif enthalten", + "planHint": "Wechseln Sie zu einem Tarif mit Browser-Automatisierung, um dem Agenten ein Ziel zu geben.", + "notConfiguredTitle": "Der Agent ist noch nicht verfügbar", + "notConfiguredHint": "In dieser Donut-Bereitstellung ist kein Agent konfiguriert. Mit Ihrem Konto ist alles in Ordnung." + }, + "form": { + "profile": "Profil", + "profilePlaceholder": "Profil auswählen", + "noProfiles": "Erstellen Sie zuerst ein Profil, denn der Agent benötigt eines zum Surfen.", + "target": "Läuft auf", + "targetDesktopHint": "Der Browser öffnet sich auf diesem Computer, und Sie können ihm bei der Arbeit zusehen.", + "targetFleetHint": "Der Browser öffnet sich auf einem gemieteten Host, sodass dieser Computer frei bleibt.", + "platform": "Host-Betriebssystem", + "platformPlaceholder": "Betriebssystem auswählen", + "platformRequired": "Für das Betriebssystem dieses Profils gibt es keinen gemieteten Host. Wählen Sie eines, das die Remote-Rechner ausführen können.", + "recipeInsert": "Rezept einfügen", + "goal": "Ziel", + "goalPlaceholder": "Beschreiben Sie in eigenen Worten, was der Agent erreichen soll.", + "goalEmpty": "Geben Sie ein Ziel ein, um einen Durchlauf zu starten.", + "goalTooLong": "Dieses Ziel ist zu lang.", + "goalCount": "{{chars}} / {{max}}", + "limits": "Limits und Umfang", + "limitsHint": "Lassen Sie ein Limit leer, um die Obergrenze des Tarifs zu verwenden.", + "maxSteps": "Maximale Schritte", + "maxMinutes": "Maximale Minuten", + "maxTokens": "Maximale Tokens", + "budgetUnset": "Kein Limit", + "budgetInvalid": "Geben Sie eine ganze Zahl größer als null ein.", + "effort": "Aufwand", + "allowedHosts": "Erlaubte Hosts", + "allowedHostsPlaceholder": "example.com\ndocs.example.com", + "allowedHostsHint": "Ein Host pro Zeile. Leer lassen, damit der Agent überall surfen darf.", + "allowedHostsCount": "Navigation beschränkt auf: {{hosts}}", + "submit": "Durchlauf starten", + "starting": "Wird gestartet…", + "started": "Durchlauf gestartet" + }, + "target": { + "desktop": "Dieser Computer", + "fleet": "Gemieteter Host" + }, + "platform": { + "windows": "Windows", + "macos": "macOS", + "linux": "Linux" + }, + "effort": { + "standard": "Standard", + "high": "Hoch" + }, + "live": { + "newRun": "Neuer Durchlauf", + "notFound": "Dieser Durchlauf konnte nicht gelesen werden.", + "onProfile": "auf {{profile}} · {{target}}", + "cancel": "Durchlauf abbrechen", + "cancelling": "Wird abgebrochen…", + "cancelled": "Durchlauf abgebrochen", + "elapsed": "Verstrichen", + "steps": "Schritte", + "tokens": "Tokens", + "cost": "Kosten", + "costValue": "${{amount}}", + "endedBecause": "Beendet: {{reason}}", + "streamOffline": "Derzeit kommen keine Schritte an. Die Verbindung wird wiederhergestellt.", + "waiting": "Warten auf den ersten Schritt.", + "noSteps": "Dieser Durchlauf hat keine Schritte aufgezeichnet.", + "result": "Ergebnis" + }, + "step": { + "thought": "Gedanke", + "tool": "Aktion", + "error": "Fehler", + "finish": "Abgeschlossen", + "unknown": "Schritt" + }, + "status": { + "queued": "In Warteschlange", + "running": "Läuft", + "succeeded": "Erfolgreich", + "failed": "Fehlgeschlagen", + "cancelled": "Abgebrochen", + "unknown": "Unbekannt" + }, + "closeReason": { + "completed": "das Ziel wurde erreicht", + "budget": "ein Limit wurde erreicht", + "cancelled": "Sie haben ihn abgebrochen", + "navigationBlocked": "er hat versucht, die erlaubten Hosts zu verlassen", + "targetOffline": "der Browser war nicht erreichbar", + "targetError": "der Browser ist ausgefallen", + "modelError": "das Modell ist ausgefallen", + "modelRefused": "das Modell hat das Ziel abgelehnt", + "modelStopped": "das Modell hat vorzeitig aufgehört", + "contextExceeded": "der Durchlauf hat den Kontext des Modells überschritten", + "orphaned": "der Durchlauf hat seinen Browser verloren", + "internalError": "bei uns ist ein Fehler aufgetreten" + }, + "history": { + "columnStarted": "Gestartet", + "columnProfile": "Profil", + "columnGoal": "Ziel", + "columnTarget": "Läuft auf", + "columnStatus": "Status", + "empty": "Noch keine Durchläufe.", + "loadMore": "Mehr laden", + "backToList": "Zurück zum Verlauf", + "unknownProfile": "Unbekanntes Profil" + }, + "recipes": { + "hint": "Gespeicherte Ziele, die Sie in einen neuen Durchlauf einfügen können.", + "new": "Neues Rezept", + "recording": { + "record": "Aufzeichnen", + "recording": "Aufzeichnung läuft", + "description": "Führen Sie die Aufgabe einmal im Browser des Profils aus, und Donut schreibt die Schritte mit. Passwörter werden nie aufgezeichnet.", + "stop": "Aufzeichnung stoppen", + "steps": "{{count}} Schritte aufgezeichnet", + "hint": "Wählen Sie ein laufendes Profil zum Aufzeichnen.", + "save": "Als Rezept speichern", + "discard": "Verwerfen", + "empty": "Es wurde nichts aufgezeichnet. Klicken und tippen Sie im Browser und stoppen Sie dann." + }, + "empty": "Noch keine Rezepte gespeichert.", + "stepCount": "Schritte: {{steps}}", + "name": "Name", + "namePlaceholder": "Nächtliche Prüfung", + "steps": "Schritte", + "stepsHint": "Jeder Schritt gibt an, was zu tun ist, und bei Aktionen auf einem Element entweder dessen Rolle und Namen oder einen CSS-Selektor. Nicht beides.", + "addStep": "Schritt hinzufügen", + "moveStepUp": "Diesen Schritt nach oben verschieben", + "moveStepDown": "Diesen Schritt nach unten verschieben", + "removeStep": "Diesen Schritt entfernen", + "stepTypes": { + "click": "Klicken", + "extract": "Extrahieren", + "navigate": "Seite aufrufen", + "pressKey": "Taste drücken", + "screenshot": "Screenshot", + "scroll": "Scrollen", + "sleep": "Warten", + "type": "Tippen", + "waitFor": "Warten auf" + }, + "fields": { + "attribute": "Attribut (optional)", + "direction": "Richtung", + "down": "Nach unten", + "elementName": "Elementname", + "fullPage": "Ganze Seite", + "key": "Taste", + "milliseconds": "Millisekunden", + "name": "Ergebnisname", + "role": "Rolle (optional)", + "selector": "CSS-Selektor", + "text": "Text", + "up": "Nach oben", + "url": "Adresse" + }, + "created": "Rezept gespeichert", + "updated": "Rezept aktualisiert", + "deleted": "Rezept gelöscht", + "deleteTitle": "{{name}} löschen?", + "deleteDescription": "Das Rezept wird von allen Geräten entfernt. Bereits gestartete Durchläufe behalten ihr Ziel." + } + }, + "proxyDistribution": { + "title": "Proxys verteilen", + "description": "Geben Sie jedem Profil der Reihe nach einen eigenen Proxy: Das erste Profil erhält den ersten Proxy und so weiter.", + "profilesLabel": "Profile", + "proxiesLabel": "Proxys", + "selectAll": "Alle auswählen", + "selectNone": "Keine auswählen", + "noProfiles": "Es sind keine Profile ausgewählt.", + "noProxies": "Keine gespeicherten Proxys verfügbar.", + "allowSharingLabel": "Proxys mehrfach vergeben", + "allowSharingHint": "Standardmäßig aus: Ein Proxy, den bereits ein anderes Profil verwendet, wird ausgelassen.", + "summaryPairs": "{{n}} von {{profiles}} ausgewählten Profil(en) wird ein Proxy zugewiesen.", + "summaryUnpaired": "{{n}} Profil(e) behalten ihren aktuellen Proxy, da keiner mehr übrig war: {{names}}", + "summaryUnused": "{{n}} Proxy(s) bleiben ungenutzt: {{names}}", + "summaryShared": "{{n}} Proxy(s) werden zurückgehalten, da ein anderes Profil sie verwendet: {{names}}", + "summaryRunning": "{{n}} laufende(s) Profil(e) können nicht geändert werden: {{names}}", + "failuresTitle": "{{n}} Profil(e) konnten nicht geändert werden", + "failureLine": "{{name}}: {{reason}}", + "distributeButton": "Verteilen", + "assigned": "{{n}} Profil(en) wurde ein Proxy zugewiesen", + "partial": "{{assigned}} zugewiesen, {{failed}} fehlgeschlagen" + }, + "groupBookmarks": { + "title": "Lesezeichen für {{name}}", + "description": "Jedes Profil in dieser Gruppe erhält diese Lesezeichen in einem von Donut verwalteten Ordner. Andere Lesezeichen bleiben unverändert.", + "editTooltip": "Gruppenlesezeichen ({{n}})", + "empty": "Diese Gruppe hat noch keine gemeinsamen Lesezeichen.", + "addRow": "Lesezeichen hinzufügen", + "removeRow": "Lesezeichen entfernen", + "moveUp": "Nach oben", + "moveDown": "Nach unten", + "titleColumn": "Titel", + "urlColumn": "URL", + "folderColumn": "Ordner", + "titlePlaceholder": "Helpdesk", + "urlPlaceholder": "https://example.com", + "folderPlaceholder": "Optional", + "saved": "Gruppenlesezeichen gespeichert" + }, + "tips": { + "title": "Tipps", + "essentials": "Grundlagen", + "planSection": "In Ihrem Tarif enthalten", + "count": "{{current}} von {{total}}", + "previous": "Vorheriger Tipp", + "next": "Nächster Tipp", + "done": "Fertig", + "autoShow": "Alle paar Tage einen Tipp anzeigen", + "items": { + "dnsBlocklist": { + "label": "DNS-Blockierung", + "title": "Werbung und Tracker blockieren, bevor sie laden", + "body": "Jedes Profil kann eine eigene DNS-Sperrliste haben. Wählen Sie eine Stufe in der DNS-Spalte des Profils; die höheren Stufen blockieren auch Tracking- und Malware-Domains auf Netzwerkebene.", + "action": "DNS-Einstellungen öffnen" + }, + "proxyCheck": { + "label": "Proxy-Prüfung", + "title": "Einen Proxy vor dem Start prüfen", + "body": "Die Verbindungsprüfung meldet Exit-IP, Land, Latenz und ob UDP durchgeht. Starten Sie sie auf der Seite „Netzwerk“ oder in einer Profilzeile und erkennen Sie am Verlauf früherer Prüfungen, wenn ein Proxy nachlässt.", + "action": "Netzwerk öffnen" + }, + "groups": { + "label": "Gruppen", + "title": "Gruppen per Tastatur wechseln", + "body": "Gruppen halten zusammengehörige Profile beisammen, und jede Gruppe erhält eine Nummer: Mit {{mod}}+1 bis {{mod}}+9 wechseln Sie die Liste sofort.", + "action": "Gruppen öffnen" + }, + "commandPalette": { + "label": "Befehlspalette", + "title": "Jede Seite ist nur ein Tastenkürzel entfernt", + "body": "{{mod}}+K öffnet die Befehlspalette. Geben Sie ein paar Buchstaben einer Seite oder Aktion ein und drücken Sie die Eingabetaste.", + "action": "Palette öffnen" + }, + "fingerprintGate": { + "label": "Fingerprint-Sperre", + "title": "Den Fingerprint passend zum Exit halten", + "body": "Vor dem Start vergleicht Donut Zeitzone und Sprache des Proxy-Exits mit dem Fingerprint des Profils und stoppt bei einer Abweichung. Korrigieren Sie den Fingerprint, oder schalten Sie die Sperre unter „Erweitert“ aus, wenn Sie wissen, was Sie tun.", + "action": "Erweiterte Einstellungen öffnen" + }, + "profilePassword": { + "label": "Profilpasswort", + "title": "Ein Profil mit einem Passwort sperren", + "body": "Ein passwortgeschütztes Profil ist auf dem Datenträger verschlüsselt und wird nur entschlüsselt, solange es läuft. Legen Sie das Passwort im Menü des Profils fest.", + "action": "Profile öffnen" + }, + "clearOnClose": { + "label": "Beim Schließen löschen", + "title": "Jedes Mal sauber starten", + "body": "Mit „Beim Schließen löschen“ verwirft ein Profil Cookies, Speicher und Verlauf, sobald sein Fenster geschlossen wird. Ideal für einmalige Sitzungen und gemeinsam genutzte Rechner.", + "action": "Profile öffnen" + }, + "defaultBrowser": { + "label": "Standardbrowser", + "title": "Jeden Link im richtigen Profil öffnen", + "body": "Machen Sie Donut zu Ihrem Standardbrowser, dann fragt jeder Link aus einer anderen App, welches Profil ihn öffnen soll.", + "action": "Standardbrowser-Einstellungen öffnen" + }, + "extensionGroups": { + "label": "Erweiterungsgruppen", + "title": "Einen Satz Erweiterungen in mehreren Profilen nutzen", + "body": "Legen Sie Erweiterungen in eine Erweiterungsgruppe und weisen Sie die Gruppe Profilen zu. Ändern Sie die Gruppe einmal, und jedes Profil übernimmt das beim nächsten Start.", + "action": "Erweiterungen öffnen" + }, + "selfHostedSync": { + "label": "Eigener Sync-Server", + "title": "Auf Ihrem eigenen Server sichern", + "body": "Verbinden Sie Donut mit einem selbst gehosteten donut-sync-Server, und Profile, Proxys und Gruppen werden dorthin gespiegelt. Mit einem Ende-zu-Ende-Passwort sieht der Server nur verschlüsselte Daten.", + "action": "Konto öffnen" + }, + "trash": { + "label": "Papierkorb", + "title": "Gelöschte Profile warten im Papierkorb", + "body": "Ein gelöschtes Profil bleibt standardmäßig 30 Tage im Papierkorb und kommt mit allen Inhalten zurück. Die Aufbewahrungsdauer finden Sie unter „Datenschutz“ in den Einstellungen.", + "action": "Papierkorb öffnen" + }, + "localApi": { + "label": "API und MCP", + "title": "Donut mit Skripten und Agenten automatisieren", + "body": "Mit der lokalen REST API können Skripte Profile auflisten, erstellen und konfigurieren. Aktivieren Sie sie unter „Integrationen“ und kopieren Sie das Token.", + "action": "Integrationen öffnen" + }, + "importProfiles": { + "label": "Import", + "title": "Profile aus Chrome, Edge oder Brave übernehmen", + "body": "Der Import kopiert Cookies, Anmeldungen und Erweiterungen aus einem Chromium-Profil oder einem Archiv in ein neues, startbereites Donut-Profil.", + "action": "Import öffnen" + }, + "cloudBackup": { + "label": "Cloud-Sync", + "title": "Ihre Profile auf jedem Gerät", + "body": "Die Cloud-Synchronisierung sichert Profile, Proxys und Gruppen und stellt sie auf einem anderen Rechner wieder her. Aktivieren Sie sie pro Profil in der Sync-Spalte.", + "action": "Konto öffnen" + }, + "cookieBot": { + "label": "Cookie Bot", + "title": "Profile über Nacht aufwärmen", + "body": "Der Cookie Bot besucht nach Zeitplan echte Websites von einem entfernten Host aus, sodass ein neues Profil einen natürlichen Verlauf aufbaut, bevor Sie es verwenden.", + "action": "Cookie Bot öffnen" + }, + "crossOs": { + "label": "OS-übergreifender Fingerprint", + "title": "Als beliebiges Betriebssystem auftreten", + "body": "Mit einem betriebssystemübergreifenden Fingerprint meldet ein Profil macOS, Windows oder Linux, egal auf welchem Rechner es läuft. Wählen Sie die Plattform beim Erstellen oder Bearbeiten des Fingerprints.", + "action": "Profile öffnen" + }, + "automation": { + "label": "Automatisierung", + "title": "Profile per Code starten und steuern", + "body": "Die Endpunkte run, open-url und kill starten echte Profile aus Ihren Skripten, und jedes gestartete Profil stellt einen CDP-Endpunkt für Playwright oder Puppeteer bereit.", + "action": "Integrationen öffnen" + }, + "agent": { + "label": "Agent", + "title": "Das Klicken einem Agenten überlassen", + "body": "Beschreiben Sie eine Aufgabe, und der Agent steuert ein Profil Schritt für Schritt, zeichnet auf, was er getan hat, und kann es als Rezept wiederholen.", + "action": "Agent öffnen" + }, + "team": { + "label": "Team-Sperren", + "title": "Profile ohne Konflikte teilen", + "body": "In einem Team ist ein laufendes Profil für alle anderen gesperrt und wird beim Schließen wieder freigegeben. Die Kontoseite zeigt, wer was verwendet.", + "action": "Konto öffnen" + }, + "remoteControl": { + "label": "Fernsteuerung", + "title": "Diesen Desktop von donutbrowser.com aus steuern", + "body": "Bei aktivierter Fernsteuerung erreichen Agenten auf der Website die Profile dieses Rechners über eine ausgehende Verbindung. Aktivieren Sie sie unter „Integrationen“.", + "action": "Integrationen öffnen" + } + } + }, + "paidWelcome": { + "title": "Willkommen bei {{plan}}", + "body": "Ihr Tarif hat gerade diese Funktionen freigeschaltet. Jeder Tipp zeigt eine davon in Aktion.", + "cta": "Zeig es mir", + "later": "Später" + } +} diff --git a/src/lib/proxy-first-hop-claims.test.mjs b/src/lib/proxy-first-hop-claims.test.mjs index 090ecd8a..bab0300f 100644 --- a/src/lib/proxy-first-hop-claims.test.mjs +++ b/src/lib/proxy-first-hop-claims.test.mjs @@ -149,7 +149,19 @@ test("both keys of every pair have a sentence in every locale", () => { inTheClear, undecided, ]); - const codes = ["en", "es", "fr", "ja", "ko", "pt", "ru", "tr", "vi", "zh"]; + const codes = [ + "de", + "en", + "es", + "fr", + "ja", + "ko", + "pt", + "ru", + "tr", + "vi", + "zh", + ]; for (const code of codes) { const bundle = JSON.parse( readFileSync(path.join(LOCALES, `${code}.json`), "utf8"),