mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
661777f81f
A journal importer can create the journey, create its entries and write their stories, and then it stops: there was no way to give an entry a picture. The seven journal.* methods cover text and nothing else, so an importer reading an export archive could only upload its photos as trip files, which live on a trip and never reach the journey's gallery. journal.addEntryPhoto takes the bytes. Deliberately not a link to an existing gallery photo and not a provider asset: an importer holding an archive has neither, it has a file it just unpacked. The access decision stays where it already was. addPhoto answers null unless the acting user may edit the journey the entry belongs to, and null becomes RESOURCE_FORBIDDEN here, so a plugin reaches exactly the entries its acting user does. Everything the REST upload refuses, this refuses too: images only and no SVG, the operator's allowed-file-types setting, 10MB decoded, demo mode. The stored filename is the host's, never the plugin's, because the gallery dedupes on file_path. The object is written before any row points at it and removed again when the link is refused. JournalRpc moves into its own module for this. It now needs StorageService and the EXIF backfill out of MemoriesModule, and JourneyDomainModule exists precisely so places, assignments and the plugin host can reach a few journey functions without dragging both photo providers into their graphs. Discussion #1365
710 lines
49 KiB
TypeScript
710 lines
49 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
|
|
|
const admin: TranslationStrings = {
|
|
'admin.notifications.title': 'Benachrichtigungen',
|
|
'admin.notifications.hint': 'Wählen Sie einen Benachrichtigungskanal. Es kann nur einer gleichzeitig aktiv sein.',
|
|
'admin.notifications.none': 'Deaktiviert',
|
|
'admin.notifications.email': 'E-Mail (SMTP)',
|
|
'admin.notifications.webhook': 'Webhook',
|
|
'admin.notifications.save': 'Benachrichtigungseinstellungen speichern',
|
|
'admin.notifications.saved': 'Benachrichtigungseinstellungen gespeichert',
|
|
'admin.notifications.testWebhook': 'Test-Webhook senden',
|
|
'admin.notifications.testWebhookSuccess': 'Test-Webhook erfolgreich gesendet',
|
|
'admin.notifications.testWebhookFailed': 'Test-Webhook fehlgeschlagen',
|
|
'admin.smtp.title': 'E-Mail & Benachrichtigungen',
|
|
'admin.smtp.hint': 'SMTP-Konfiguration zum Versenden von E-Mail-Benachrichtigungen.',
|
|
'admin.smtp.testButton': 'Test-E-Mail senden',
|
|
'admin.webhook.hint': 'Benachrichtigungen an einen externen Webhook senden (Discord, Slack usw.).',
|
|
'admin.smtp.testSuccess': 'Test-E-Mail erfolgreich gesendet',
|
|
'admin.smtp.testFailed': 'Test-E-Mail fehlgeschlagen',
|
|
'admin.title': 'Administration',
|
|
'admin.subtitle': 'Benutzerverwaltung und Systemeinstellungen',
|
|
'admin.tabs.users': 'Benutzer',
|
|
'admin.tabs.categories': 'Kategorien',
|
|
'admin.tabs.backup': 'Backup',
|
|
'admin.tabs.audit': 'Audit',
|
|
'admin.stats.users': 'Benutzer',
|
|
'admin.stats.trips': 'Reisen',
|
|
'admin.stats.places': 'Orte',
|
|
'admin.stats.photos': 'Fotos',
|
|
'admin.stats.files': 'Dateien',
|
|
'admin.table.user': 'Benutzer',
|
|
'admin.table.email': 'E-Mail',
|
|
'admin.table.role': 'Rolle',
|
|
'admin.table.created': 'Erstellt',
|
|
'admin.table.lastLogin': 'Letzter Login',
|
|
'admin.table.actions': 'Aktionen',
|
|
'admin.you': '(Du)',
|
|
'admin.editUser': 'Benutzer bearbeiten',
|
|
'admin.newPassword': 'Neues Passwort',
|
|
'admin.newPasswordHint': 'Leer lassen, um das Passwort nicht zu ändern',
|
|
'admin.deleteUser': 'Benutzer "{name}" löschen? Alle Reisen werden unwiderruflich gelöscht.',
|
|
'admin.deleteUserTitle': 'Benutzer löschen',
|
|
'admin.newPasswordPlaceholder': 'Neues Passwort eingeben…',
|
|
'admin.toast.loadError': 'Fehler beim Laden der Admin-Daten',
|
|
'admin.toast.userUpdated': 'Benutzer aktualisiert',
|
|
'admin.toast.updateError': 'Fehler beim Aktualisieren',
|
|
'admin.toast.userDeleted': 'Benutzer gelöscht',
|
|
'admin.toast.deleteError': 'Fehler beim Löschen',
|
|
'admin.toast.cannotDeleteSelf': 'Eigenes Konto kann nicht gelöscht werden',
|
|
'admin.toast.userCreated': 'Benutzer erstellt',
|
|
'admin.toast.createError': 'Fehler beim Erstellen des Benutzers',
|
|
'admin.toast.fieldsRequired': 'Benutzername, E-Mail und Passwort sind erforderlich',
|
|
'admin.createUser': 'Benutzer anlegen',
|
|
'admin.invite.title': 'Einladungslinks',
|
|
'admin.invite.subtitle': 'Einmal-Links für die Registrierung erstellen',
|
|
'admin.invite.create': 'Link erstellen',
|
|
'admin.invite.createAndCopy': 'Erstellen & kopieren',
|
|
'admin.invite.empty': 'Noch keine Einladungslinks erstellt',
|
|
'admin.invite.maxUses': 'Max. Nutzungen',
|
|
'admin.invite.expiry': 'Gültig für',
|
|
'admin.invite.uses': 'genutzt',
|
|
'admin.invite.expiresAt': 'läuft ab am',
|
|
'admin.invite.createdBy': 'von',
|
|
'admin.invite.active': 'Aktiv',
|
|
'admin.invite.expired': 'Abgelaufen',
|
|
'admin.invite.usedUp': 'Aufgebraucht',
|
|
'admin.invite.copied': 'Einladungslink in Zwischenablage kopiert',
|
|
'admin.invite.copyLink': 'Link kopieren',
|
|
'admin.invite.deleted': 'Einladungslink gelöscht',
|
|
'admin.invite.createError': 'Fehler beim Erstellen des Einladungslinks',
|
|
'admin.invite.deleteError': 'Fehler beim Löschen des Einladungslinks',
|
|
'admin.tabs.settings': 'Einstellungen',
|
|
'admin.allowRegistration': 'Registrierung erlauben',
|
|
'admin.allowRegistrationHint': 'Neue Benutzer können sich selbst registrieren',
|
|
'admin.authMethods': 'Authentication Methods',
|
|
'admin.passwordLogin': 'Password Login',
|
|
'admin.passwordLoginHint': 'Allow users to sign in with email and password',
|
|
'admin.passwordRegistration': 'Password Registration',
|
|
'admin.passwordRegistrationHint': 'Allow new users to register with email and password',
|
|
'admin.oidcLogin': 'SSO Login',
|
|
'admin.oidcLoginHint': 'Allow users to sign in with SSO',
|
|
'admin.oidcRegistration': 'SSO Auto-Provisioning',
|
|
'admin.oidcRegistrationHint': 'Automatically create accounts for new SSO users',
|
|
'admin.envOverrideHint':
|
|
'Password login settings are controlled by the OIDC_ONLY environment variable and cannot be changed here.',
|
|
'admin.lockoutWarning': 'At least one login method must remain enabled',
|
|
'admin.requireMfa': 'Zwei-Faktor-Authentifizierung (2FA) für alle verlangen',
|
|
'admin.requireMfaHint':
|
|
'Benutzer ohne 2FA müssen die Einrichtung unter Einstellungen abschließen, bevor sie die App nutzen können.',
|
|
'admin.apiKeys': 'API-Schlüssel',
|
|
'admin.apiKeysHint': 'Optional. Aktiviert erweiterte Ortsdaten wie Fotos und Wetter.',
|
|
'admin.mapsKey': 'Google Maps API-Schlüssel',
|
|
'admin.mapsKeyHint': 'Für Ortsuche benötigt. Erstellen unter console.cloud.google.com',
|
|
'admin.mapsKeyHintLong':
|
|
'Ohne API Key wird OpenStreetMap für die Ortssuche genutzt. Mit Google API Key können zusätzlich Bilder, Bewertungen und Öffnungszeiten geladen werden. Erstellen unter console.cloud.google.com.',
|
|
'admin.recommended': 'Empfohlen',
|
|
'admin.weatherKey': 'OpenWeatherMap API-Schlüssel',
|
|
'admin.weatherKeyHint': 'Für Wetterdaten. Kostenlos unter openweathermap.org',
|
|
'admin.unsplashKey': 'Unsplash-API-Schlüssel',
|
|
'admin.unsplashKeyHint': 'Für die Bildsuche. Kostenlos unter unsplash.com/developers',
|
|
'admin.validateKey': 'Test',
|
|
'admin.keyValid': 'Verbunden',
|
|
'admin.keyInvalid': 'Ungültig',
|
|
'admin.keySaved': 'API-Schlüssel gespeichert',
|
|
'admin.oidcTitle': 'Single Sign-On (OIDC)',
|
|
'admin.oidcSubtitle': 'Anmeldung über externe Anbieter wie Google, Apple, Authentik oder Keycloak.',
|
|
'admin.oidcDisplayName': 'Anzeigename',
|
|
'admin.oidcIssuer': 'Issuer URL',
|
|
'admin.oidcIssuerHint': 'Die OpenID Connect Issuer URL des Anbieters. z.B. https://accounts.google.com',
|
|
'admin.oidcSaved': 'OIDC-Konfiguration gespeichert',
|
|
'admin.oidcOnlyMode': 'Passwort-Authentifizierung deaktivieren',
|
|
'admin.oidcOnlyModeHint':
|
|
'Wenn aktiviert, ist nur SSO-Login erlaubt. Passwort-Login und Registrierung werden blockiert.',
|
|
'admin.fileTypes': 'Erlaubte Dateitypen',
|
|
'admin.fileTypesHint': 'Konfiguriere welche Dateitypen hochgeladen werden dürfen.',
|
|
'admin.fileTypesFormat': 'Kommagetrennte Endungen (z.B. jpg,png,pdf,doc). Verwende * um alle Typen zu erlauben.',
|
|
'admin.fileTypesSaved': 'Dateityp-Einstellungen gespeichert',
|
|
'admin.placesPhotos.title': 'Ortsfotos',
|
|
'admin.placesPhotos.subtitle':
|
|
'Fotos von der Google Places API laden. Deaktivieren, um API-Kontingent zu sparen. Wikimedia-Fotos sind davon nicht betroffen.',
|
|
'admin.placesAutocomplete.title': 'Orts-Autovervollständigung',
|
|
'admin.placesAutocomplete.subtitle':
|
|
'Google Places API für Suchvorschläge nutzen. Deaktivieren, um API-Kontingent zu sparen.',
|
|
'admin.placesDetails.title': 'Ortsdetails',
|
|
'admin.placesDetails.subtitle':
|
|
'Detaillierte Ortsinformationen (Öffnungszeiten, Bewertung, Website) von der Google Places API laden. Deaktivieren, um API-Kontingent zu sparen.',
|
|
'admin.placesEnrich.title': 'Ortsanreicherung',
|
|
'admin.placesEnrich.subtitle':
|
|
'Bilder und eine Beschreibung beim Hinzufügen eines Ortes anzeigen. Wikipedia und OpenStreetMap werden immer genutzt; Google kommt zusätzlich dazu, wenn Ortsfotos oder Ortsdetails aktiv sind.',
|
|
'admin.bagTracking.title': 'Gepäck-Tracking',
|
|
'admin.bagTracking.subtitle': 'Gewicht und Gepäckstück-Zuordnung für Packlisteneinträge aktivieren',
|
|
'admin.collab.chat.title': 'Chat',
|
|
'admin.collab.chat.subtitle': 'Echtzeit-Nachrichten für die Reiseplanung',
|
|
'admin.collab.notes.title': 'Notizen',
|
|
'admin.collab.notes.subtitle': 'Gemeinsame Notizen und Dokumente',
|
|
'admin.collab.polls.title': 'Umfragen',
|
|
'admin.collab.polls.subtitle': 'Gruppen-Umfragen und Abstimmungen',
|
|
'admin.collab.whatsnext.title': 'Was kommt als Nächstes',
|
|
'admin.collab.whatsnext.subtitle': 'Aktivitätsvorschläge und nächste Schritte',
|
|
'admin.tabs.config': 'Personalisierung',
|
|
'admin.tabs.defaults': 'Benutzer-Standards',
|
|
'admin.defaultSettings.title': 'Standard-Benutzereinstellungen',
|
|
'admin.defaultSettings.description':
|
|
'Instanzweite Standards festlegen. Benutzer, die eine Einstellung nicht geändert haben, sehen diese Werte. Eigene Änderungen haben immer Vorrang.',
|
|
'admin.defaultSettings.saved': 'Standard gespeichert',
|
|
'admin.defaultSettings.reset': 'Auf eingebauten Standard zurücksetzen',
|
|
'admin.defaultSettings.resetToBuiltIn': 'zurücksetzen',
|
|
'admin.tabs.templates': 'Packvorlagen',
|
|
'admin.packingTemplates.title': 'Packvorlagen',
|
|
'admin.packingTemplates.subtitle': 'Wiederverwendbare Packlisten für deine Reisen erstellen',
|
|
'admin.packingTemplates.create': 'Neue Vorlage',
|
|
'admin.packingTemplates.namePlaceholder': 'Vorlagenname (z.B. Strandurlaub)',
|
|
'admin.packingTemplates.empty': 'Noch keine Vorlagen erstellt',
|
|
'admin.packingTemplates.items': 'Einträge',
|
|
'admin.packingTemplates.categories': 'Kategorien',
|
|
'admin.packingTemplates.itemName': 'Artikelname',
|
|
'admin.packingTemplates.itemCategory': 'Kategorie',
|
|
'admin.packingTemplates.categoryName': 'Kategoriename (z.B. Kleidung)',
|
|
'admin.packingTemplates.addCategory': 'Kategorie hinzufügen',
|
|
'admin.packingTemplates.created': 'Vorlage erstellt',
|
|
'admin.packingTemplates.deleted': 'Vorlage gelöscht',
|
|
'admin.packingTemplates.loadError': 'Vorlagen konnten nicht geladen werden',
|
|
'admin.packingTemplates.createError': 'Vorlage konnte nicht erstellt werden',
|
|
'admin.packingTemplates.deleteError': 'Vorlage konnte nicht gelöscht werden',
|
|
'admin.packingTemplates.deleteCategoryError': 'Kategorie konnte nicht gelöscht werden',
|
|
'admin.packingTemplates.deleteItemError': 'Eintrag konnte nicht gelöscht werden',
|
|
'admin.packingTemplates.saveError': 'Fehler beim Speichern',
|
|
'admin.tabs.addons': 'Addons',
|
|
'admin.tabs.plugins': 'Plugins',
|
|
'admin.tabs.storage': 'Speicher',
|
|
'admin.plugins.rescan': 'Neu scannen',
|
|
'admin.plugins.rescanned': 'Plugin-Ordner neu gescannt',
|
|
'admin.plugins.upload': 'Plugin hochladen',
|
|
'admin.plugins.dropToUpload': 'Plugin-.zip zum Installieren hier ablegen',
|
|
'admin.plugins.uploaded': 'Plugin „{name}“ hochgeladen — zum Ausführen aktivieren',
|
|
'admin.plugins.sideloaded': 'Manuell geladen',
|
|
'admin.plugins.devLinkBadge': 'Dev-Link',
|
|
'admin.plugins.devLinkHint':
|
|
'Aus einem lokalen Build-Verzeichnis geladen und gegen echte Daten neu geladen — nur für Entwicklung',
|
|
'admin.plugins.devLinkTitle': 'Lokales Plugin verknüpfen',
|
|
'admin.plugins.devLinkPathPlaceholder': '/absolute/path/to/your/plugin',
|
|
'admin.plugins.devLinkButton': 'Verknüpfen',
|
|
'admin.plugins.devLinkLinked': '{id} verknüpft — zum Ausführen aktivieren',
|
|
'admin.plugins.sideloadedHint': 'Manuell hochgeladen — nicht aus der Registry, unsigniert und ungeprüft',
|
|
'admin.plugins.browse': 'Plugins durchsuchen',
|
|
'admin.plugins.installed': 'Installiert',
|
|
'admin.plugins.install': 'Installieren',
|
|
'admin.plugins.registryEmpty': 'Noch keine Plugins in der Registry verfügbar.',
|
|
'admin.plugins.actionError': 'Aktion fehlgeschlagen',
|
|
'admin.plugins.activate': 'Aktivieren',
|
|
'admin.plugins.activated': 'Plugin aktiviert',
|
|
'admin.plugins.deactivate': 'Deaktivieren',
|
|
'admin.plugins.deactivated': 'Plugin deaktiviert',
|
|
'admin.plugins.viewErrors': 'Fehlerprotokoll ansehen',
|
|
'admin.plugins.errorLog': 'Fehlerprotokoll',
|
|
'admin.plugins.allowedHosts': 'Erlaubte Hosts',
|
|
'admin.plugins.allowedHosts.hint':
|
|
'Dieses Plugin spricht mit einem Dienst, den nur du benennen kannst (ein selbst gehosteter Server). Füge die Hosts hinzu, die es erreichen darf — andere erreicht es nicht.',
|
|
'admin.plugins.allowedHosts.none': 'Noch keine Hosts hinzugefügt.',
|
|
'admin.plugins.allowedHosts.unsupported':
|
|
'Dieses Plugin nutzt keine vom Betreiber angegebenen Hosts. Seine erlaubten Hosts stehen fest im Manifest.',
|
|
'admin.plugins.allowedHosts.restartNote':
|
|
'Beim Speichern wird das Plugin neu gestartet, damit es die neue Liste übernimmt.',
|
|
'admin.plugins.allowedHosts.add': 'Erlaubten Host hinzufügen',
|
|
'admin.plugins.allowedHosts.count': '{n} erlaubte Hosts',
|
|
'admin.plugins.operatorEgressPill': '+ von dir ergänzte Hosts',
|
|
'admin.plugins.operatorEgressHint':
|
|
'Dieses Plugin spricht mit einem Dienst, den nur du benennen kannst (ein selbst gehosteter Server). Füge nach der Installation unter ⋯ → Erlaubte Hosts die erreichbaren Hosts hinzu. Andere erreicht es nicht.',
|
|
'admin.plugins.noErrors': 'Keine Fehler protokolliert.',
|
|
'admin.plugins.uninstalled': 'Plugin deinstalliert',
|
|
'admin.plugins.uninstallTitle': 'Plugin deinstallieren?',
|
|
'admin.plugins.uninstallBody':
|
|
'Das stoppt das Plugin, entfernt seinen Code und löscht alle seine Daten. Das kann nicht rückgängig gemacht werden.',
|
|
'admin.plugins.status.starting': 'Startet…',
|
|
'admin.plugins.type.widget': 'Widget',
|
|
'admin.plugins.type.page': 'Seite',
|
|
'admin.plugins.type.integration': 'Integration',
|
|
'admin.plugins.type.trip-page': 'Reise-Seite',
|
|
'admin.plugins.reviewed': 'Geprüft',
|
|
'admin.plugins.unreviewed': 'Ungeprüft',
|
|
'admin.plugins.updated': 'Plugin aktualisiert',
|
|
'admin.plugins.updateTo': 'Update → v{version}',
|
|
'admin.plugins.enabledToggle': 'Plugin aktivieren',
|
|
'plugins.notFound': 'Plugin nicht gefunden',
|
|
'plugins.frameLoadFailed': 'Dieses Plugin konnte nicht geladen werden.',
|
|
'admin.plugins.title': 'Plugins',
|
|
'admin.plugins.subtitle': 'Plugins von Drittanbietern auf deiner Instanz installieren und verwalten.',
|
|
'admin.plugins.disabledTitle': 'Plugins sind deaktiviert',
|
|
'admin.plugins.disabledBody':
|
|
'Die Plugin-Laufzeit ist ausgeschaltet (TREK_PLUGINS_ENABLED). Es kann kein Plugin laufen, bis ein Admin sie in der Serverkonfiguration aktiviert.',
|
|
'admin.plugins.empty': 'Noch keine Plugins installiert.',
|
|
'admin.plugins.loadError': 'Plugins konnten nicht geladen werden.',
|
|
'admin.plugins.scaffoldNote':
|
|
'Installation und Aktivierung von Plugins folgen in einem späteren Update. Dieses Panel zeigt derzeit nur installierte Plugins an.',
|
|
'admin.plugins.status.active': 'Aktiv',
|
|
'admin.plugins.status.inactive': 'Inaktiv',
|
|
'admin.plugins.status.disabled': 'Deaktiviert',
|
|
'admin.plugins.status.error': 'Fehler',
|
|
'admin.plugins.status.incompatible': 'Inkompatibel',
|
|
'admin.plugins.details': 'Details',
|
|
'admin.plugins.detailError': 'Plugin-Details konnten nicht geladen werden.',
|
|
'admin.plugins.permissionsTitle': 'Berechtigungen',
|
|
'admin.plugins.noPermissions': 'Dieses Plugin benötigt keine besonderen Berechtigungen.',
|
|
'admin.plugins.egressNote': 'Darf verbinden zu: {hosts}',
|
|
'admin.plugins.setupTitle': 'Einrichtung',
|
|
'admin.plugins.noSetup': 'Funktioniert sofort — nichts zu konfigurieren.',
|
|
'admin.plugins.scope.instance': 'Instanzweit',
|
|
'admin.plugins.scope.user': 'Pro Nutzer',
|
|
'admin.plugins.fieldRequired': 'Erforderlich',
|
|
'admin.plugins.sourceRepo': 'Quell-Repository',
|
|
'admin.plugins.reportIssue': 'Problem melden',
|
|
'admin.plugins.homepage': 'Homepage',
|
|
'admin.plugins.requiresTrek': 'Benötigt TREK {version}+',
|
|
'admin.plugins.reviewedOn': 'Geprüft am {date}',
|
|
'admin.plugins.perm.db:own': 'Eigene Daten in einer isolierten Datenbank speichern',
|
|
'admin.plugins.perm.db:read:trips': 'Reisen lesen, auf die der handelnde Nutzer Zugriff hat',
|
|
'admin.plugins.perm.db:read:users': 'Grundlegende Profilinfos lesen (Name, Avatar — nie Zugangsdaten)',
|
|
'admin.plugins.perm.db:read:costs': 'Ausgaben (Budgetposten) lesen, auf die der handelnde Nutzer Zugriff hat',
|
|
'admin.plugins.perm.db:read:packing': 'Packlisten von Reisen lesen, auf die der handelnde Nutzer Zugriff hat',
|
|
'admin.plugins.perm.db:write:packing':
|
|
'Packlisten-Einträge auf Reisen anlegen, bearbeiten und löschen, die der handelnde Nutzer bearbeiten kann',
|
|
'admin.plugins.perm.weather:read': 'Die zwischengespeicherte Wettervorhersage des Hosts lesen (nach Koordinaten)',
|
|
'admin.plugins.perm.db:read:categories': 'Die globale Orts-Kategorienliste lesen',
|
|
'admin.plugins.perm.db:read:tags': 'Die eigenen Tags des handelnden Nutzers lesen',
|
|
'admin.plugins.perm.db:write:tags': 'Die eigenen Tags des handelnden Nutzers anlegen, bearbeiten und löschen',
|
|
'admin.plugins.perm.db:read:todos': 'To-dos von Reisen lesen, auf die der handelnde Nutzer Zugriff hat',
|
|
'admin.plugins.perm.db:write:todos':
|
|
'To-dos auf Reisen anlegen, bearbeiten und löschen, die der handelnde Nutzer bearbeiten kann',
|
|
'admin.plugins.perm.db:write:atlas':
|
|
'Länder und Regionen als besucht markieren und die Bucket-List des handelnden Nutzers verwalten (benötigt das Atlas-Addon)',
|
|
'admin.plugins.perm.db:write:vacay':
|
|
'Urlaubstage und Betriebsferien im aktiven Plan des handelnden Nutzers umschalten (benötigt das Vacay-Addon)',
|
|
'admin.plugins.perm.db:write:journal':
|
|
'Tagebucheinträge in Reisetagebüchern anlegen, bearbeiten, löschen und mit Fotos versehen, die der handelnde Nutzer bearbeiten kann (benötigt das Journey-Addon)',
|
|
'admin.plugins.perm.db:write:collections':
|
|
'Sammlungen anlegen und bearbeiten und Orte darin speichern, mit der Sammlungsrolle des handelnden Nutzers (benötigt das Collections-Addon)',
|
|
'admin.plugins.perm.db:write:files':
|
|
'Dateien an Reisen anhängen, die der handelnde Nutzer bearbeiten kann (10-MB-Limit, gesperrte Endungen abgelehnt), und deren Verknüpfungen verwalten',
|
|
'admin.plugins.perm.db:write:collab':
|
|
'Notizen, Umfragen und Chat-Nachrichten auf Reisen erstellen, die der handelnde Nutzer bearbeiten kann (benötigt das Collab-Addon)',
|
|
'admin.plugins.perm.db:write:members':
|
|
'Nutzer zu Reisen hinzufügen — gewährt Reise-Zugriff; über das Mitglieder-verwalten-Recht des handelnden Nutzers abgesichert',
|
|
'admin.plugins.perm.notify:send':
|
|
'Eine Benachrichtigung (Glocken-Postfach + E-Mail/ntfy) an den handelnden Nutzer oder eine seiner Reisen senden — nie an beliebige Empfänger',
|
|
'admin.plugins.perm.ai:invoke':
|
|
'Den vom Admin konfigurierten KI-Anbieter (Textvervollständigung + Dokumentenextraktion) im Namen des handelnden Nutzers nutzen — das Plugin hält nie einen Schlüssel',
|
|
'admin.plugins.perm.oauth:client':
|
|
'Über host-vermitteltes OAuth in deinem Namen mit einem Drittanbieter verbinden (der Host hält die Tokens, das Plugin sieht sie nie)',
|
|
'admin.plugins.perm.db:read:files': 'Dateien von Reisen lesen, auf die der handelnde Nutzer Zugriff hat',
|
|
'admin.plugins.perm.db:read:journal': 'Reisetagebücher des handelnden Nutzers lesen (benötigt das Journey-Addon)',
|
|
'admin.plugins.perm.db:read:atlas':
|
|
'Besuchte Länder und Regionen des handelnden Nutzers lesen (benötigt das Atlas-Addon)',
|
|
'admin.plugins.perm.db:read:vacay': 'Urlaubsplanung des handelnden Nutzers lesen (benötigt das Vacay-Addon)',
|
|
'admin.plugins.perm.db:read:daynotes': 'Tagesnotizen von Reisen lesen, auf die der handelnde Nutzer Zugriff hat',
|
|
'admin.plugins.perm.db:read:collections':
|
|
'Sammlungen gespeicherter Orte des handelnden Nutzers lesen (benötigt das Collections-Addon)',
|
|
'admin.plugins.perm.db:write:costs':
|
|
'Ausgaben (Budgetposten) auf Reisen erstellen, die der handelnde Nutzer bearbeiten kann',
|
|
'admin.plugins.perm.db:write:places':
|
|
'Orte auf Reisen anlegen, bearbeiten und löschen, die der handelnde Nutzer bearbeiten kann',
|
|
'admin.plugins.perm.db:write:days':
|
|
'Tage auf Reisen anlegen, bearbeiten und löschen, die der handelnde Nutzer bearbeiten kann',
|
|
'admin.plugins.perm.db:write:itinerary':
|
|
'Orte den Tagen von Reisen zuordnen und entfernen, die der handelnde Nutzer bearbeiten kann',
|
|
'admin.plugins.perm.db:write:trips':
|
|
'Reisedetails (Titel, Daten, Währung …) auf Reisen bearbeiten, die der handelnde Nutzer bearbeiten kann',
|
|
'admin.plugins.perm.db:write:reservations':
|
|
'Buchungen (Reservierungen) auf Reisen anlegen, bearbeiten und löschen, die der handelnde Nutzer bearbeiten kann',
|
|
'admin.plugins.perm.db:write:accommodations':
|
|
'Unterkünfte (Übernachtungsblöcke) auf Reisen anlegen, bearbeiten und löschen, die der handelnde Nutzer bearbeiten darf',
|
|
'admin.plugins.perm.db:write:daynotes':
|
|
'Tagesnotizen auf Reisen anlegen, bearbeiten und löschen, die der handelnde Nutzer bearbeiten kann',
|
|
'admin.plugins.perm.db:meta':
|
|
'Eigene private Daten an Reisen, Orte und Tage anhängen, auf die der handelnde Nutzer Zugriff hat',
|
|
'admin.plugins.perm.ws:broadcast:trip': 'Echtzeit-Updates an Reisemitglieder senden',
|
|
'admin.plugins.perm.ws:broadcast:user': 'Echtzeit-Updates an einzelne Nutzer senden',
|
|
'admin.plugins.perm.hook:photo-provider': 'Fotos für Erinnerungen bereitstellen',
|
|
'admin.plugins.perm.hook:calendar-source': 'Termine für den Kalender bereitstellen',
|
|
'admin.plugins.perm.hook:place-detail-provider':
|
|
'Zusatzdetails (Bewertungen, Ratings, Links) zu einem Ort beisteuern',
|
|
'admin.plugins.perm.hook:trip-warning-provider':
|
|
'Validierungswarnungen zu einer Reise ausgeben (im Planer angezeigt)',
|
|
'admin.plugins.perm.hook:table-contributor':
|
|
'Spalten und Aktionen zu Reise-Ansichten hinzufügen (Reservierungen, Orte, Tage)',
|
|
'admin.plugins.perm.hook:map-marker-provider':
|
|
'Marker zur Reisekarte hinzufügen (z. B. Buchungen oder POIs anzeigen)',
|
|
'admin.plugins.perm.hook:map-layer-provider': 'Routen, Korridore und Zonen auf der Reisekarte zeichnen',
|
|
'admin.plugins.perm.hook:route-provider':
|
|
'Routing-Profile anbieten, mit denen der Planer Tage berechnet (z. B. E-Auto-Routing mit Ladestopps)',
|
|
'admin.plugins.perm.hook:day-schedule-provider': 'Zeiteinträge an den Tagesplan anhängen (Ladestopps, Puffer)',
|
|
'admin.plugins.perm.hook:day-tint-provider':
|
|
'Tage im Tagesplan farblich markieren (z. B. zu welchem Reiseabschnitt ein Tag gehört)',
|
|
'admin.plugins.perm.geolocation:read':
|
|
'Deinen Live-Standort abfragen, solange eine seiner Ansichten offen ist (TREK liest ihn mit der Standortfreigabe dieser Seite, nicht mit einer eigenen des Plugins)',
|
|
'admin.plugins.perm.hook:pdf-section-provider': 'Textabschnitte an den PDF-Export einer Reise anhängen',
|
|
'admin.plugins.perm.hook:atlas-layer-provider':
|
|
'Länder auf der Atlas-Weltkarte hervorheben (z. B. Wunschlisten oder Reisehinweise)',
|
|
'admin.plugins.perm.hook:journal-entry-provider': 'Zusatzzeilen (Links, Statistiken) zu Journal-Einträgen beisteuern',
|
|
'admin.plugins.perm.hook:user-data':
|
|
'Von ihm gespeicherte Nutzerdaten löschen oder exportieren (DSGVO: Kontolöschung & Auskunft)',
|
|
'admin.plugins.perm.hook:trip-card-provider':
|
|
'Kleine Badges (Status, Zähler) zu deinen Dashboard-Trip-Karten hinzufügen',
|
|
'admin.plugins.perm.hook:notification-channel': 'Deine Benachrichtigungen über einen zusätzlichen Kanal zustellen',
|
|
'admin.plugins.perm.events:subscribe':
|
|
'Auf Kern-Aktivitäts-Events reagieren (nur Event-Name + Reise, nie der Inhalt)',
|
|
'admin.plugins.perm.jobs:run':
|
|
'Deklarierte Hintergrund-Jobs zeitgesteuert ausführen (kein Nutzerkontext — kann keine Nutzerdaten lesen)',
|
|
'admin.plugins.perm.http:outbound': 'Ausgehende Anfragen an deklarierte Hosts stellen',
|
|
'admin.plugins.perm.db:read:collab':
|
|
'Notizen, Umfragen und Chat-Nachrichten von Reisen lesen, auf die der handelnde Nutzer Zugriff hat (benötigt das Collab-Addon)',
|
|
'admin.plugins.perm.db:read:files:content':
|
|
'Dateiinhalte (Bytes) von Reisen lesen, auf die der handelnde Nutzer Zugriff hat',
|
|
'admin.plugins.perm.db:create:trips': 'Neue Reisen im Besitz des handelnden Nutzers anlegen',
|
|
'admin.plugins.perm.rates:read': 'Die zwischengespeicherten Wechselkurse des Hosts lesen',
|
|
'admin.plugins.updateConsentTitle': 'Dieses Update braucht neue Berechtigungen',
|
|
'admin.plugins.updateConsentBody':
|
|
'{name} v{version} verlangt Rechte, die du bisher nicht freigegeben hast. Die neue Version ist installiert, bleibt aber aus, bis du sie freigibst.',
|
|
'admin.plugins.updateNewPermissions': 'Neu verlangte Berechtigungen',
|
|
'admin.plugins.updateNewEgress': 'Neue ausgehende Verbindungen',
|
|
'admin.plugins.updateApprove': 'Freigeben & einschalten',
|
|
'admin.plugins.updateLater': 'Vorerst aus lassen',
|
|
'admin.plugins.updateKeptOff': 'Update installiert — bleibt aus, bis du die neuen Berechtigungen freigibst',
|
|
'admin.plugins.reviewedMeaning':
|
|
'„Geprüft" heißt: Ein TREK-Maintainer hat den Code dieses Plugins bei jeder Version manuell auf Schadsoftware gescannt — nicht auf Qualität oder Funktion. Es ist keine Garantie, dass ein Plugin harmlos ist.',
|
|
'admin.plugins.security.title': 'Wie Plugins eingesperrt werden — und wo die Grenzen liegen',
|
|
'admin.plugins.security.isolationTitle': 'Jedes Plugin läuft abgeschottet',
|
|
'admin.plugins.security.isolationBody':
|
|
'Ein Plugin läuft als eigener, abgeriegelter Prozess, der nur seine eigenen Dateien lesen darf. Es kann weder deine Datenbank noch deinen Login-Schlüssel oder deinen Verschlüsselungsschlüssel lesen, keine anderen Programme starten und nirgends Dateien schreiben. Seine Oberfläche läuft in einem versiegelten Browser-Rahmen, der dein Sitzungs-Cookie nicht lesen und die TREK-Seite drumherum nicht anfassen kann.',
|
|
'admin.plugins.security.permsTitle': 'Was die Berechtigungen bedeuten',
|
|
'admin.plugins.security.permsBody':
|
|
'Die Berechtigungen, die dir vor der Installation angezeigt werden, sind eine harte Obergrenze, die TREK zur Laufzeit durchsetzt — ein Plugin kann buchstäblich nichts tun, was nicht auf der Liste steht. Aber sie sagen dir, was ein Plugin kann, nicht was es tatsächlich tut. Ein Plugin, das deine Reisen lesen und einen Server erreichen darf, kann deine Reisen an diesen Server schicken — lies also die Berechtigungen und die Zielhosts, nicht nur die Beschreibung.',
|
|
'admin.plugins.security.limitsTitle': 'Was wir nicht garantieren können',
|
|
'admin.plugins.security.limitsBody':
|
|
'Die Isolation ist eine starke Software-Grenze, keine absolute. Ein Plugin handelt mit genau den Rechten, die du freigibst — innerhalb dieser Rechte kann es sich anders verhalten als seine Beschreibung nahelegt, und es kann Daten, die es legitim hat, an die von ihm deklarierten Hosts senden. TREK liest oder bewertet nicht, was der Code eines Plugins tatsächlich tut.',
|
|
'admin.plugins.security.worstTitle': 'Der schlimmste Fall',
|
|
'admin.plugins.security.worstBody':
|
|
'Ein bösartiges Plugin, das du einschaltest, kann die Daten und Verbindungen missbrauchen, die du ihm gegeben hast — etwa die Reisen abgreifen, die es lesen darf. Es kann keine Passwörter stehlen, keinen Admin-Login fälschen, keine Befehle auf deinem Server ausführen und keine Daten erreichen, die du nicht freigegeben hast. Der Schaden bleibt in dem, was du freigegeben hast, und das Ausschalten des Plugins stoppt ihn.',
|
|
'admin.plugins.security.reviewedTitle': 'Was „Geprüft" bedeutet',
|
|
'admin.plugins.security.reviewedBody':
|
|
'Ein geprüftes Plugin wurde bei jeder Version von einem TREK-Maintainer manuell auf Schadsoftware gescannt — geprüft auf feindlichen Code, nicht darauf, ob es gut funktioniert. Es ist kein Versprechen, dass das Plugin harmlos ist.',
|
|
'admin.plugins.security.signedTitle': 'Was „Signiert" bedeutet',
|
|
'admin.plugins.security.signedBody':
|
|
'Die Prüfsumme, die TREK bei jeder Installation prüft, belegt, dass die Dateien genau das sind, wofür die Registry einsteht. Eine Signatur belegt etwas anderes: dass sie vom Autor stammen, signiert mit einem Schlüssel, den nur er besitzt. Ein signiertes Plugin hat beides. Ein unsigniertes ist nicht unsicher — es trägt schlicht eine Garantie weniger, und die meisten Plugins in der Registry sind heute unsigniert.',
|
|
'admin.plugins.signed': 'Signiert',
|
|
'admin.plugins.signedHint': 'Bei der Installation gegen den Signaturschlüssel des Autors geprüft',
|
|
'admin.plugins.unsigned': 'Unsigniert',
|
|
'admin.plugins.unsignedHint':
|
|
'Die Dateien entsprechen dem, wofür die Registry einsteht, aber nichts verbindet sie mit dem Autor. Eine Garantie weniger — nicht unsicher.',
|
|
'admin.plugins.updateBlocked': 'Update blockiert — {reason}',
|
|
'admin.plugins.reviewBlock': 'Ansehen',
|
|
'admin.plugins.retrusted': 'Neuem Signaturschlüssel vertraut — das Plugin ist aktualisiert',
|
|
'admin.plugins.sig.title': 'Die Signatur von {name} konnte nicht geprüft werden',
|
|
'admin.plugins.sig.keyChangedBody':
|
|
'Der Signaturschlüssel des Autors ist nicht der, mit dem dieses Plugin installiert wurde. Autoren wechseln ihre Schlüssel durchaus — aber ein Angreifer, der das Plugin übernommen hat, sähe von hier aus genau so aus.',
|
|
'admin.plugins.sig.invalidBody':
|
|
'Die Dateien passen nicht zur Signatur des Autors. Sie sind nicht das, was der Autor signiert hat — entweder wurden sie beschädigt oder manipuliert. Das lässt sich nicht übergehen.',
|
|
'admin.plugins.sig.missingBody':
|
|
'Dieses Plugin war signiert, als du es installiert hast, aber die neue Version bringt keine Signatur mit. TREK akzeptiert diesen Rückschritt nicht stillschweigend. Das lässt sich nicht übergehen.',
|
|
'admin.plugins.sig.incompleteBody':
|
|
'Der Registry-Eintrag ist nur halb signiert: Er nennt einen Autorenschlüssel, die Version trägt aber keine Signatur (oder umgekehrt). Das ist ein Fehler auf Seiten des Plugins. Das lässt sich nicht übergehen.',
|
|
'admin.plugins.sig.pinnedKey': 'Schlüssel, mit dem es installiert wurde',
|
|
'admin.plugins.sig.newKey': 'Schlüssel, den es jetzt anbietet',
|
|
'admin.plugins.sig.confirmOutOfBand':
|
|
'TREK kann einen legitimen Schlüsselwechsel nicht von einer Übernahme unterscheiden — von hier aus sehen beide gleich aus. Bestätige den neuen Schlüssel beim Autor über einen Kanal, dem du bereits vertraust, bevor du ihn annimmst. Sobald du das tust, wird das Plugin aktualisiert und der neue Schlüssel gemerkt.',
|
|
'admin.plugins.sig.retrustConfirm': 'Neuem Schlüssel vertrauen & aktualisieren',
|
|
'admin.plugins.sig.cancel': 'Nicht vertrauen',
|
|
'admin.plugins.sig.consentUnsigned':
|
|
'Nichts verbindet diese Version mit ihrem Autor — die Dateien entsprechen der Registry, tragen aber keine Autorensignatur.',
|
|
'admin.plugins.security.trustTitle': 'Das Fazit',
|
|
'admin.plugins.security.trustBody':
|
|
'Ein Plugin zu installieren ist wie jede fremde App zu installieren: Füge nur Code von Autoren hinzu, denen du vertraust, und prüfe ihn im Zweifel zuerst selbst. TREK übernimmt keine Verantwortung für Plugins von Drittanbietern.',
|
|
'admin.plugins.runtimeOn': 'Laufzeit aktiv',
|
|
'admin.plugins.tabDiscover': 'Entdecken',
|
|
'admin.plugins.searchPlaceholder': 'Plugins durchsuchen…',
|
|
'admin.plugins.filterType': 'Typ',
|
|
'admin.plugins.filterStatus': 'Status',
|
|
'admin.plugins.sortBy': 'Sortieren',
|
|
'admin.plugins.allTypes': 'Alle Typen',
|
|
'admin.plugins.allStatuses': 'Alle',
|
|
'admin.plugins.stateOff': 'Aus',
|
|
'admin.plugins.filterUpdate': 'Update verfügbar',
|
|
'admin.plugins.sortName': 'Name',
|
|
'admin.plugins.sortRecent': 'Zuletzt aktualisiert',
|
|
'admin.plugins.sortUpdates': 'Updates zuerst',
|
|
'admin.plugins.sortDownloads': 'Meiste Downloads',
|
|
'admin.plugins.updatesAvailable': '{count} Updates für deine Plugins verfügbar.',
|
|
'admin.plugins.newerNeedsTrek': 'v{version} verfügbar — benötigt TREK {range}',
|
|
'admin.plugins.versionsTitle': 'Versionen',
|
|
'admin.plugins.versionPickerTitle': 'Version wechseln — {name}',
|
|
'admin.plugins.versionSwitch': 'Zu {version} wechseln',
|
|
'admin.plugins.versionNeedsTrek': 'benötigt TREK {range}',
|
|
'admin.plugins.changeVersion': 'Version wechseln…',
|
|
'admin.plugins.noVersions': 'Keine veröffentlichten Versionen in der Registry gefunden.',
|
|
'admin.plugins.downgradeTitle': 'Dieses Plugin zurücksetzen?',
|
|
'admin.plugins.downgradeBody': 'Wechsel von v{from} zu v{to}: Von der neueren Version geschriebene Daten bleiben erhalten, und die ältere Version versteht sie möglicherweise nicht.',
|
|
'admin.plugins.downgradeConfirm': 'Zurücksetzen',
|
|
'admin.plugins.updatesHeld': 'Updates pausiert bei v{version}',
|
|
'admin.plugins.resumeUpdates': 'Updates fortsetzen',
|
|
'admin.plugins.updatesResumed': 'Updates fortgesetzt',
|
|
'admin.plugins.updateAll': 'Alle aktualisieren',
|
|
'admin.plugins.noMatchInstalled': 'Keine installierten Plugins passen zu deiner Suche.',
|
|
'admin.plugins.noMatchRegistry': 'Keine Plugins in der Registry passen zu deiner Suche.',
|
|
'admin.plugins.restart': 'Neu starten',
|
|
'admin.plugins.restarted': 'Plugin neu gestartet',
|
|
'admin.plugins.cap.readsTrips': 'Liest deine Reisen',
|
|
'admin.plugins.cap.readsUsers': 'Liest Basis-Profile',
|
|
'admin.plugins.cap.readsCosts': 'Liest deine Ausgaben',
|
|
'admin.plugins.cap.readsPacking': 'Liest Packlisten',
|
|
'admin.plugins.cap.readsFiles': 'Liest Reise-Dateien',
|
|
'admin.plugins.cap.writesCosts': 'Fügt Ausgaben hinzu',
|
|
'admin.plugins.cap.writesPlaces': 'Bearbeitet Orte',
|
|
'admin.plugins.cap.writesDays': 'Bearbeitet Tage',
|
|
'admin.plugins.cap.writesItinerary': 'Bearbeitet Reiseplan',
|
|
'admin.plugins.cap.writesTrips': 'Bearbeitet Reisen',
|
|
'admin.plugins.cap.metadata': 'Ergänzt Metadaten',
|
|
'admin.plugins.cap.widget': 'Dashboard-Widget',
|
|
'admin.plugins.cap.heroWidget': 'Boarding-Pass-Widget',
|
|
'admin.plugins.cap.placeSlot': 'Ortsdetails',
|
|
'admin.plugins.cap.daySlot': 'Tagesdetails',
|
|
'admin.plugins.cap.reservationSlot': 'Reservierungsdetails',
|
|
'admin.plugins.cap.replacesTabs': 'Ersetzt Planer-Tabs',
|
|
'admin.plugins.cap.realtime': 'Echtzeit-Updates',
|
|
'admin.plugins.cap.notificationChannel': 'Benachrichtigungskanal',
|
|
'admin.plugins.cap.photos': 'Liefert Fotos',
|
|
'admin.plugins.cap.calendar': 'Liefert Kalender-Events',
|
|
'admin.plugins.cap.placeDetails': 'Reichert Orte an',
|
|
'admin.plugins.cap.warnings': 'Meldet Probleme',
|
|
'admin.plugins.cap.mapLayers': 'Zeichnet auf der Karte',
|
|
'admin.plugins.cap.routing': 'Bietet Routing an',
|
|
'admin.plugins.cap.daySchedule': 'Ergänzt Planzeiten',
|
|
'admin.plugins.cap.dayTint': 'Färbt Tage ein',
|
|
'admin.plugins.cap.geolocation': 'Liest deinen Standort',
|
|
'admin.plugins.cap.events': 'Reagiert auf Aktivität',
|
|
'admin.plugins.cap.requiresAddon': 'Benötigt {addon}',
|
|
'admin.plugins.cap.dependsOn': 'Benötigt {id} {version}',
|
|
'admin.plugins.dep.addonDisabledToast': 'Aktiviere zuerst die benötigten Addons: {addons}',
|
|
'admin.plugins.dep.autoEnabled': 'Benötigte Plugins zuerst aktiviert: {plugins}',
|
|
'admin.plugins.dep.downloaded': '{id} heruntergeladen',
|
|
'admin.plugins.dep.resolveTitle': 'Fehlende Abhängigkeiten',
|
|
'admin.plugins.dep.resolveBody': '„{name}“ benötigt diese Plugins, bevor es aktiviert werden kann.',
|
|
'admin.plugins.dep.requires': 'Benötigt {version}',
|
|
'admin.plugins.dep.mismatch': 'Benötigt {wanted} — installiert ist {installed}',
|
|
'admin.plugins.dep.download': 'Herunterladen',
|
|
'admin.plugins.dep.update': 'Aktualisieren',
|
|
'admin.plugins.dep.resolveHint': 'Lädt die neueste kompatible Version samt eigener Abhängigkeiten herunter.',
|
|
'admin.plugins.dep.trekIncompatible': 'Benötigt TREK {range} — auf diesem Server läuft {host}',
|
|
'admin.plugins.dep.trekUnknown': 'Gibt nicht an, welche TREK-Versionen unterstützt werden',
|
|
'admin.plugins.installCompatible': '{version} installieren',
|
|
'admin.plugins.incompatible': 'Nicht kompatibel',
|
|
'admin.plugins.accessTitle': 'Worauf es zugreift',
|
|
'admin.plugins.connectsTitle': 'Verbindet sich mit',
|
|
'admin.plugins.detailsTitle': 'Details',
|
|
'admin.plugins.noAccess': 'Braucht keinen besonderen Zugriff.',
|
|
'admin.plugins.metaVersion': 'Version',
|
|
'admin.plugins.metaSize': 'Größe',
|
|
'admin.plugins.metaRequires': 'Benötigt',
|
|
'admin.plugins.metaReviewed': 'Geprüft am',
|
|
'admin.plugins.downloads': 'Downloads',
|
|
'admin.addons.title': 'Addons',
|
|
'admin.addons.subtitle': 'Aktiviere oder deaktiviere Funktionen, um TREK nach deinen Wünschen anzupassen.',
|
|
'admin.addons.catalog.packing.name': 'Listen',
|
|
'admin.addons.catalog.packing.description': 'Packlisten und To-Do-Aufgaben für deine Reisen',
|
|
'admin.addons.catalog.budget.name': 'Kosten',
|
|
'admin.addons.catalog.budget.description': 'Ausgaben verfolgen und Reisebudget planen',
|
|
'admin.addons.catalog.documents.name': 'Dokumente',
|
|
'admin.addons.catalog.documents.description': 'Reisedokumente speichern und verwalten',
|
|
'admin.addons.catalog.vacay.name': 'Vacay',
|
|
'admin.addons.catalog.vacay.description': 'Persönlicher Urlaubsplaner mit Kalenderansicht',
|
|
'admin.addons.catalog.atlas.name': 'Atlas',
|
|
'admin.addons.catalog.atlas.description': 'Weltkarte mit besuchten Ländern und Reisestatistiken',
|
|
'admin.addons.catalog.collab.name': 'Collab',
|
|
'admin.addons.catalog.collab.description': 'Echtzeit-Notizen, Umfragen und Chat für die Reiseplanung',
|
|
'admin.addons.catalog.memories.name': 'Fotos (Immich)',
|
|
'admin.addons.catalog.memories.description': 'Reisefotos über deine Immich-Instanz teilen',
|
|
'admin.addons.catalog.mcp.name': 'MCP',
|
|
'admin.addons.catalog.mcp.description': 'Model Context Protocol für die KI-Assistenten-Integration',
|
|
'admin.addons.subtitleBefore': 'Aktiviere oder deaktiviere Funktionen, um ',
|
|
'admin.addons.subtitleAfter': ' nach deinen Wünschen anzupassen.',
|
|
'admin.addons.enabled': 'Aktiviert',
|
|
'admin.addons.disabled': 'Deaktiviert',
|
|
'admin.addons.type.trip': 'Reise',
|
|
'admin.addons.type.global': 'Global',
|
|
'admin.addons.type.integration': 'Integration',
|
|
'admin.addons.tripHint': 'Verfügbar als Tab innerhalb jedes Trips',
|
|
'admin.addons.globalHint': 'Verfügbar als eigenständiger Bereich in der Navigation',
|
|
'admin.addons.integrationHint': 'Backend-Dienste und API-Integrationen ohne eigene Seite',
|
|
'admin.addons.toast.updated': 'Addon aktualisiert',
|
|
'admin.addons.toast.error': 'Addon konnte nicht aktualisiert werden',
|
|
'admin.addons.noAddons': 'Keine Addons verfügbar',
|
|
'admin.weather.title': 'Wetterdaten',
|
|
'admin.weather.badge': 'Seit 24. März 2026',
|
|
'admin.weather.description':
|
|
'TREK nutzt Open-Meteo als Wetterdatenquelle. Open-Meteo ist ein kostenloser, quelloffener Wetterdienst — es wird kein API-Schlüssel benötigt.',
|
|
'admin.weather.forecast': '16-Tage-Vorhersage',
|
|
'admin.weather.forecastDesc': 'Statt bisher 5 Tage (OpenWeatherMap)',
|
|
'admin.weather.climate': 'Historische Klimadaten',
|
|
'admin.weather.climateDesc': 'Durchschnittswerte der letzten 85 Jahre für Tage jenseits der 16-Tage-Vorhersage',
|
|
'admin.weather.requests': '10.000 Anfragen / Tag',
|
|
'admin.weather.requestsDesc': 'Kostenlos, kein API-Schlüssel erforderlich',
|
|
'admin.weather.locationHint':
|
|
'Das Wetter wird anhand des ersten Ortes mit Koordinaten im jeweiligen Tag berechnet. Ist kein Ort am Tag eingeplant, wird ein beliebiger Ort aus der Ortsliste als Referenz verwendet.',
|
|
'admin.tabs.mcpTokens': 'MCP-Zugang',
|
|
'admin.mcpTokens.title': 'MCP-Zugang',
|
|
'admin.mcpTokens.subtitle': 'OAuth-Sitzungen und API-Tokens aller Benutzer verwalten',
|
|
'admin.mcpTokens.sectionTitle': 'API-Tokens',
|
|
'admin.mcpTokens.owner': 'Besitzer',
|
|
'admin.mcpTokens.tokenName': 'Token-Name',
|
|
'admin.mcpTokens.created': 'Erstellt',
|
|
'admin.mcpTokens.lastUsed': 'Zuletzt verwendet',
|
|
'admin.mcpTokens.never': 'Nie',
|
|
'admin.mcpTokens.empty': 'Es wurden noch keine MCP-Tokens erstellt',
|
|
'admin.mcpTokens.deleteTitle': 'Token löschen',
|
|
'admin.mcpTokens.deleteMessage':
|
|
'Dieser Token wird sofort widerrufen. Der Benutzer verliert den MCP-Zugang über diesen Token.',
|
|
'admin.mcpTokens.deleteSuccess': 'Token gelöscht',
|
|
'admin.mcpTokens.deleteError': 'Token konnte nicht gelöscht werden',
|
|
'admin.mcpTokens.loadError': 'Tokens konnten nicht geladen werden',
|
|
'admin.oauthSessions.sectionTitle': 'OAuth-Sitzungen',
|
|
'admin.oauthSessions.clientName': 'Client',
|
|
'admin.oauthSessions.owner': 'Besitzer',
|
|
'admin.oauthSessions.scopes': 'Berechtigungen',
|
|
'admin.oauthSessions.created': 'Erstellt',
|
|
'admin.oauthSessions.empty': 'Keine aktiven OAuth-Sitzungen',
|
|
'admin.oauthSessions.revokeTitle': 'Sitzung widerrufen',
|
|
'admin.oauthSessions.revokeMessage':
|
|
'Diese OAuth-Sitzung wird sofort widerrufen. Der Client verliert den MCP-Zugang.',
|
|
'admin.oauthSessions.revokeSuccess': 'Sitzung widerrufen',
|
|
'admin.oauthSessions.revokeError': 'Sitzung konnte nicht widerrufen werden',
|
|
'admin.oauthSessions.loadError': 'OAuth-Sitzungen konnten nicht geladen werden',
|
|
'admin.tabs.github': 'GitHub',
|
|
'admin.audit.subtitle': 'Sicherheitsrelevante und administrative Ereignisse (Backups, Benutzer, MFA, Einstellungen).',
|
|
'admin.audit.empty': 'Noch keine Audit-Einträge.',
|
|
'admin.audit.refresh': 'Aktualisieren',
|
|
'admin.audit.loadMore': 'Mehr laden',
|
|
'admin.audit.showing': '{count} geladen · {total} gesamt',
|
|
'admin.audit.col.time': 'Zeit',
|
|
'admin.audit.col.user': 'Benutzer',
|
|
'admin.audit.col.action': 'Aktion',
|
|
'admin.audit.col.resource': 'Ressource',
|
|
'admin.audit.col.ip': 'IP',
|
|
'admin.audit.col.details': 'Details',
|
|
'admin.github.title': 'Update-Verlauf',
|
|
'admin.github.subtitle': 'Neueste Updates von {repo}',
|
|
'admin.github.latest': 'Aktuell',
|
|
'admin.github.prerelease': 'Vorabversion',
|
|
'admin.github.showDetails': 'Details anzeigen',
|
|
'admin.github.hideDetails': 'Details ausblenden',
|
|
'admin.github.loadMore': 'Mehr laden',
|
|
'admin.github.loading': 'Wird geladen...',
|
|
'admin.github.error': 'Releases konnten nicht geladen werden',
|
|
'admin.github.by': 'von',
|
|
'admin.github.support': 'Hilft mir, TREK weiterzuentwickeln',
|
|
'admin.update.available': 'Update verfügbar',
|
|
'admin.update.text': 'TREK {version} ist verfügbar. Du verwendest {current}.',
|
|
'admin.update.button': 'Auf GitHub ansehen',
|
|
'admin.update.install': 'Update installieren',
|
|
'admin.update.confirmTitle': 'Update installieren?',
|
|
'admin.update.confirmText':
|
|
'TREK wird von {current} auf {version} aktualisiert. Der Server startet danach automatisch neu.',
|
|
'admin.update.dataInfo':
|
|
'Alle Daten (Reisen, Benutzer, API-Schlüssel, Uploads, Vacay, Atlas, Budgets) bleiben erhalten.',
|
|
'admin.update.warning': 'Die App ist während des Neustarts kurz nicht erreichbar.',
|
|
'admin.update.confirm': 'Jetzt aktualisieren',
|
|
'admin.update.installing': 'Wird aktualisiert…',
|
|
'admin.update.success': 'Update installiert! Server startet neu…',
|
|
'admin.update.failed': 'Update fehlgeschlagen',
|
|
'admin.update.backupHint': 'Wir empfehlen, vor dem Update ein Backup zu erstellen und herunterzuladen.',
|
|
'admin.update.backupLink': 'Zum Backup',
|
|
'admin.update.howTo': 'Update-Anleitung',
|
|
'admin.update.dockerText':
|
|
'Deine TREK-Instanz läuft in Docker. Um auf {version} zu aktualisieren, führe folgende Befehle auf deinem Server aus:',
|
|
'admin.update.nonDockerText':
|
|
'Diese TREK-Instanz läuft nicht in Docker. Um auf {version} zu aktualisieren, führe die Installations- oder Update-Methode erneut aus, die du verwendet hast — bei Proxmox Community Scripts startest du das Update zum Beispiel über die LXC-Konsole:',
|
|
'admin.update.wikiLink': 'Update-Anleitung öffnen',
|
|
'admin.update.reloadHint': 'Bitte lade die Seite in wenigen Sekunden neu.',
|
|
'admin.tabs.permissions': 'Berechtigungen',
|
|
'admin.notifications.emailPanel.title': 'Email (SMTP)',
|
|
'admin.notifications.webhookPanel.title': 'Webhook',
|
|
'admin.notifications.inappPanel.title': 'In-App',
|
|
'admin.notifications.inappPanel.hint':
|
|
'In-App-Benachrichtigungen sind immer aktiv und können nicht global deaktiviert werden.',
|
|
'admin.notifications.adminWebhookPanel.title': 'Admin-Webhook',
|
|
'admin.notifications.adminWebhookPanel.hint':
|
|
'Dieser Webhook wird ausschließlich für Admin-Benachrichtigungen verwendet (z. B. Versions-Updates). Er ist unabhängig von den Benutzer-Webhooks und sendet automatisch, wenn eine URL konfiguriert ist.',
|
|
'admin.notifications.adminWebhookPanel.saved': 'Admin-Webhook-URL gespeichert',
|
|
'admin.notifications.adminWebhookPanel.testSuccess': 'Test-Webhook erfolgreich gesendet',
|
|
'admin.notifications.adminWebhookPanel.testFailed': 'Test-Webhook fehlgeschlagen',
|
|
'admin.notifications.adminWebhookPanel.alwaysOnHint':
|
|
'Admin-Webhook sendet automatisch, wenn eine URL konfiguriert ist',
|
|
'admin.notifications.ntfy': 'Ntfy',
|
|
'admin.ntfy.hint':
|
|
'Erlaubt Benutzern, eigene ntfy-Themen für Push-Benachrichtigungen zu konfigurieren. Legen Sie unten den Standardserver fest, um die Benutzereinstellungen vorauszufüllen.',
|
|
'admin.notifications.testNtfy': 'Test-Ntfy senden',
|
|
'admin.notifications.testNtfySuccess': 'Test-Ntfy erfolgreich gesendet',
|
|
'admin.notifications.testNtfyFailed': 'Test-Ntfy fehlgeschlagen',
|
|
'admin.notifications.adminNtfyPanel.title': 'Admin-Ntfy',
|
|
'admin.notifications.adminNtfyPanel.hint':
|
|
'Dieses Ntfy-Thema wird ausschließlich für Admin-Benachrichtigungen verwendet (z. B. Versions-Updates). Es ist unabhängig von Benutzer-Themen und sendet immer, wenn es konfiguriert ist.',
|
|
'admin.notifications.adminNtfyPanel.serverLabel': 'Ntfy-Server-URL',
|
|
'admin.notifications.adminNtfyPanel.serverHint':
|
|
'Wird auch als Standardserver für Benutzer-ntfy-Benachrichtigungen verwendet. Leer lassen für ntfy.sh. Benutzer können dies in ihren eigenen Einstellungen überschreiben.',
|
|
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
|
|
'admin.notifications.adminNtfyPanel.topicLabel': 'Admin-Thema',
|
|
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
|
|
'admin.notifications.adminNtfyPanel.tokenLabel': 'Zugriffstoken (optional)',
|
|
'admin.notifications.adminNtfyPanel.tokenCleared': 'Admin-Zugriffstoken gelöscht',
|
|
'admin.notifications.adminNtfyPanel.saved': 'Admin-Ntfy-Einstellungen gespeichert',
|
|
'admin.notifications.adminNtfyPanel.test': 'Test-Ntfy senden',
|
|
'admin.notifications.adminNtfyPanel.testSuccess': 'Test-Ntfy erfolgreich gesendet',
|
|
'admin.notifications.adminNtfyPanel.testFailed': 'Test-Ntfy fehlgeschlagen',
|
|
'admin.notifications.adminNtfyPanel.alwaysOnHint': 'Admin-Ntfy sendet immer, wenn ein Thema konfiguriert ist',
|
|
'admin.notifications.adminNotificationsHint':
|
|
'Konfiguriere, welche Kanäle Admin-Benachrichtigungen liefern (z. B. Versions-Updates). Der Webhook sendet automatisch, wenn eine Admin-Webhook-URL gesetzt ist.',
|
|
'admin.notifications.tripReminders.title': 'Reiseerinnerungen',
|
|
'admin.notifications.tripReminders.hint':
|
|
'Sendet eine Erinnerungsbenachrichtigung vor Reisebeginn (erfordert gesetzte Erinnerungstage bei der Reise).',
|
|
'admin.notifications.tripReminders.enabled': 'Reiseerinnerungen aktiviert',
|
|
'admin.notifications.tripReminders.disabled': 'Reiseerinnerungen deaktiviert',
|
|
'admin.tabs.notifications': 'Benachrichtigungen',
|
|
'admin.addons.catalog.journey.name': 'Journey',
|
|
'admin.addons.catalog.journey.description': 'Reise-Tracking & Tagebuch mit Check-ins, Fotos und Tagesberichten',
|
|
'admin.addons.catalog.collections.name': 'Sammlungen',
|
|
'admin.addons.catalog.collections.description':
|
|
'Persönliche Orte-Bibliothek — speichere Orte aus Reisen in benannten Listen, kopiere sie in jede Reise, teile sie mit anderen',
|
|
'admin.passkey.title': 'Passkey-Anmeldung',
|
|
'admin.passkey.cardHint': 'Erlaube Benutzern die Anmeldung mit Passkeys (WebAuthn). Standardmäßig deaktiviert.',
|
|
'admin.passkey.login': 'Passkey-Anmeldung aktivieren',
|
|
'admin.passkey.loginHint':
|
|
'Zeigt die Option "Mit Passkey anmelden" und erlaubt Benutzern, in ihren Einstellungen Passkeys zu registrieren.',
|
|
'admin.passkey.notConfigured':
|
|
'Für diese Installation ist noch keine WebAuthn-Domain auflösbar. Lege unten APP_URL oder die Relying Party ID fest — bis dahin bleiben Passkeys ausgeblendet.',
|
|
'admin.passkey.rpId': 'Relying Party ID (Domain)',
|
|
'admin.passkey.rpIdHint':
|
|
'Die reine Domain, an die Passkeys gebunden sind, z. B. trek.example.org. Leer lassen, um sie aus APP_URL abzuleiten. Eine spätere Änderung macht bestehende Passkeys ungültig.',
|
|
'admin.passkey.origins': 'Erlaubte Origins',
|
|
'admin.passkey.originsHint':
|
|
'Vollständige Origins, durch Komma getrennt, z. B. https://trek.example.org. Leer lassen, um APP_URL zu verwenden.',
|
|
'admin.passkey.reset': 'Passkeys zurücksetzen',
|
|
'admin.passkey.resetHint':
|
|
'Entfernt alle Passkeys dieses Benutzers (z. B. bei einem verlorenen Gerät). Die Anmeldung mit Passwort bleibt weiterhin möglich.',
|
|
'admin.passkey.resetConfirm': 'Alle Passkeys von {name} entfernen?',
|
|
'admin.passkey.resetDone': '{count} Passkey(s) entfernt',
|
|
'admin.defaultSettings.mapProvider': 'Kartendienst',
|
|
'admin.defaultSettings.mapProviderHint':
|
|
'Die Standardkarte für alle auf dieser Instanz. Jeder Nutzer kann sie weiterhin in den eigenen Einstellungen überschreiben.',
|
|
'admin.defaultSettings.providerLeaflet': 'Standard (kostenlos)',
|
|
'admin.defaultSettings.providerMapbox': 'Mapbox (3D)',
|
|
'admin.defaultSettings.providerMapLibre': 'MapLibre (OpenFreeMap)',
|
|
'admin.defaultSettings.mapboxToken': 'Gemeinsames Mapbox-Token',
|
|
'admin.defaultSettings.mapboxTokenHint':
|
|
'Wird für jeden Nutzer verwendet, der kein eigenes Token eingegeben hat — so erhält die gesamte Instanz Mapbox, ohne den Schlüssel einzeln teilen zu müssen. Verschlüsselt gespeichert.',
|
|
'admin.defaultSettings.mapboxStyle': 'Kartenstil',
|
|
'admin.defaultSettings.mapboxStylePlaceholder': 'Stil auswählen…',
|
|
'admin.defaultSettings.mapbox3d': '3D-Gebäude & Gelände',
|
|
'admin.defaultSettings.mapboxQuality': 'Hochqualitätsmodus',
|
|
'admin.defaultSettings.cartoKey': 'Gemeinsamer CARTO-Key',
|
|
'admin.defaultSettings.cartoKeyHint':
|
|
'Wird für jeden Nutzer verwendet, der keinen eigenen Key eingetragen hat, damit die ganze Instanz CARTO-Kacheln ohne Wasserzeichen bekommt. Verschlüsselt gespeichert.',
|
|
'admin.group.users': 'Benutzer',
|
|
'admin.group.config': 'Konfiguration',
|
|
'admin.group.integration': 'Integrationen',
|
|
'admin.group.maintenance': 'Wartung',
|
|
'admin.invite.tripLabel': 'Zu Trip hinzufügen (optional)',
|
|
'admin.invite.tripNone': 'Kein Trip',
|
|
'admin.invite.tripHint':
|
|
'Der neue Nutzer wird automatisch zu diesem Trip hinzugefügt, wenn er sich über den Link registriert.',
|
|
'admin.invite.boundTo': 'fügt zu {trip} hinzu',
|
|
};
|
|
export default admin;
|