mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-22 06:56:35 +00:00
31f6ec1f47
* feat(vacay): read-only calendar shares on the server (#444, #667) * feat(vacay): shared calendars card and ring overlay on desktop * feat(vacay): share sheet and calendar rings on mobile * test(vacay): cover the calendar share flows * docs(vacay): document read-only calendar sharing
520 lines
33 KiB
TypeScript
520 lines
33 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
||
|
||
const settings: TranslationStrings = {
|
||
'settings.title': 'Einstellungen',
|
||
'settings.subtitle': 'Konfigurieren Sie Ihre persönlichen Einstellungen',
|
||
'settings.tabs.display': 'Allgemein',
|
||
'settings.tabs.map': 'Karte',
|
||
'settings.tabs.notifications': 'Mitteilungen',
|
||
'settings.tabs.integrations': 'Integrationen',
|
||
'settings.plugins.oauth.connected': 'Verbunden',
|
||
'settings.plugins.oauth.notConnected': 'Nicht verbunden',
|
||
'settings.plugins.oauth.connect': 'Verbinden',
|
||
'settings.plugins.oauth.disconnect': 'Trennen',
|
||
'settings.tabs.plugins': 'Plugins',
|
||
'settings.plugins.title': 'Plugin-Einstellungen',
|
||
'settings.plugins.subtitle':
|
||
'Deine persönlichen Einstellungen für die von dir genutzten Plugins (API-Schlüssel, Präferenzen).',
|
||
'settings.plugins.empty': 'Es sind keine Plugins aktiv.',
|
||
'settings.plugins.saved': 'Einstellungen gespeichert',
|
||
'settings.tabs.account': 'Konto',
|
||
'settings.tabs.offline': 'Offline',
|
||
'settings.tabs.about': 'Über',
|
||
'settings.map': 'Karte',
|
||
'settings.mapTemplate': 'Karten-Vorlage',
|
||
'settings.mapTemplatePlaceholder.select': 'Vorlage auswählen...',
|
||
'settings.mapDefaultHint': 'Leer lassen für OpenStreetMap (Standard)',
|
||
'settings.mapTemplatePlaceholder': 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||
'settings.mapHint': 'URL-Template für die Kartenkacheln',
|
||
'settings.mapProvider': 'Kartenanbieter',
|
||
'settings.mapProviderHint': 'Gilt für Trip Planner und Journey. Atlas nutzt immer Leaflet.',
|
||
'settings.mapLeafletSubtitle': 'Klassisch 2D, beliebige Raster-Kacheln',
|
||
'settings.mapMapboxSubtitle': 'Vektor-Kacheln, 3D-Gebäude & Terrain',
|
||
'settings.mapMapLibreSubtitle': 'OpenFreeMap Vektor-Kacheln, kein Token',
|
||
'settings.mapExperimental': 'Experimentell',
|
||
'settings.mapMapboxToken': 'Mapbox Access Token',
|
||
'settings.mapMapboxTokenHint': 'Öffentliches Token (pk.*) von',
|
||
'settings.mapMapboxTokenLink': 'mapbox.com → Access Tokens',
|
||
'settings.mapStyle': 'Kartenstil',
|
||
'settings.mapStylePlaceholder': 'Mapbox-Stil wählen',
|
||
'settings.mapStyleHint': 'Preset oder eigene mapbox://styles/USER/ID URL',
|
||
'settings.mapOpenFreeMapStylePlaceholder': 'OpenFreeMap-Stil wählen',
|
||
'settings.mapOpenFreeMapStyleHint': 'Preset oder OpenFreeMap-Stil-URL. OpenFreeMap-Stile funktionieren ohne Token.',
|
||
'settings.map3dBuildings': '3D-Gebäude & Terrain',
|
||
'settings.map3dHint': 'Neigung + echte 3D-Gebäude-Extrusionen — funktioniert mit jedem Stil, auch Satellit.',
|
||
'settings.mapHighQuality': 'Hochqualitäts-Modus',
|
||
'settings.mapHighQualityHint':
|
||
'Antialiasing + Globus-Projektion für schärfere Kanten und eine realistische Weltsicht.',
|
||
'settings.mapHighQualityWarning': 'Kann die Performance auf schwächeren Geräten beeinträchtigen.',
|
||
'settings.mapTipLabel': 'Tipp:',
|
||
'settings.mapTip':
|
||
'Rechtsklick und ziehen, um die Karte zu drehen/neigen. Mittelklick, um einen Ort hinzuzufügen (Rechtsklick ist für die Rotation reserviert).',
|
||
'settings.saveMap': 'Karte speichern',
|
||
'settings.apiKeys': 'API-Schlüssel',
|
||
'settings.mapsKey': 'Google Maps API-Schlüssel',
|
||
'settings.mapsKeyHint': 'Für Ortsuche. Benötigt Places API (New). Erhalten unter console.cloud.google.com',
|
||
'settings.weatherKey': 'OpenWeatherMap API-Schlüssel',
|
||
'settings.weatherKeyHint': 'Für Wetterdaten. Kostenlos unter openweathermap.org/api',
|
||
'settings.keyPlaceholder': 'Schlüssel eingeben...',
|
||
'settings.configured': 'Konfiguriert',
|
||
'settings.saveKeys': 'Schlüssel speichern',
|
||
'settings.display': 'Darstellung',
|
||
'settings.colorMode': 'Farbmodus',
|
||
'settings.light': 'Hell',
|
||
'settings.dark': 'Dunkel',
|
||
'settings.auto': 'Automatisch',
|
||
'settings.language': 'Sprache',
|
||
'settings.temperature': 'Temperatureinheit',
|
||
'settings.distance': 'Entfernungseinheit',
|
||
'settings.timeFormat': 'Zeitformat',
|
||
'settings.bookingLabels': 'Orts-Labels auf Buchungsrouten',
|
||
'settings.bookingLabelsHint': 'Zeigt Bahnhofs-/Flughafennamen auf der Karte. Wenn aus, wird nur das Icon angezeigt.',
|
||
'settings.blurBookingCodes': 'Buchungscodes verbergen',
|
||
'settings.aiAlwaysRetry': 'Always retry booking imports with AI',
|
||
'settings.aiAlwaysRetryHint': 'When a file cannot be read by the standard parser, automatically retry it with AI.',
|
||
'settings.optimizeFromAccommodation': 'Route ab der Unterkunft optimieren',
|
||
'settings.optimizeFromAccommodationHint':
|
||
'Beim Optimieren eines Tages startet die Route an der Unterkunft, in der du aufwachst, und endet an der, in die du am Abend eincheckst.',
|
||
'settings.notifications': 'Mitteilungen',
|
||
'settings.notifyTripInvite': 'Trip-Einladungen',
|
||
'settings.notifyBookingChange': 'Buchungsänderungen',
|
||
'settings.notifyTripReminder': 'Trip-Erinnerungen',
|
||
'settings.notifyTodoDue': 'Aufgabe bald fällig',
|
||
'settings.notifyVacayInvite': 'Vacay Fusion-Einladungen',
|
||
'settings.notifyVacayShare': 'Vacay Kalender-Freigaben',
|
||
'settings.notifyPhotosShared': 'Geteilte Fotos (Immich)',
|
||
'settings.notifyCollabMessage': 'Chat-Nachrichten (Collab)',
|
||
'settings.notifyPackingTagged': 'Packliste: Zuweisungen',
|
||
'settings.notifyWebhook': 'Webhook-Benachrichtigungen',
|
||
'settings.notificationsDisabled':
|
||
'Benachrichtigungen sind nicht konfiguriert. Bitten Sie einen Administrator, E-Mail- oder Webhook-Benachrichtungen zu aktivieren.',
|
||
'settings.notificationsActive': 'Aktiver Kanal',
|
||
'settings.notificationsManagedByAdmin': 'Benachrichtigungsereignisse werden vom Administrator konfiguriert.',
|
||
'settings.on': 'An',
|
||
'settings.off': 'Aus',
|
||
'settings.mcp.title': 'MCP-Konfiguration',
|
||
'settings.mcp.endpoint': 'MCP-Endpunkt',
|
||
'settings.mcp.clientConfig': 'Client-Konfiguration',
|
||
'settings.mcp.clientConfigHint':
|
||
'Ersetze <your_token> durch ein API-Token aus der Liste unten. Der Pfad zu npx muss ggf. für dein System angepasst werden (z. B. C:\\PROGRA~1\\nodejs\\npx.cmd unter Windows).',
|
||
'settings.mcp.clientConfigHintOAuth':
|
||
'Ersetze <your_client_id> und <your_client_secret> durch die Zugangsdaten des oben erstellten OAuth 2.1-Clients. mcp-remote öffnet beim ersten Verbindungsaufbau deinen Browser zur Autorisierung. Der Pfad zu npx muss ggf. für dein System angepasst werden (z. B. C:\\PROGRA~1\\nodejs\\npx.cmd unter Windows).',
|
||
'settings.mcp.copy': 'Kopieren',
|
||
'settings.mcp.copied': 'Kopiert!',
|
||
'settings.mcp.apiTokens': 'API-Tokens',
|
||
'settings.mcp.createToken': 'Neuen Token erstellen',
|
||
'settings.mcp.noTokens': 'Noch keine Tokens. Erstelle einen, um MCP-Clients zu verbinden.',
|
||
'settings.mcp.tokenCreatedAt': 'Erstellt',
|
||
'settings.mcp.tokenUsedAt': 'Verwendet',
|
||
'settings.mcp.deleteTokenTitle': 'Token löschen',
|
||
'settings.mcp.deleteTokenMessage':
|
||
'Dieser Token wird sofort ungültig. Jeder MCP-Client, der ihn verwendet, verliert den Zugang.',
|
||
'settings.mcp.modal.createTitle': 'API-Token erstellen',
|
||
'settings.mcp.modal.tokenName': 'Token-Name',
|
||
'settings.mcp.modal.tokenNamePlaceholder': 'z. B. Claude Desktop, Arbeits-Laptop',
|
||
'settings.mcp.modal.creating': 'Wird erstellt…',
|
||
'settings.mcp.modal.create': 'Token erstellen',
|
||
'settings.mcp.modal.createdTitle': 'Token erstellt',
|
||
'settings.mcp.modal.createdWarning':
|
||
'Dieser Token wird nur einmal angezeigt. Kopiere und speichere ihn jetzt — er kann nicht wiederhergestellt werden.',
|
||
'settings.mcp.modal.done': 'Fertig',
|
||
'settings.mcp.toast.created': 'Token erstellt',
|
||
'settings.mcp.toast.createError': 'Token konnte nicht erstellt werden',
|
||
'settings.mcp.toast.deleted': 'Token gelöscht',
|
||
'settings.mcp.toast.deleteError': 'Token konnte nicht gelöscht werden',
|
||
'settings.mcp.apiTokensDeprecated':
|
||
'API-Tokens sind veraltet und werden in einer zukünftigen Version entfernt. Bitte verwende stattdessen OAuth 2.1-Clients.',
|
||
'settings.oauth.clients': 'OAuth 2.1-Clients',
|
||
'settings.oauth.clientsHint':
|
||
'Registriere OAuth 2.1-Clients, damit externe MCP-Anwendungen (Claude Web, Cursor usw.) sich ohne statische Tokens verbinden können.',
|
||
'settings.oauth.createClient': 'Neuer Client',
|
||
'settings.oauth.noClients': 'Keine OAuth-Clients registriert.',
|
||
'settings.oauth.clientId': 'Client-ID',
|
||
'settings.oauth.clientSecret': 'Client-Secret',
|
||
'settings.oauth.deleteClient': 'Client löschen',
|
||
'settings.oauth.deleteClientMessage':
|
||
'Dieser Client und alle aktiven Sessions werden dauerhaft entfernt. Jede Anwendung, die ihn nutzt, verliert sofort den Zugriff.',
|
||
'settings.oauth.rotateSecret': 'Secret erneuern',
|
||
'settings.oauth.rotateSecretMessage':
|
||
'Ein neues Client-Secret wird generiert und alle bestehenden Sessions werden sofort ungültig. Aktualisiere deine Anwendung, bevor du diesen Dialog schließt.',
|
||
'settings.oauth.rotateSecretConfirm': 'Erneuern',
|
||
'settings.oauth.rotateSecretConfirming': 'Wird erneuert…',
|
||
'settings.oauth.rotateSecretDoneTitle': 'Neues Secret generiert',
|
||
'settings.oauth.rotateSecretDoneWarning':
|
||
'Dieses Secret wird nur einmal angezeigt. Kopiere es jetzt und aktualisiere deine Anwendung — alle vorherigen Sessions wurden ungültig gemacht.',
|
||
'settings.oauth.activeSessions': 'Aktive OAuth-Sessions',
|
||
'settings.oauth.sessionScopes': 'Berechtigungen',
|
||
'settings.oauth.sessionExpires': 'Läuft ab',
|
||
'settings.oauth.revoke': 'Widerrufen',
|
||
'settings.oauth.revokeSession': 'Session widerrufen',
|
||
'settings.oauth.revokeSessionMessage': 'Dadurch wird der Zugriff für diese OAuth-Session sofort widerrufen.',
|
||
'settings.oauth.modal.createTitle': 'OAuth-Client registrieren',
|
||
'settings.oauth.modal.presets': 'Schnellvorlagen',
|
||
'settings.oauth.modal.clientName': 'Anwendungsname',
|
||
'settings.oauth.modal.clientNamePlaceholder': 'z. B. Claude Web, Meine MCP-App',
|
||
'settings.oauth.modal.redirectUris': 'Redirect-URIs',
|
||
'settings.oauth.modal.redirectUrisPlaceholder': 'https://your-app.com/callback\nhttps://your-app.com/auth',
|
||
'settings.oauth.modal.redirectUrisHint':
|
||
'Eine URI pro Zeile. HTTPS erforderlich (localhost ausgenommen). Exakte Übereinstimmung erforderlich.',
|
||
'settings.oauth.modal.scopes': 'Erlaubte Berechtigungen',
|
||
'settings.oauth.modal.scopesHint':
|
||
'list_trips und get_trip_summary sind immer verfügbar — keine Berechtigung nötig. Sie helfen der KI, Trip-IDs zu ermitteln.',
|
||
'settings.oauth.modal.selectAll': 'Alle auswählen',
|
||
'settings.oauth.modal.deselectAll': 'Alle abwählen',
|
||
'settings.oauth.modal.creating': 'Wird registriert…',
|
||
'settings.oauth.modal.create': 'Client registrieren',
|
||
'settings.oauth.modal.createdTitle': 'Client registriert',
|
||
'settings.oauth.modal.createdWarning':
|
||
'Das Client-Secret wird nur einmal angezeigt. Kopiere es jetzt — es kann nicht wiederhergestellt werden.',
|
||
'settings.oauth.toast.createError': 'OAuth-Client konnte nicht registriert werden',
|
||
'settings.oauth.toast.deleted': 'OAuth-Client gelöscht',
|
||
'settings.oauth.toast.deleteError': 'OAuth-Client konnte nicht gelöscht werden',
|
||
'settings.oauth.toast.revoked': 'Session widerrufen',
|
||
'settings.oauth.toast.revokeError': 'Session konnte nicht widerrufen werden',
|
||
'settings.oauth.toast.rotateError': 'Client-Secret konnte nicht erneuert werden',
|
||
'settings.oauth.modal.machineClient': 'Maschineller Client (kein Browser-Login)',
|
||
'settings.oauth.modal.machineClientHint':
|
||
'Verwendet den client_credentials Grant — keine Redirect-URIs erforderlich. Das Token wird direkt über client_id + client_secret ausgestellt und handelt in Ihrem Namen innerhalb der gewählten Scopes.',
|
||
'settings.oauth.modal.machineClientUsage':
|
||
'Token abrufen: POST /oauth/token mit grant_type=client_credentials, client_id und client_secret. Kein Browser, kein Refresh-Token.',
|
||
'settings.oauth.badge.machine': 'Maschine',
|
||
'settings.account': 'Konto',
|
||
'settings.about': 'Über',
|
||
'settings.about.reportBug': 'Bug melden',
|
||
'settings.about.reportBugHint': 'Problem gefunden? Melde es uns',
|
||
'settings.about.featureRequest': 'Feature vorschlagen',
|
||
'settings.about.featureRequestHint': 'Schlage ein neues Feature vor',
|
||
'settings.about.wikiHint': 'Dokumentation & Anleitungen',
|
||
'settings.about.supporters.badge': 'Monatliche Unterstützer',
|
||
'settings.about.supporters.title': 'Reisebegleitung für TREK',
|
||
'settings.about.supporters.subtitle':
|
||
'Während du deine nächste Route planst, planen diese Leute mit, wie TREK weitergeht. Ihr monatlicher Beitrag fließt direkt in Entwicklung und echten Zeitaufwand — damit TREK Open Source bleibt.',
|
||
'settings.about.supporters.since': 'Unterstützer seit {date}',
|
||
'settings.about.supporters.tierEmpty': 'Sei die/der Erste',
|
||
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
|
||
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
|
||
'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer',
|
||
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
|
||
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
|
||
'settings.about.description':
|
||
'TREK ist ein selbst gehosteter Reiseplaner, der dir hilft, deine Trips von der ersten Idee bis zur letzten Erinnerung zu organisieren. Tagesplanung, Budget, Packlisten, Fotos und vieles mehr — alles an einem Ort, auf deinem eigenen Server.',
|
||
'settings.about.madeWith': 'Entwickelt mit',
|
||
'settings.about.madeBy': 'von Maurice und einer wachsenden Open-Source-Community.',
|
||
'settings.username': 'Benutzername',
|
||
'settings.email': 'E-Mail',
|
||
'settings.role': 'Rolle',
|
||
'settings.roleAdmin': 'Administrator',
|
||
'settings.oidcLinked': 'Verknüpft mit',
|
||
'settings.changePassword': 'Passwort ändern',
|
||
'settings.mustChangePassword':
|
||
'Sie müssen Ihr Passwort ändern, bevor Sie fortfahren können. Bitte legen Sie unten ein neues Passwort fest.',
|
||
'settings.currentPassword': 'Aktuelles Passwort',
|
||
'settings.currentPasswordRequired': 'Aktuelles Passwort wird benötigt',
|
||
'settings.newPassword': 'Neues Passwort',
|
||
'settings.confirmPassword': 'Neues Passwort bestätigen',
|
||
'settings.updatePassword': 'Passwort aktualisieren',
|
||
'settings.passwordRequired': 'Bitte aktuelles und neues Passwort eingeben',
|
||
'settings.passwordTooShort': 'Passwort muss mindestens 8 Zeichen lang sein',
|
||
'settings.passwordMismatch': 'Passwörter stimmen nicht überein',
|
||
'settings.passwordWeak': 'Passwort muss Groß-, Kleinbuchstaben, eine Zahl und ein Sonderzeichen enthalten',
|
||
'settings.passwordChanged': 'Passwort erfolgreich geändert',
|
||
'settings.deleteAccount': 'Löschen',
|
||
'settings.deleteAccountTitle': 'Account wirklich löschen?',
|
||
'settings.deleteAccountWarning':
|
||
'Dein Account und alle deine Reisen, Orte und Dateien werden unwiderruflich gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.',
|
||
'settings.deleteAccountConfirm': 'Endgültig löschen',
|
||
'settings.deleteBlockedTitle': 'Löschung nicht möglich',
|
||
'settings.deleteBlockedMessage':
|
||
'Du bist der einzige Administrator. Ernenne zuerst einen anderen Benutzer zum Admin, bevor du deinen Account löschen kannst.',
|
||
'settings.roleUser': 'Benutzer',
|
||
'settings.saveProfile': 'Speichern',
|
||
'settings.toast.mapSaved': 'Karteneinstellungen gespeichert',
|
||
'settings.toast.keysSaved': 'API-Schlüssel gespeichert',
|
||
'settings.toast.displaySaved': 'Anzeigeeinstellungen gespeichert',
|
||
'settings.toast.profileSaved': 'Profil aktualisiert',
|
||
'settings.uploadAvatar': 'Profilbild hochladen',
|
||
'settings.removeAvatar': 'Profilbild entfernen',
|
||
'settings.avatarUploaded': 'Profilbild aktualisiert',
|
||
'settings.avatarRemoved': 'Profilbild entfernt',
|
||
'settings.avatarError': 'Fehler beim Hochladen',
|
||
'settings.mfa.title': 'Zwei-Faktor-Authentifizierung (2FA)',
|
||
'settings.mfa.description':
|
||
'Zusätzlicher Schritt bei der Anmeldung mit E-Mail und Passwort. Nutze eine Authenticator-App (Google Authenticator, Authy, …).',
|
||
'settings.mfa.requiredByPolicy':
|
||
'Dein Administrator verlangt Zwei-Faktor-Authentifizierung. Richte unten eine Authenticator-App ein, bevor du fortfährst.',
|
||
'settings.mfa.backupTitle': 'Backup-Codes',
|
||
'settings.mfa.backupDescription':
|
||
'Verwende diese Einmal-Codes, wenn du keinen Zugriff mehr auf deine Authenticator-App hast.',
|
||
'settings.mfa.backupWarning': 'Jetzt speichern. Jeder Code kann nur einmal verwendet werden.',
|
||
'settings.mfa.backupCopy': 'Codes kopieren',
|
||
'settings.mfa.backupDownload': 'TXT herunterladen',
|
||
'settings.mfa.backupPrint': 'Drucken / PDF',
|
||
'settings.mfa.backupCopied': 'Backup-Codes kopiert',
|
||
'settings.mfa.enabled': '2FA ist für dein Konto aktiv.',
|
||
'settings.mfa.disabled': '2FA ist nicht aktiviert.',
|
||
'settings.mfa.setup': 'Authenticator einrichten',
|
||
'settings.mfa.scanQr': 'QR-Code mit der App scannen oder den Schlüssel manuell eingeben.',
|
||
'settings.mfa.secretLabel': 'Geheimer Schlüssel (manuell)',
|
||
'settings.mfa.codePlaceholder': '6-stelliger Code',
|
||
'settings.mfa.enable': '2FA aktivieren',
|
||
'settings.mfa.cancelSetup': 'Abbrechen',
|
||
'settings.mfa.disableTitle': '2FA deaktivieren',
|
||
'settings.mfa.disableHint': 'Passwort und einen aktuellen Code aus der Authenticator-App eingeben.',
|
||
'settings.mfa.disable': '2FA deaktivieren',
|
||
'settings.mfa.toastEnabled': 'Zwei-Faktor-Authentifizierung aktiviert',
|
||
'settings.mfa.toastDisabled': 'Zwei-Faktor-Authentifizierung deaktiviert',
|
||
'settings.mfa.demoBlocked': 'In der Demo nicht verfügbar',
|
||
'settings.notifyVersionAvailable': 'Neue Version verfügbar',
|
||
'settings.notificationPreferences.noChannels':
|
||
'Keine Benachrichtigungskanäle konfiguriert. Bitte einen Administrator, E-Mail- oder Webhook-Benachrichtigungen einzurichten.',
|
||
'settings.webhookUrl.label': 'Webhook-URL',
|
||
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
|
||
'settings.webhookUrl.hint':
|
||
'Gib deine Discord-, Slack- oder benutzerdefinierte Webhook-URL ein, um Benachrichtigungen zu erhalten.',
|
||
'settings.webhookUrl.saved': 'Webhook-URL gespeichert',
|
||
'settings.webhookUrl.test': 'Testen',
|
||
'settings.webhookUrl.testSuccess': 'Test-Webhook erfolgreich gesendet',
|
||
'settings.webhookUrl.testFailed': 'Test-Webhook fehlgeschlagen',
|
||
'settings.ntfyUrl.topicLabel': 'Ntfy-Thema',
|
||
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
|
||
'settings.ntfyUrl.serverLabel': 'Ntfy-Server-URL (optional)',
|
||
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
|
||
'settings.ntfyUrl.hint':
|
||
'Gib dein Ntfy-Thema ein, um Push-Benachrichtigungen zu erhalten. Lasse das Server-Feld leer, um den vom Administrator konfigurierten Standard zu verwenden.',
|
||
'settings.ntfyUrl.tokenLabel': 'Zugriffstoken (optional)',
|
||
'settings.ntfyUrl.tokenHint': 'Erforderlich für passwortgeschützte Themen.',
|
||
'settings.ntfyUrl.saved': 'Ntfy-Einstellungen gespeichert',
|
||
'settings.ntfyUrl.test': 'Testen',
|
||
'settings.ntfyUrl.testSuccess': 'Test-Ntfy-Benachrichtigung erfolgreich gesendet',
|
||
'settings.ntfyUrl.testFailed': 'Test-Ntfy-Benachrichtigung fehlgeschlagen',
|
||
'settings.ntfyUrl.tokenCleared': 'Zugriffstoken gelöscht',
|
||
'settings.notificationPreferences.inapp': 'In-App',
|
||
'settings.notificationPreferences.notConfigured':
|
||
'Noch nicht eingerichtet — in den Einstellungen des Plugins konfigurieren',
|
||
'settings.plugins.actions': 'Aktionen',
|
||
'settings.plugins.actions.confirm': 'Diese Aktion ausführen?',
|
||
'settings.notificationPreferences.sendTest': 'Test senden',
|
||
'settings.notificationPreferences.configure': 'Einrichten',
|
||
'settings.notificationPreferences.testSuccess': 'Testbenachrichtigung gesendet.',
|
||
'settings.notificationPreferences.testFailed': 'Test fehlgeschlagen.',
|
||
'settings.notificationPreferences.pluginConfigured':
|
||
'Eingerichtet. Zugangsdaten auf der Einstellungsseite des Plugins verwalten.',
|
||
'settings.notificationPreferences.webhook': 'Webhook',
|
||
'settings.notificationPreferences.email': 'Email',
|
||
'settings.notificationPreferences.ntfy': 'Ntfy',
|
||
'settings.currency': 'Währung',
|
||
'settings.currencyHint': 'Alle Beträge in Costs werden in diese Währung umgerechnet und angezeigt.',
|
||
'settings.currencyTrip': 'Reisewährung',
|
||
'settings.passkey.title': 'Passkeys',
|
||
'settings.passkey.description':
|
||
'Melde dich schneller und phishing-resistent mit einem Passkey an — per Fingerabdruck, Gesicht, PIN oder Hardware-Schlüssel. Dein Passwort bleibt als Backup erhalten.',
|
||
'settings.passkey.notConfigured':
|
||
'Passkeys sind aktiviert, aber auf diesem Server noch nicht vollständig eingerichtet. Bitte deinen Administrator, die WebAuthn-Domain festzulegen.',
|
||
'settings.passkey.add': 'Passkey hinzufügen',
|
||
'settings.passkey.addTitle': 'Passkey hinzufügen',
|
||
'settings.passkey.passwordPrompt': 'Bestätige dein aktuelles Passwort und folge dann der Aufforderung deines Geräts.',
|
||
'settings.passkey.passwordRequired': 'Dein aktuelles Passwort wird benötigt.',
|
||
'settings.passkey.namePlaceholder': 'Name (optional, z. B. "iPhone")',
|
||
'settings.passkey.addedToast': 'Passkey hinzugefügt',
|
||
'settings.passkey.added': 'Hinzugefügt',
|
||
'settings.passkey.addError': 'Passkey konnte nicht hinzugefügt werden',
|
||
'settings.passkey.cancelled': 'Passkey-Einrichtung abgebrochen',
|
||
'settings.passkey.deleted': 'Passkey entfernt',
|
||
'settings.passkey.deleteConfirm': 'Diesen Passkey entfernen? Bestätige mit deinem Passwort.',
|
||
'settings.passkey.rename': 'Umbenennen',
|
||
'settings.passkey.defaultName': 'Passkey',
|
||
'settings.passkey.synced': 'Synchronisiert',
|
||
'settings.passkey.deviceBound': 'Dieses Gerät',
|
||
'settings.passkey.lastUsed': 'Zuletzt verwendet',
|
||
'settings.passkey.neverUsed': 'Noch nie verwendet',
|
||
'settings.mapPoiPill': 'Orte auf der Karte entdecken',
|
||
'settings.mapPoiPillHint':
|
||
'Zeigt auf der Reisekarte eine Kategorie-Pille an, um Restaurants, Hotels und mehr aus OpenStreetMap in der Nähe zu finden.',
|
||
'settings.airtrail.title': 'AirTrail',
|
||
'settings.airtrail.hint':
|
||
'Verbinden Sie Ihr selbst gehostetes AirTrail, um Flüge zu importieren und zu synchronisieren. Erstellen Sie in AirTrail unter Einstellungen → Sicherheit einen API-Schlüssel.',
|
||
'settings.airtrail.url': 'Instanz-URL',
|
||
'settings.airtrail.apiKey': 'API-Schlüssel',
|
||
'settings.airtrail.apiKeyPlaceholder': 'Bearer-API-Schlüssel',
|
||
'settings.airtrail.apiKeyHint':
|
||
'Wird in AirTrail unter Einstellungen → Sicherheit erstellt. Verschlüsselt gespeichert.',
|
||
'settings.airtrail.allowInsecureTls': 'Selbstsignierte Zertifikate erlauben',
|
||
'settings.airtrail.allowInsecureTlsHint': 'Nur für eine vertrauenswürdige Instanz im eigenen Netzwerk aktivieren.',
|
||
'settings.airtrail.writeBack': 'Änderungen zurück nach AirTrail schreiben',
|
||
'settings.airtrail.writeBackHint':
|
||
'Standardmäßig aus: AirTrail ist die maßgebliche Quelle und TREK liest nur. Aktivieren, um in TREK vorgenommene Änderungen zurück an AirTrail zu senden.',
|
||
'settings.airtrail.connected': 'Verbunden',
|
||
'settings.airtrail.notConnected': 'Nicht verbunden',
|
||
'settings.airtrail.toast.saved': 'AirTrail-Verbindung gespeichert',
|
||
'settings.airtrail.toast.saveError': 'Verbindung konnte nicht gespeichert werden',
|
||
'settings.airtrail.test.button': 'Verbindung testen',
|
||
'settings.airtrail.test.success': 'Verbunden — {count} Flug/Flüge gefunden',
|
||
'settings.airtrail.test.failed': 'Verbindung fehlgeschlagen',
|
||
'settings.aiParsing.title': 'KI-Verarbeitung',
|
||
'settings.aiParsing.hint':
|
||
'Nutze dein eigenes KI-Modell, um Buchungen aus hochgeladenen Dateien auszulesen. Greift nur, wenn dein Administrator kein Modell für die gesamte Instanz konfiguriert hat.',
|
||
'settings.aiParsing.provider': 'Anbieter',
|
||
'settings.aiParsing.providerLocal': 'Lokal (Ollama)',
|
||
'settings.aiParsing.providerOpenai': 'OpenAI',
|
||
'settings.aiParsing.providerAnthropic': 'Anthropic',
|
||
'settings.aiParsing.model': 'Modell',
|
||
'settings.aiParsing.baseUrl': 'Basis-URL',
|
||
'settings.aiParsing.baseUrlHint':
|
||
'Wo das Modell läuft — ein lokaler Ollama-Server oder ein OpenAI-kompatibler Endpunkt.',
|
||
'settings.aiParsing.apiKey': 'API-Schlüssel',
|
||
'settings.aiParsing.apiKeyHint': 'Verschlüsselt gespeichert. Leer lassen, um den aktuellen Schlüssel zu behalten.',
|
||
'settings.aiParsing.multimodal': 'Dokumente als Bilder senden',
|
||
'settings.aiParsing.multimodalHint':
|
||
'Für Modelle mit Bildverständnis — sendet das Original-PDF statt extrahiertem Text.',
|
||
'settings.aiParsing.toast.saved': 'KI-Einstellungen gespeichert',
|
||
'settings.aiParsing.toast.saveError': 'KI-Einstellungen konnten nicht gespeichert werden',
|
||
'settings.tabs.appearance': 'Erscheinungsbild',
|
||
'settings.appearance.theme': 'Theme',
|
||
'settings.appearance.scheme': 'Farbschema',
|
||
'settings.appearance.scheme.default': 'Standard',
|
||
'settings.appearance.scheme.highContrast': 'Hoher Kontrast',
|
||
'settings.appearance.scheme.indigo': 'Indigo',
|
||
'settings.appearance.scheme.teal': 'Türkis',
|
||
'settings.appearance.scheme.rose': 'Rosé',
|
||
'settings.appearance.scheme.amber': 'Bernstein',
|
||
'settings.appearance.scheme.violet': 'Violett',
|
||
'settings.appearance.scheme.custom': 'Eigene',
|
||
'settings.appearance.customAccent': 'Eigene Akzentfarbe',
|
||
'settings.appearance.contrastOk': 'Guter Kontrast',
|
||
'settings.appearance.contrastLow': 'Niedriger Kontrast',
|
||
'settings.appearance.readability': 'Lesbarkeit',
|
||
'settings.appearance.transparency': 'Transparenz',
|
||
'settings.appearance.transparencyHint':
|
||
'Glasige, durchscheinende Flächen. Aus = solide, kontrastreichere Hintergründe.',
|
||
'settings.appearance.reduceMotion': 'Bewegung reduzieren',
|
||
'settings.appearance.reduceMotionHint': 'Animationen und Übergänge minimieren.',
|
||
'settings.appearance.density': 'Dichte',
|
||
'settings.appearance.comfortable': 'Komfortabel',
|
||
'settings.appearance.compact': 'Kompakt',
|
||
'settings.appearance.textSize': 'Textgröße',
|
||
'settings.appearance.advancedTextSizes': 'Erweiterte Textgrößen',
|
||
'settings.appearance.hideAdvanced': 'Erweitert ausblenden',
|
||
'settings.appearance.tier.title': 'Titel',
|
||
'settings.appearance.tier.subtitle': 'Untertitel',
|
||
'settings.appearance.tier.body': 'Fließtext',
|
||
'settings.appearance.tier.caption': 'Beschriftungen',
|
||
'settings.appearance.dashboardWidgets': 'Dashboard-Widgets',
|
||
'settings.appearance.dashboardWidgetsHint': 'Dashboard-Widgets unabhängig für Desktop und Mobil ein-/ausblenden.',
|
||
'settings.appearance.desktop': 'Desktop',
|
||
'settings.appearance.mobile': 'Mobil',
|
||
'settings.appearance.widget.sidebar': 'Rechte Seitenleiste',
|
||
'settings.appearance.widget.currency': 'Währung',
|
||
'settings.appearance.widget.collections': 'Sammlungen',
|
||
'settings.appearance.widget.timezones': 'Zeitzonen',
|
||
'settings.appearance.widget.upcomingReservations': 'Anstehende Reservierungen',
|
||
'settings.appearance.widget.atlas': 'Atlas / Länder',
|
||
'settings.appearance.widget.tripsTotal': 'Reisen gesamt',
|
||
'settings.appearance.widget.daysTraveled': 'Reisetage',
|
||
'settings.appearance.widget.distanceFlown': 'Flugdistanz',
|
||
'settings.appearance.reset': 'Auf Standard zurücksetzen',
|
||
'settings.appearance.group.belowHero': 'Unter dem Hero',
|
||
'settings.appearance.group.bottomOfPage': 'Seitenende',
|
||
'settings.appearance.sidebarHint': 'Die ganze rechte Spalte. Aus → das Dashboard zentriert sich.',
|
||
'settings.appearance.densityHint': 'Kompakt verringert Abstände und Innenabstände für ein dichteres Layout.',
|
||
'settings.appearance.textSizeAll': 'Alles',
|
||
'settings.appearance.perSize': 'Jede Größe einzeln anpassen',
|
||
'settings.appearance.size.large': 'Groß',
|
||
'settings.appearance.size.medium': 'Mittel',
|
||
'settings.appearance.size.normal': 'Normal',
|
||
'settings.appearance.size.small': 'Klein',
|
||
'settings.appearance.preview.large': 'Große Überschrift',
|
||
'settings.appearance.preview.medium': 'Mittlerer Untertitel',
|
||
'settings.appearance.preview.normal': 'Normaler Fließtext',
|
||
'settings.appearance.preview.small': 'Kleine Beschriftung / Adresse',
|
||
'settings.appearance.example.large': 'Überschriften, große Zahlen',
|
||
'settings.appearance.example.medium': 'Zwischenüberschriften',
|
||
'settings.appearance.example.normal': 'Ortsnamen, Beschreibungen',
|
||
'settings.appearance.example.small': 'Adressen, Labels',
|
||
'settings.appearance.experimental': 'Experimentell',
|
||
'settings.appearance.mobileNav': 'Untere Navigationsleiste',
|
||
'settings.appearance.mobileNav.hint':
|
||
'Lege fest, welche Punkte in der Leiste erscheinen und welche unter „Mehr“ liegen. Das Dashboard bleibt immer an erster Stelle.',
|
||
'settings.appearance.mobileNav.inBar': 'In der Leiste',
|
||
'settings.appearance.mobileNav.underMore': 'Unter „Mehr“',
|
||
'settings.appearance.mobileNav.moreEmpty': 'Noch nichts hier – alles passt in die Leiste.',
|
||
'settings.appearance.mobileNav.pinned': 'Fixiert',
|
||
'settings.appearance.mobileNav.toMore': 'Unter „Mehr“ verschieben',
|
||
'settings.appearance.mobileNav.toBar': 'In die Leiste verschieben',
|
||
'settings.appearance.dashOrder': 'Dashboard-Reihenfolge',
|
||
'settings.appearance.dashOrder.hint':
|
||
'Ordne, wie Trip-Liste und Widgets auf deinem Handy-Dashboard gestapelt sind. Der hervorgehobene Trip bleibt immer oben.',
|
||
'settings.appearance.dashOrder.trips': 'Trips',
|
||
'settings.appearance.dashOrder.hidden': 'Ausgeblendet',
|
||
'settings.general.languageRegion': 'Sprache & Region',
|
||
'settings.general.travelMap': 'Reise & Karte',
|
||
|
||
// ── Offline (#1135) ────────────────────────────────────────────────────────
|
||
'settings.offline.cache.title': 'Offline-Cache',
|
||
'settings.offline.mode.title': 'Offline-Modus',
|
||
'settings.offline.mode.force': 'Offline-Modus erzwingen',
|
||
'settings.offline.mode.forceHint':
|
||
'Nur mit zwischengespeicherten Daten arbeiten und Änderungen in die Warteschlange legen. Zum Verbinden und Synchronisieren ausschalten.',
|
||
'settings.offline.mode.active':
|
||
'Offline-Modus ist an — deine Änderungen werden gesammelt und beim Ausschalten synchronisiert.',
|
||
'settings.offline.prepare.title': 'Für Offline vorbereiten',
|
||
'settings.offline.prepare.hint':
|
||
'Lade alles Nötige herunter — Reisedaten, Dokumente und Kartenkacheln — bevor du die Verbindung verlierst.',
|
||
'settings.offline.prepare.button': 'Für Offline-Nutzung herunterladen',
|
||
'settings.offline.prepare.running': 'Lädt herunter…',
|
||
'settings.offline.prepare.done': 'Bereit für die Offline-Nutzung',
|
||
'settings.offline.prepare.phase.trips': 'Reisedaten',
|
||
'settings.offline.prepare.phase.files': 'Dokumente',
|
||
'settings.offline.prepare.phase.tiles': 'Kartenkacheln',
|
||
'settings.offline.resync': 'Jetzt neu synchronisieren',
|
||
'settings.offline.resyncing': 'Synchronisiert…',
|
||
'settings.offline.storage.title': 'Was offline gespeichert wird',
|
||
'settings.offline.storage.tiles': 'Kartenkacheln offline speichern',
|
||
'settings.offline.storage.tilesHint':
|
||
'Kartenkacheln brauchen den meisten Speicher. Schalte dies aus, um nur Reisedaten und Dokumente offline zu behalten.',
|
||
'settings.offline.storage.tripsTitle': 'Reisen',
|
||
'settings.offline.storage.tripOn': 'Offline gespeichert',
|
||
'settings.offline.storage.tripOff': 'Nicht gespeichert',
|
||
'settings.offline.clear': 'Cache leeren',
|
||
'settings.offline.clearConfirm':
|
||
'Alle offline gespeicherten Reisedaten löschen? Du kannst jederzeit online neu synchronisieren.',
|
||
'settings.offline.stats.trips': 'Zwischengespeicherte Reisen',
|
||
'settings.offline.stats.pending': 'Ausstehende Änderungen',
|
||
'settings.offline.stats.failed': 'Fehlgeschlagene Änderungen',
|
||
'settings.offline.stats.conflicts': 'Konflikte',
|
||
'settings.offline.empty':
|
||
'Noch keine Reisen zwischengespeichert. Verbinde dich mit dem Internet zum Synchronisieren.',
|
||
'settings.offline.loading': 'Lädt…',
|
||
'settings.offline.conflicts.title': 'Synchronisierungskonflikte',
|
||
'settings.offline.conflicts.hint':
|
||
'Offline vorgenommene Änderungen kollidieren mit neueren Änderungen auf dem Server. Wähle, welche Version behalten werden soll.',
|
||
'settings.offline.conflicts.keepMine': 'Meine behalten',
|
||
'settings.offline.conflicts.keepServer': 'Server behalten',
|
||
'settings.offline.conflicts.mine': 'Deine Version',
|
||
'settings.offline.conflicts.server': 'Server-Version',
|
||
'settings.offline.conflicts.item': 'Änderung an „{name}“',
|
||
'settings.offline.conflicts.strategyTitle': 'Bei einem Konflikt',
|
||
'settings.offline.conflicts.strategy.ask': 'Jedes Mal nachfragen',
|
||
'settings.offline.conflicts.strategy.mine': 'Immer meine Version behalten',
|
||
'settings.offline.conflicts.strategy.server': 'Immer die Server-Version behalten',
|
||
'settings.offline.banner.offline': 'Offline',
|
||
'settings.offline.banner.forced': 'Offline-Modus',
|
||
'settings.offline.banner.queued': 'Offline · {count} in Warteschlange',
|
||
'settings.offline.banner.syncing': 'Synchronisiert {count}…',
|
||
'settings.offline.banner.failed': 'Synchronisierung fehlgeschlagen: {count}',
|
||
'settings.offline.banner.conflicts': 'Konflikte: {count}',
|
||
'settings.pluginActivity.title': 'Plugin-Aktivität',
|
||
'settings.pluginActivity.description': 'Jede Aktion, die ein Plugin in deinem Namen ausgeführt hat – neueste zuerst.',
|
||
'settings.pluginActivity.empty': 'Noch keine Plugin-Aktivität.',
|
||
'settings.pluginActivity.refresh': 'Aktualisieren',
|
||
'settings.pluginActivity.columns.plugin': 'Plugin',
|
||
'settings.pluginActivity.columns.action': 'Aktion',
|
||
'settings.pluginActivity.columns.resource': 'Ressource',
|
||
'settings.pluginActivity.columns.when': 'Zeitpunkt',
|
||
'settings.pluginActivity.columns.status': 'Ergebnis',
|
||
'settings.alwaysShowRoutes': 'Buchungsrouten immer anzeigen',
|
||
'settings.alwaysShowRoutesHint':
|
||
'Zeigt die Route für jeden Flug, jede Zugfahrt und jede andere Buchung automatisch auf der Karte an – ohne sie einzeln aktivieren zu müssen.',
|
||
};
|
||
|
||
export default settings;
|