Files
TREK/shared/src/i18n/sv/admin.ts
T
jubnl bc10fba389 feat(plugins): TREK_PLUGINS_IGNORE_TREK_RANGE turns the version gate into a warning (#2226)
* feat(plugins): TREK_PLUGINS_IGNORE_TREK_RANGE turns the version gate into a warning

A plugin whose author has not updated its `trek` range for the running TREK can
now be installed, updated and activated when the operator sets
TREK_PLUGINS_IGNORE_TREK_RANGE to a truthy value. Every gate (registry picker,
post-extraction re-check, sideload, dev-link, activation) warns instead of
refusing; a missing range is tolerated the same way; "install latest" takes the
newest published version. The plugin-API version gate is not lifted and the
Discover compatibility verdict stays truthful.

The admin is warned at every step: each bypass is logged, install/upload/link/
update responses carry a `trekRangeBypassed` marker, and both admin panels show
a "Version checks off" pill, an "Install anyway" confirm dialog before a
registry install, the same notice after a path that could not ask first, and a
persistent chip on the row while the plugin runs outside its range.

Nine new i18n keys in every locale; wiki pages updated (Environment-Variables,
Admin-Plugins, Plugin-Development, Security-Hardening).

* refactor(plugins): one useRangeBypass hook behind both admin shells

SonarQube flagged PR 2226 at 10.8% duplicated new code: the range-bypass
logic had been added to the desktop and phone plugin panels as identical
copies. The marker/warning types, the row chip, the "Install anyway" offer,
the dialog copy and the confirm-or-notice state now live in
useRangeBypass (next to useInstanceSettings, the existing shared-logic
precedent); each panel keeps only its own dialog/sheet markup.

* docs(claude): record the SonarQube gate rules and the no-English-placeholder i18n rule

The CI SonarCloud gate (Sonar way, on new code: >=80% coverage, <=3%
duplication, A ratings, hotspots reviewed) was only discoverable by waiting
20-25 minutes for the workflow. The root CLAUDE.md now states the conditions,
the desktop/mobile shell-mirror duplication trap and its shared-hook fix, and
how to check a PR with the sonarqube MCP first; client and server CLAUDE.md
point at it. shared/CLAUDE.md says every locale needs a real translation —
parity cannot tell an English placeholder from a translation.

* docs(claude): keep CLAUDE.md to commands, invariants, gates and philosophy

Verified every concrete claim in the five CLAUDE.md files against the code
and fixed the stale ones: the websocket server is the Nest realtime gateway,
MCP tools live in <domain>.mcp.ts files, the client "native shell" section
described code that was never written, offline maps also prefetch vector
basemaps, plus several renamed files and wrong table names.

Then trimmed everything that drifts on its own: dates, migration history,
counts, and inventories of stores, slices, domains, sync files and CLI
commands. What stays is the commands, the invariants with the file that
enforces each one, what CI actually runs, the reference implementations to
copy, and the rules for new code. Each file now opens with that rule.
2026-09-04 00:43:06 +02:00

741 lines
52 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { TranslationStrings } from '../types';
const admin: TranslationStrings = {
'admin.notifications.title': 'Meddelanden',
'admin.notifications.hint': 'Välj en meddelandekanal. Endast en kan vara aktiv åt gången.',
'admin.notifications.none': 'Avaktiverad',
'admin.notifications.email': 'E-post (SMTP)',
'admin.notifications.webhook': 'Webhook',
'admin.notifications.ntfy': 'Ntfy',
'admin.ntfy.hint':
'Låt användarna ställa in sina egna ntfy-ämnen för push-meddelanden. Ange standardservern nedan för att förifyllda användarinställningarna.',
'admin.notifications.save': 'Spara inställningarna för aviseringar',
'admin.notifications.saved': 'Meddelandeinställningarna har sparats',
'admin.notifications.testWebhook': 'Skicka testwebhook',
'admin.notifications.testWebhookSuccess': 'Testwebhook har skickats utan problem',
'admin.notifications.testWebhookFailed': 'Test av webhook misslyckades',
'admin.notifications.testNtfy': 'Skicka test ntfy',
'admin.notifications.testNtfySuccess': 'Test ntfy skickades utan problem',
'admin.notifications.testNtfyFailed': 'Test ntfy misslyckades',
'admin.notifications.emailPanel.title': 'E-post (SMTP)',
'admin.notifications.webhookPanel.title': 'Webhook',
'admin.notifications.inappPanel.title': 'I-App',
'admin.notifications.inappPanel.hint': 'Meddelanden i appen är alltid aktiva och kan inte inaktiveras generellt.',
'admin.notifications.adminWebhookPanel.title': 'Webhook för administratörer',
'admin.notifications.adminWebhookPanel.hint':
'Denna webhook används uteslutande för administratörsmeddelanden (t.ex. versionsvarningar). Den är separat från användarspecifika webhooks och aktiveras alltid när den är inställd.',
'admin.notifications.adminWebhookPanel.saved': 'Admin webhook URL sparad',
'admin.notifications.adminWebhookPanel.testSuccess': 'Test webhook har skickats utan problem',
'admin.notifications.adminWebhookPanel.testFailed': 'Test webhook misslyckades',
'admin.notifications.adminWebhookPanel.alwaysOnHint':
'Webhook för administratör aktiveras alltid när en URL konfigureras',
'admin.notifications.adminNtfyPanel.title': 'Admin Ntfy',
'admin.notifications.adminNtfyPanel.hint':
'Detta ntfy-ämne används uteslutande för administratörsmeddelanden (t.ex. versionsvarningar). Det är separat från ämnena för enskilda användare och aktiveras alltid när det är konfigurerat.',
'admin.notifications.adminNtfyPanel.serverLabel': 'Ntfy Server URL',
'admin.notifications.adminNtfyPanel.serverHint':
'Används även som standardserver för ntfy-meddelanden till användare. Lämna fältet tomt för att använda ntfy.sh som standard. Användare kan ändra detta i sina egna inställningar.',
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
'admin.notifications.adminNtfyPanel.topicLabel': 'Admin Ämne',
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
'admin.notifications.adminNtfyPanel.tokenLabel': 'Åtkomsttoken (valfritt)',
'admin.notifications.adminNtfyPanel.tokenCleared': 'Administratörens åtkomsttoken har raderats',
'admin.notifications.adminNtfyPanel.saved': 'Admin ntfy inställningar sparade',
'admin.notifications.adminNtfyPanel.test': 'Skicka test ntfy',
'admin.notifications.adminNtfyPanel.testSuccess': 'Test ntfy skickat utan problem',
'admin.notifications.adminNtfyPanel.testFailed': 'Test ntfy misslyckades',
'admin.notifications.adminNtfyPanel.alwaysOnHint': 'Admin ntfy utlöses alltid när ett ämne konfigureras',
'admin.notifications.adminNotificationsHint':
'Ställ in vilka kanaler som ska skicka meddelanden som endast är avsedda för administratörer (t.ex. versionsvarningar).',
'admin.notifications.tripReminders.title': 'Påminnelser inför resan',
'admin.notifications.tripReminders.hint':
'Skicka en påminnelse innan resan börjar (kräver att påminnelsedagar har angetts för resan).',
'admin.notifications.tripReminders.enabled': 'Resepåminnelser aktiverade',
'admin.notifications.tripReminders.disabled': 'Resepåminnelser inaktiverade',
'admin.smtp.title': 'E-post och aviseringar',
'admin.smtp.hint': 'SMTP inställningar för att skicka e-postmeddelanden.',
'admin.smtp.testButton': 'Skicka ett testmejl',
'admin.webhook.hint': 'Låt användarna ställa in sina egna webhook-URL:er för aviseringar (Discord, Slack m.fl.).',
'admin.smtp.testSuccess': 'Test e-postmeddelandet har skickats',
'admin.smtp.testFailed': 'Test e-postmeddelandet misslyckades',
'admin.title': 'Administration',
'admin.subtitle': 'Användarhantering och systeminställningar',
'admin.tabs.users': 'Användare',
'admin.tabs.categories': 'Kategorier',
'admin.tabs.backup': 'Säkerhetskopia',
'admin.tabs.notifications': 'Meddelanden',
'admin.tabs.audit': 'Revision',
'admin.stats.users': 'Användare',
'admin.stats.trips': 'Resor',
'admin.stats.places': 'Platser',
'admin.stats.photos': 'Foton',
'admin.stats.files': 'Filer',
'admin.table.user': 'Användare',
'admin.table.email': 'E-post',
'admin.table.role': 'Roll',
'admin.table.created': 'Skapad',
'admin.table.lastLogin': 'Senast inloggad',
'admin.table.actions': 'Åtgärder',
'admin.you': '(Du)',
'admin.editUser': 'Redigera anvädnare',
'admin.newPassword': 'Nytt lösenord',
'admin.newPasswordHint': 'Lämna fältet tomt för att behålla det nuvarande lösenordet',
'admin.deleteUser': 'Ta bort användare "{name}"? Alla resor kommer att raderas permanent.',
'admin.deleteUserTitle': 'Ta bort användare',
'admin.newPasswordPlaceholder': 'Ange nytt lösenord…',
'admin.toast.loadError': 'Det gick inte att ladda administratörsdata',
'admin.toast.userUpdated': 'Användaren har uppdaterats',
'admin.toast.updateError': 'Uppdateringen misslyckades',
'admin.toast.userDeleted': 'Användaren har raderats',
'admin.toast.deleteError': 'Det gick inte att ta bort',
'admin.toast.cannotDeleteSelf': 'Det går inte att radera sitt eget konto',
'admin.toast.userCreated': 'Användare skapad',
'admin.toast.createError': 'Det gick inte att skapa användaren',
'admin.toast.fieldsRequired': 'Användarnamn, e-postadress och lösenord krävs',
'admin.createUser': 'Skapa användare',
'admin.invite.title': 'Inbjudningslänkar',
'admin.invite.subtitle': 'Skapa engångslänkar för registrering',
'admin.invite.create': 'Skapa länk',
'admin.invite.createAndCopy': 'Skapa och kopiera',
'admin.invite.empty': 'Inga inbjudningslänkar har skapats ännu',
'admin.invite.maxUses': 'Max. antal användningar',
'admin.invite.expiry': 'Gäller till',
'admin.invite.uses': 'använd',
'admin.invite.expiresAt': 'utgår',
'admin.invite.createdBy': 'av',
'admin.invite.active': 'Aktiv',
'admin.invite.expired': 'Utgått',
'admin.invite.usedUp': 'Förbrukad',
'admin.invite.copied': 'Inbjudningslänken har kopierats till urklipp',
'admin.invite.copyLink': 'Kopiera länken',
'admin.invite.deleted': 'Inbjudningslänken har tagits bort',
'admin.invite.createError': 'Det gick inte att skapa en inbjudningslänk',
'admin.invite.deleteError': 'Det gick inte att ta bort inbjudningslänken',
'admin.tabs.settings': 'Inställningar',
'admin.allowRegistration': 'Tillåt registrering',
'admin.allowRegistrationHint': 'Nya användare kan registrera sig själva',
'admin.authMethods': 'Autentiseringsmetoder',
'admin.passwordLogin': 'Inloggning med lösenord',
'admin.passwordLoginHint': 'Låt användarna logga in med e-postadress och lösenord',
'admin.passwordRegistration': 'Lösenordsregistrering',
'admin.passwordRegistrationHint': 'Låt nya användare registrera sig med e-postadress och lösenord',
'admin.oidcLogin': 'SSO Inloggning',
'admin.oidcLoginHint': 'Låt användarna logga in med SSO',
'admin.oidcRegistration': 'SSO Automatisk konfigurering',
'admin.oidcRegistrationHint': 'Skapa konton automatiskt för nya SSO-användare',
'admin.envOverrideHint':
'Inställningarna för inloggning med lösenord styrs av miljövariabeln OIDC_ONLY och kan inte ändras här.',
'admin.lockoutWarning': 'Minst en inloggningsmetod måste vara aktiverad',
'admin.requireMfa': 'Kräv tvåfaktorsautentisering (2FA)',
'admin.requireMfaHint':
'Användare som inte har tvåfaktorsautentisering måste slutföra inställningarna under inställningar innan de använder appen.',
'admin.apiKeys': 'API Nycklar',
'admin.apiKeysHint': 'Valfritt. Aktiverar utökade platsuppgifter, såsom foton och väderinformation.',
'admin.mapsKey': 'Google Maps API Nyckel',
'admin.mapsKeyHint': 'Krävs för att söka efter platser. Hämta på console.cloud.google.com',
'admin.mapsKeyHintLong':
'Utan en API-nyckel används OpenStreetMap för platssökning. Med en Google API-nyckel kan även foton, betyg och öppettider hämtas. Skaffa en på console.cloud.google.com.',
'admin.recommended': 'Rekommenderat',
'admin.weatherKey': 'OpenWeatherMap API Nyckel',
'admin.weatherKeyHint': 'För väderdata. Gratis på openweathermap.org',
'admin.unsplashKey': 'Unsplash API-nyckel',
'admin.unsplashKeyHint': 'För bildsökning. Gratis på unsplash.com/developers',
'admin.validateKey': 'Test',
'admin.keyValid': 'Ansluten',
'admin.keyInvalid': 'Felaktig',
'admin.keySaved': 'API nycklar sparade',
'admin.oidcTitle': 'Enkel inloggning (OIDC)',
'admin.oidcSubtitle': 'Tillåt inloggning via externa tjänster som Google, Apple, Authentik eller Keycloak.',
'admin.oidcDisplayName': 'Visningsnamn',
'admin.oidcIssuer': 'Utfärdarens URL',
'admin.oidcIssuerHint': 'OpenID Connect Utfärdarens URL hos leverantören. t.ex. https://accounts.google.com',
'admin.oidcSaved': 'OIDC konfigurationen har sparats',
'admin.oidcOnlyMode': 'Inaktivera lösenordsautentisering',
'admin.oidcOnlyModeHint':
'När funktionen är aktiverad är endast SSO-inloggning tillåten. Lösenordsbaserad inloggning och registrering blockeras.',
'admin.fileTypes': 'Tillåtna filtyper',
'admin.fileTypesHint': 'Ställ in vilka filtyper användarna kan ladda upp.',
'admin.fileTypesFormat':
'Filändelser separerade med kommatecken (t.ex. jpg, png, pdf, doc). Använd * för att tillåta alla filtyper.',
'admin.fileTypesSaved': 'Inställningar för filtyper har sparats',
'admin.placesPhotos.title': 'Plats Foton',
'admin.placesPhotos.subtitle':
'Hämta bilder från Google Places API. Inaktivera för att spara API-kvoten. Wikimedia-bilder påverkas inte.',
'admin.placesAutocomplete.title': 'Automatisk komplettering av plats',
'admin.placesAutocomplete.subtitle':
'Använd Google Places API för sökförslag. Inaktivera funktionen för att spara på API-kvoten.',
'admin.placesDetails.title': 'Platsinformation',
'admin.placesDetails.subtitle':
'Hämta detaljerad information om platsen (öppettider, betyg, webbplats) från Google Places API. Inaktivera funktionen för att spara på API-kvoten.',
'admin.placesEnrich.title': 'Platsberikning',
'admin.placesEnrich.subtitle':
'Visar bilder och en beskrivning när du lägger till en plats. Wikipedia och OpenStreetMap används alltid; Google tillkommer när Platsfoton eller Platsdetaljer är på.',
'admin.bagTracking.title': 'Spårning av väskor',
'admin.bagTracking.subtitle': 'Aktivera vikt- och väskfördelning för packningsartiklar',
'admin.collab.chat.title': 'Chatt',
'admin.collab.chat.subtitle': 'Realtidsmeddelanden för samarbete kring resor',
'admin.collab.notes.title': 'Noteringar',
'admin.collab.notes.subtitle': 'Delade noteringar och dokument',
'admin.collab.polls.title': 'Omröstningar',
'admin.collab.polls.subtitle': 'Grupp omröstningar',
'admin.collab.whatsnext.title': 'Vad händer härnäst?',
'admin.collab.whatsnext.subtitle': 'Förslag på aktiviteter och nästa steg',
'admin.tabs.config': 'Anpassning',
'admin.tabs.defaults': 'Användarinställningar',
'admin.defaultSettings.title': 'Standardinställningar för användare',
'admin.defaultSettings.description':
'Ange standardvärden som gäller för hela instansen. Användare som inte har ändrat en inställning kommer att se dessa värden. Deras egna ändringar har alltid företräde.',
'admin.defaultSettings.saved': 'Standard sparad',
'admin.defaultSettings.reset': 'Återställ till inbyggda standardinställningar',
'admin.defaultSettings.resetToBuiltIn': 'återställ',
'admin.defaultSettings.mapProvider': 'Kartmotor',
'admin.defaultSettings.mapProviderHint':
'Standardkartan för alla användare på denna instans. Varje användare kan fortfarande ändra inställningarna i sina egna inställningar.',
'admin.defaultSettings.providerLeaflet': 'Standard (gratis)',
'admin.defaultSettings.providerMapbox': 'Mapbox (3D)',
'admin.defaultSettings.providerMapLibre': 'MapLibre (OpenFreeMap)',
'admin.defaultSettings.mapboxToken': 'Delat Mapbox-token',
'admin.defaultSettings.mapboxTokenHint':
'Används för alla användare som inte har angett sin egen token – på så sätt får hela instansen tillgång till Mapbox utan att nyckeln behöver delas ut individuellt. Lagras i krypterad form.',
'admin.defaultSettings.mapboxStyle': 'Kartstil',
'admin.defaultSettings.mapboxStylePlaceholder': 'Välj en stil…',
'admin.defaultSettings.mapbox3d': '3D-byggnader och terräng',
'admin.defaultSettings.mapboxQuality': 'Högkvalitetsläge',
'admin.defaultSettings.cartoKey': 'Delad CARTO-nyckel',
'admin.defaultSettings.cartoKeyHint':
'Används för alla användare som inte har angett en egen nyckel, på så sätt får hela instansen CARTO-rutor utan vattenstämpel. Lagras i krypterad form.',
'admin.tabs.templates': 'Packningsmallar',
'admin.packingTemplates.title': 'Packningsmallar',
'admin.packingTemplates.subtitle': 'Skapa återanvändbara packlistor för dina resor',
'admin.packingTemplates.create': 'Ny mall',
'admin.packingTemplates.namePlaceholder': 'Mallnamn (t.ex. Strandsemester)',
'admin.packingTemplates.empty': 'Inga mallar har skapats ännu',
'admin.packingTemplates.items': 'föremål',
'admin.packingTemplates.categories': 'kategorier',
'admin.packingTemplates.itemName': 'Föremålsnamn',
'admin.packingTemplates.itemCategory': 'Kategori',
'admin.packingTemplates.categoryName': 'Kategorinamn (t.ex. Kläder)',
'admin.packingTemplates.addCategory': 'Lägg till kategori',
'admin.packingTemplates.created': 'Mall skapad',
'admin.packingTemplates.deleted': 'Mallen har tagits bort',
'admin.packingTemplates.loadError': 'Det gick inte att ladda mallarna',
'admin.packingTemplates.createError': 'Det gick inte att skapa mallen',
'admin.packingTemplates.deleteError': 'Det gick inte att ta bort mallen',
'admin.packingTemplates.deleteCategoryError': 'Det gick inte att ta bort kategorin',
'admin.packingTemplates.deleteItemError': 'Det gick inte att ta bort objektet',
'admin.packingTemplates.saveError': 'Det gick inte att spara',
'admin.tabs.addons': 'Tillägg',
'admin.tabs.plugins': 'Plugins',
'admin.tabs.storage': 'Lagring',
'admin.plugins.rescan': 'Skanna om',
'admin.plugins.rescanned': 'Plugin-mappen har skannats om',
'admin.plugins.upload': 'Ladda upp plugin',
'admin.plugins.dropToUpload': 'Släpp en plugin-.zip för att installera',
'admin.plugins.uploaded': 'Pluginet “{name}” uppladdat — aktivera det för att köra',
'admin.plugins.sideloaded': 'Manuellt laddad',
'admin.plugins.devLinkBadge': 'Dev-Link',
'admin.plugins.devLinkHint':
'Laddad från en lokal byggkatalog och hot-reload mot riktig data — endast för utveckling',
'admin.plugins.devLinkTitle': 'Länka ett lokalt plugin',
'admin.plugins.devLinkPathPlaceholder': '/absolute/path/to/your/plugin',
'admin.plugins.devLinkButton': 'Länka',
'admin.plugins.devLinkLinked': '{id} länkat — aktivera det för att köra',
'admin.plugins.sideloadedHint': 'Uppladdat manuellt — inte från registret, osignerat och ogranskat',
'admin.plugins.browse': 'Bläddra bland plugins',
'admin.plugins.installed': 'Installerat',
'admin.plugins.install': 'Installera',
'admin.plugins.registryEmpty': 'Inga plugins tillgängliga i registret ännu.',
'admin.plugins.actionError': 'Åtgärden misslyckades',
'admin.plugins.activate': 'Aktivera',
'admin.plugins.activated': 'Pluginet har aktiverats',
'admin.plugins.deactivate': 'Inaktivera',
'admin.plugins.deactivated': 'Pluginet har inaktiverats',
'admin.plugins.viewErrors': 'Visa felloggen',
'admin.plugins.errorLog': 'Fellogg',
'admin.plugins.allowedHosts': 'Tillåtna värdar',
'admin.plugins.allowedHosts.hint':
'Detta plugin pratar med en tjänst som bara du kan namnge (en självhostad server). Lägg till de värdar det får nå — inga andra.',
'admin.plugins.allowedHosts.none': 'Inga värdar tillagda ännu.',
'admin.plugins.allowedHosts.unsupported':
'Detta plugin använder inte operatörsangivna värdar. Dess tillåtna värdar är låsta i manifestet.',
'admin.plugins.allowedHosts.restartNote': 'Att spara startar om pluginet så att den nya listan används.',
'admin.plugins.allowedHosts.add': 'Lägg till tillåten värd',
'admin.plugins.allowedHosts.count': '{n} tillåtna värdar',
'admin.plugins.operatorEgressPill': '+ värdar du lägger till',
'admin.plugins.operatorEgressHint':
'Detta plugin pratar med en tjänst som bara du kan namnge (en självhostad server). Lägg efter installation till värdarna under ⋯ → Tillåtna värdar. Inga andra nås.',
'admin.plugins.noErrors': 'Inga fel loggade.',
'admin.plugins.uninstalled': 'Pluginet har avinstallerats',
'admin.plugins.uninstallTitle': 'Avinstallera pluginet?',
'admin.plugins.uninstallBody':
'Detta stoppar pluginet, tar bort dess kod och raderar alla dess data. Detta kan inte ångras.',
'admin.plugins.status.starting': 'Startar…',
'admin.plugins.type.widget': 'Widget',
'admin.plugins.type.page': 'Sida',
'admin.plugins.type.integration': 'Integration',
'admin.plugins.type.trip-page': 'Ressida',
'admin.plugins.reviewed': 'Granskad',
'admin.plugins.unreviewed': 'Ej granskad',
'admin.plugins.updated': 'Pluginet har uppdaterats',
'admin.plugins.updateTo': 'Uppdatera → v{version}',
'admin.plugins.enabledToggle': 'Aktivera plugin',
'plugins.notFound': 'Pluginet hittades inte',
'plugins.frameLoadFailed': 'This plugin could not be loaded.',
'admin.plugins.title': 'Plugins',
'admin.plugins.subtitle': 'Installera och hantera tredjepartsplugins på din instans.',
'admin.plugins.disabledTitle': 'Plugins är inaktiverade',
'admin.plugins.disabledBody':
'Plugin-körmiljön är avstängd (TREK_PLUGINS_ENABLED). Inga plugins kan köras förrän en administratör aktiverar den i serverkonfigurationen.',
'admin.plugins.empty': 'Inga plugins installerade ännu.',
'admin.plugins.loadError': 'Kunde inte läsa in plugins.',
'admin.plugins.scaffoldNote':
'Installation och aktivering av plugins kommer i en senare uppdatering. Denna panel visar för närvarande endast installerade plugins.',
'admin.plugins.status.active': 'Aktivt',
'admin.plugins.status.inactive': 'Inaktivt',
'admin.plugins.status.disabled': 'Avstängt',
'admin.plugins.status.error': 'Fel',
'admin.plugins.status.incompatible': 'Inkompatibelt',
'admin.plugins.details': 'Detaljer',
'admin.plugins.detailError': 'Kunde inte läsa in plugin-detaljerna.',
'admin.plugins.permissionsTitle': 'Behörigheter',
'admin.plugins.noPermissions': 'Detta plugin begär inga särskilda behörigheter.',
'admin.plugins.egressNote': 'Kan ansluta till: {hosts}',
'admin.plugins.setupTitle': 'Konfiguration',
'admin.plugins.noSetup': 'Fungerar direkt – inget behöver konfigureras.',
'admin.plugins.scope.instance': 'Hela instansen',
'admin.plugins.scope.user': 'Per användare',
'admin.plugins.fieldRequired': 'Obligatoriskt',
'admin.plugins.sourceRepo': 'Källkodsarkiv',
'admin.plugins.reportIssue': 'Rapportera ett problem',
'admin.plugins.homepage': 'Webbplats',
'admin.plugins.requiresTrek': 'Kräver TREK {version}+',
'admin.plugins.reviewedOn': 'Granskad {date}',
'admin.plugins.perm.db:own': 'Lagra sina egna data i en isolerad databas',
'admin.plugins.perm.db:read:trips': 'Läsa resor som den aktiva användaren har åtkomst till',
'admin.plugins.perm.db:read:users':
'Läsa grundläggande profilinformation (namn, avatar – aldrig inloggningsuppgifter)',
'admin.plugins.perm.db:read:costs': 'Läsa kostnader (budgetposter) som den aktiva användaren har åtkomst till',
'admin.plugins.perm.db:read:packing': 'Läsa packlistor för resor som den aktiva användaren har åtkomst till',
'admin.plugins.perm.db:write:packing':
'Skapa, redigera och ta bort packlisteposter på resor som den aktiva användaren kan redigera',
'admin.plugins.perm.weather:read': 'Läsa värdens cachade väderprognos (efter koordinater)',
'admin.plugins.perm.db:read:categories': 'Läsa den globala listan över platskategorier',
'admin.plugins.perm.db:read:tags': 'Läsa den aktiva användarens taggar',
'admin.plugins.perm.db:write:tags': 'Skapa, redigera och ta bort den aktiva användarens taggar',
'admin.plugins.perm.db:read:todos': 'Läsa uppgifter för resor som den aktiva användaren har åtkomst till',
'admin.plugins.perm.db:write:todos':
'Skapa, redigera och ta bort uppgifter på resor som den aktiva användaren kan redigera',
'admin.plugins.perm.db:write:atlas':
'Markera länder och regioner som besökta och hantera den aktiva användarens bucketlista (kräver tillägget Atlas)',
'admin.plugins.perm.db:write:vacay':
'Växla semesterdagar och företagshelgdagar i den aktiva användarens aktiva plan (kräver tillägget Vacay)',
'admin.plugins.perm.db:write:journal':
'Skapa, redigera och ta bort dagboksinlägg i dagböcker som den aktiva användaren kan redigera (kräver tillägget Journey)',
'admin.plugins.perm.db:write:collections':
'Skapa och redigera samlingar och spara platser i dem, med den aktiva användarens samlingsroll (kräver tillägget Collections)',
'admin.plugins.perm.db:write:files':
'Bifoga filer till resor som den aktiva användaren kan redigera (10 MB-gräns, blockerade filändelser avvisas) och hantera deras länkar',
'admin.plugins.perm.db:write:collab':
'Publicera anteckningar, omröstningar och chattmeddelanden på resor som den aktiva användaren kan redigera (kräver tillägget Collab)',
'admin.plugins.perm.db:write:members':
'Lägga till användare i resor — ger resåtkomst; skyddas av den aktiva användarens medlemshanteringsrätt',
'admin.plugins.perm.notify:send':
'Skicka en avisering (klockinkorg + e-post/ntfy) till den aktiva användaren eller en resa hen tillhör — aldrig till en godtycklig mottagare',
'admin.plugins.perm.ai:invoke':
'Använda den administratörskonfigurerade AI-leverantören (textkomplettering + dokumentextraktion) å den aktiva användarens vägnar — tillägget håller aldrig en nyckel',
'admin.plugins.perm.oauth:client':
'Ansluta till en tredjepartstjänst för din räkning via värdförmedlad OAuth (värden håller token, tillägget ser dem aldrig)',
'admin.plugins.perm.db:read:files': 'Läsa filer för resor som den aktiva användaren har åtkomst till',
'admin.plugins.perm.db:write:reservations':
'Skapa, redigera och ta bort bokningar på resor som den aktiva användaren kan redigera',
'admin.plugins.perm.db:write:accommodations':
'Skapa, redigera och ta bort boenden på resor som den aktiva användaren kan redigera',
'admin.plugins.perm.db:read:journal': 'Läsa den aktiva användarens resedagböcker (kräver tillägget Journey)',
'admin.plugins.perm.db:read:atlas':
'Läsa den aktiva användarens besökta länder och regioner (kräver tillägget Atlas)',
'admin.plugins.perm.db:read:vacay': 'Läsa den aktiva användarens semesterplan (kräver tillägget Vacay)',
'admin.plugins.perm.db:read:daynotes': 'Läsa daganteckningar för resor som den aktiva användaren har åtkomst till',
'admin.plugins.perm.db:read:collections':
'Läsa den aktiva användarens samlingar med sparade platser (kräver tillägget Collections)',
'admin.plugins.perm.db:write:daynotes':
'Skapa, redigera och ta bort daganteckningar på resor som den aktiva användaren kan redigera',
'admin.plugins.perm.jobs:run':
'Köra sina deklarerade bakgrundsjobb enligt ett schema (utan användarkontext — kan inte läsa användardata)',
'admin.plugins.perm.db:write:costs': 'Skapa kostnader (budgetposter) på resor som den aktiva användaren kan redigera',
'admin.plugins.perm.db:write:places':
'Lägga till, redigera och ta bort platser på resor som den aktiva användaren kan redigera',
'admin.plugins.perm.db:write:days':
'Lägga till, redigera och ta bort dagar på resor som den aktiva användaren kan redigera',
'admin.plugins.perm.db:write:itinerary':
'Tilldela och ta bort platser på dagar i resor som den aktiva användaren kan redigera',
'admin.plugins.perm.db:write:trips':
'Redigera resedetaljer (titel, datum, valuta…) på resor som den aktiva användaren kan redigera',
'admin.plugins.perm.db:meta':
'Koppla egen privat data till resor, platser och dagar som den aktiva användaren har åtkomst till',
'admin.plugins.perm.ws:broadcast:trip': 'Skicka realtidsuppdateringar till resans medlemmar',
'admin.plugins.perm.ws:broadcast:user': 'Skicka realtidsuppdateringar till enskilda användare',
'admin.plugins.perm.hook:photo-provider': 'Tillhandahålla foton till Minnen',
'admin.plugins.perm.hook:calendar-source': 'Tillhandahålla händelser till kalendern',
'admin.plugins.perm.hook:place-detail-provider':
'Bidra med extra detaljer (recensioner, betyg, länkar) till en plats',
'admin.plugins.perm.hook:trip-warning-provider': 'Visa valideringsvarningar på en resa (visas i planeraren)',
'admin.plugins.perm.hook:table-contributor':
'Lägga till kolumner och åtgärder i rese­vyer (bokningar, platser, dagar)',
'admin.plugins.perm.hook:map-marker-provider': 'Lägga till markörer på reskartan (t.ex. visa bokningar eller POI:er)',
'admin.plugins.perm.hook:map-layer-provider': 'Rita rutter, korridorer och zoner på reskartan',
'admin.plugins.perm.hook:route-provider':
'Erbjuda ruttprofiler som planeraren kan beräkna dagar med (t.ex. elbilsrutter med laddstopp)',
'admin.plugins.perm.hook:day-schedule-provider':
'Lägga till tidsposter i dagsplanen (laddstopp, säkerhetsmarginaler)',
'admin.plugins.perm.hook:day-tint-provider':
'Färgkoda dagar i dagsplanen (till exempel vilken etapp av resan en dag tillhör)',
'admin.plugins.cap.mcpTools': 'Publicerar AI-verktyg',
'admin.plugins.mcpToolsTitle': 'Publicerade AI-verktyg',
'admin.plugins.mcpToolsHint': 'En assistent kan köra dem åt en användare. Varje verktyg agerar med de rättigheter som getts ovan.',
'admin.plugins.perm.mcp:tools':
'Publicera verktyg som en AI-assistent kan köra åt dig (det agerar med de rättigheter du ger tillägget här, inte med assistentens egna)',
'admin.plugins.perm.geolocation:read':
'Fråga efter din position i realtid medan en av dess vyer är öppen (TREK läser den med den här webbplatsens platsbehörighet, inte med en egen behörighet för tillägget)',
'admin.plugins.perm.hook:pdf-section-provider': 'Lägga till textavsnitt i resans PDF-export',
'admin.plugins.perm.hook:atlas-layer-provider':
'Markera länder på Atlas-världskartan (t.ex. önskelistor eller resevarningar)',
'admin.plugins.perm.hook:journal-entry-provider': 'Lägga till extra rader (länkar, statistik) i dagboksinlägg',
'admin.plugins.perm.hook:user-data':
'Radera eller exportera data den lagrar om en användare (GDPR: kontoborttagning och dataförfrågningar)',
'admin.plugins.perm.hook:trip-card-provider':
'Lägga till små märken (status, antal) på resekorten på instrumentpanelen',
'admin.plugins.perm.hook:notification-channel': 'Leverera dina aviseringar via en ytterligare kanal',
'admin.plugins.perm.events:subscribe':
'Reagera på grundläggande aktivitetshändelser (endast händelsenamn + resa, aldrig innehållet)',
'admin.plugins.perm.http:outbound': 'Göra utgående anrop till sina deklarerade värdar',
'admin.plugins.perm.db:read:collab':
'Läsa anteckningar, omröstningar och chattmeddelanden för resor som den aktiva användaren har åtkomst till (kräver tillägget Collab)',
'admin.plugins.perm.db:read:files:content':
'Läsa innehållet (byte) i filer för resor som den aktiva användaren har åtkomst till',
'admin.plugins.perm.db:create:trips': 'Skapa nya resor som ägs av den aktiva användaren',
'admin.plugins.perm.rates:read': 'Läsa värdens cachade växelkurser',
'admin.plugins.updateConsentTitle': 'Den här uppdateringen kräver nya behörigheter',
'admin.plugins.updateConsentBody':
'{name} v{version} begär behörigheter som du ännu inte har beviljat. Den nya versionen är installerad men förblir avstängd tills du godkänner den.',
'admin.plugins.updateNewPermissions': 'Nyligen begärda behörigheter',
'admin.plugins.updateNewEgress': 'Nya utgående anslutningar',
'admin.plugins.updateApprove': 'Godkänn och aktivera',
'admin.plugins.updateLater': 'Låt vara avstängd tills vidare',
'admin.plugins.updateKeptOff':
'Uppdateringen är installerad — förblir avstängd tills du godkänner de nya behörigheterna',
'admin.plugins.reviewedMeaning':
'”Granskad” betyder att en TREK-underhållare har skannat pluginet efter skadlig kod i varje version — inte efter kvalitet eller om det fungerar. Det är ingen garanti för att ett plugin är ofarligt.',
'admin.plugins.security.title': 'Så här isoleras plugins — och gränserna för det',
'admin.plugins.security.isolationTitle': 'Varje plugin körs inkapslat',
'admin.plugins.security.isolationBody':
'Ett plugin körs som en egen låst process som bara kan läsa sina egna filer. Det kan inte läsa din databas, din inloggningshemlighet eller din krypteringsnyckel, kan inte starta andra program och kan inte skriva filer någonstans. Dess gränssnitt körs i en förseglad webbläsarram som inte kan läsa din sessionscookie eller röra TREK-sidan runt omkring.',
'admin.plugins.security.permsTitle': 'Vad behörigheterna betyder',
'admin.plugins.security.permsBody':
'Behörigheterna som visas innan du installerar är en hård gräns som TREK upprätthåller medan pluginet körs — det kan bokstavligen inte göra något som inte står på listan. Men de talar om vad ett plugin kan göra, inte vad det faktiskt gör. Ett plugin som får läsa dina resor och nå en server kan skicka dina resor till den servern, så läs behörigheterna och de utgående värdarna, inte bara beskrivningen.',
'admin.plugins.security.limitsTitle': 'Vad vi inte kan lova',
'admin.plugins.security.limitsBody':
'Isoleringen är en stark mjukvarugräns, men inte en absolut. Ett plugin agerar med exakt de rättigheter du godkänner, så inom dessa rättigheter kan det bete sig annorlunda än vad beskrivningen antyder, och det kan skicka data som det legitimt innehar till de värdar det har deklarerat. TREK läser eller bedömer inte vad ett plugins kod faktiskt gör.',
'admin.plugins.security.worstTitle': 'Värsta tänkbara fall',
'admin.plugins.security.worstBody':
'Ett fientligt plugin som du aktiverar kan missbruka de data och anslutningar du har gett det — till exempel läcka de resor det får läsa. Det kan inte stjäla lösenord, förfalska en administratörsinloggning, köra kommandon på din server eller nå data som du inte har beviljat. Skadan håller sig inom det du har godkänt, och att stänga av pluginet stoppar det.',
'admin.plugins.security.reviewedTitle': 'Vad ”Granskad” betyder',
'admin.plugins.security.reviewedBody':
'Ett granskat plugin har manuellt skannats efter skadlig kod av en TREK-underhållare i varje version — kontrollerat för fientlig kod, inte för om det fungerar bra. Det är inget löfte om att pluginet är ofarligt.',
'admin.plugins.security.signedTitle': 'Vad ”Signerad” betyder',
'admin.plugins.security.signedBody':
'Kontrollsumman som TREK verifierar vid varje installation bevisar att filerna är exakt det som registret går i god för. En signatur bevisar något annat: att de kommer från upphovspersonen, signerade med en nyckel som bara hen har. Ett signerat plugin har båda delarna. Ett osignerat är inte osäkert — det bär helt enkelt en garanti mindre, och de flesta plugins i registret är osignerade i dag.',
'admin.plugins.signed': 'Signerad',
'admin.plugins.signedHint': 'Verifierad mot upphovspersonens signeringsnyckel när den installerades',
'admin.plugins.unsigned': 'Osignerad',
'admin.plugins.unsignedHint':
'Filerna stämmer med det registret går i god för, men ingenting knyter dem till upphovspersonen. En garanti mindre — inte osäkert.',
'admin.plugins.updateBlocked': 'Uppdateringen blockerad — {reason}',
'admin.plugins.reviewBlock': 'Granska',
'admin.plugins.retrusted': 'Ny signeringsnyckel betrodd — pluginet är uppdaterat',
'admin.plugins.sig.title': 'Signaturen för {name} kunde inte verifieras',
'admin.plugins.sig.keyChangedBody':
'Upphovspersonens signeringsnyckel är inte den som pluginet installerades med. Upphovspersoner byter faktiskt nycklar — men en angripare som tagit över pluginet skulle se ut precis så här.',
'admin.plugins.sig.invalidBody':
'Filerna stämmer inte med upphovspersonens signatur. De är inte det som upphovspersonen signerade — antingen har de skadats eller så har någon manipulerat dem. Detta går inte att förbigå.',
'admin.plugins.sig.missingBody':
'Det här pluginet var signerat när du installerade det, men den nya versionen levereras utan signatur. TREK accepterar inte den försämringen i tysthet. Detta går inte att förbigå.',
'admin.plugins.sig.incompleteBody':
'Registerposten är halvsignerad: den anger en upphovspersonsnyckel men versionen bär ingen signatur (eller tvärtom). Det är ett misstag på pluginets sida. Detta går inte att förbigå.',
'admin.plugins.sig.pinnedKey': 'Nyckeln det installerades med',
'admin.plugins.sig.newKey': 'Nyckeln det erbjuder nu',
'admin.plugins.sig.confirmOutOfBand':
'TREK kan inte skilja ett legitimt nyckelbyte från en kapning — härifrån ser de identiska ut. Bekräfta den nya nyckeln med upphovspersonen via en kanal du redan litar på innan du accepterar den. När du gör det uppdateras pluginet och den nya nyckeln sparas.',
'admin.plugins.sig.retrustConfirm': 'Lita på den nya nyckeln och uppdatera',
'admin.plugins.sig.cancel': 'Lita inte på den',
'admin.plugins.sig.consentUnsigned':
'Ingenting knyter den här versionen till sin upphovsperson — filerna stämmer med registret, men de bär ingen signatur från upphovspersonen.',
'admin.plugins.security.trustTitle': 'Sammanfattningsvis',
'admin.plugins.security.trustBody':
'Att installera ett plugin är som att installera vilken tredjepartsapp som helst: lägg bara till kod från upphovspersoner du litar på, och granska det själv först om du är osäker. TREK tar inget ansvar för tredjepartsplugins.',
'admin.plugins.runtimeOn': 'Körmiljö på',
'admin.plugins.tabDiscover': 'Upptäck',
'admin.plugins.searchPlaceholder': 'Sök plugins…',
'admin.plugins.filterType': 'Typ',
'admin.plugins.filterStatus': 'Status',
'admin.plugins.sortBy': 'Sortera',
'admin.plugins.allTypes': 'Alla typer',
'admin.plugins.allStatuses': 'Alla',
'admin.plugins.stateOff': 'Av',
'admin.plugins.filterUpdate': 'Uppdatering tillgänglig',
'admin.plugins.sortName': 'Namn',
'admin.plugins.sortRecent': 'Nyligen uppdaterade',
'admin.plugins.sortUpdates': 'Uppdateringar först',
'admin.plugins.sortDownloads': 'Mest nedladdade',
'admin.plugins.updatesAvailable': '{count} uppdateringar tillgängliga för dina plugins.',
'admin.plugins.newerNeedsTrek': 'v{version} tillgänglig — kräver TREK {range}',
'admin.plugins.versionsTitle': 'Versioner',
'admin.plugins.versionPickerTitle': 'Byt version — {name}',
'admin.plugins.versionSwitch': 'Byt till {version}',
'admin.plugins.versionNeedsTrek': 'kräver TREK {range}',
'admin.plugins.changeVersion': 'Byt version…',
'admin.plugins.noVersions': 'Inga publicerade versioner hittades i registret.',
'admin.plugins.downgradeTitle': 'Rulla tillbaka detta tillägg?',
'admin.plugins.downgradeBody': 'Byte från v{from} till v{to}: data som skrivits av den nyare versionen finns kvar, och den äldre versionen kanske inte förstår dem.',
'admin.plugins.downgradeConfirm': 'Rulla tillbaka',
'admin.plugins.updatesHeld': 'Uppdateringar pausade vid v{version}',
'admin.plugins.resumeUpdates': 'Återuppta uppdateringar',
'admin.plugins.updatesResumed': 'Uppdateringar återupptagna',
'admin.plugins.updateAll': 'Uppdatera alla',
'admin.plugins.noMatchInstalled': 'Inga installerade plugins matchar din sökning.',
'admin.plugins.noMatchRegistry': 'Inga plugins i registret matchar din sökning.',
'admin.plugins.restart': 'Starta om',
'admin.plugins.restarted': 'Pluginet har startats om',
'admin.plugins.instanceSettings': 'Instansinställningar',
'admin.plugins.settingsSaved': 'Inställningarna har sparats',
'admin.plugins.settingsSavedRestarted': 'Inställningarna har sparats — pluginet har startats om',
'admin.plugins.actions': 'Åtgärder',
'admin.plugins.actions.confirm': 'Kör den här åtgärden?',
'admin.plugins.actions.inactive': 'Aktivera pluginet för att köra dess åtgärder',
'admin.plugins.requiredMissing': '"{field}" krävs',
'admin.plugins.cap.readsTrips': 'Läser dina resor',
'admin.plugins.cap.readsUsers': 'Läser grundläggande profiler',
'admin.plugins.cap.readsCosts': 'Läser dina kostnader',
'admin.plugins.cap.readsPacking': 'Läser packlistor',
'admin.plugins.cap.readsFiles': 'Läser resefiler',
'admin.plugins.cap.writesCosts': 'Lägger till kostnader',
'admin.plugins.cap.writesPlaces': 'Redigerar platser',
'admin.plugins.cap.writesDays': 'Redigerar dagar',
'admin.plugins.cap.writesItinerary': 'Redigerar resplan',
'admin.plugins.cap.writesTrips': 'Redigerar resor',
'admin.plugins.cap.metadata': 'Lägger till metadata',
'admin.plugins.cap.widget': 'Dashboard-widget',
'admin.plugins.cap.heroWidget': 'Boardingkort-widget',
'admin.plugins.cap.placeSlot': 'Platsdetalj',
'admin.plugins.cap.daySlot': 'Dagdetalj',
'admin.plugins.cap.reservationSlot': 'Bokningsdetalj',
'admin.plugins.cap.replacesTabs': 'Ersätter planeringsflikar',
'admin.plugins.cap.realtime': 'Realtidsuppdateringar',
'admin.plugins.cap.notificationChannel': 'Aviseringskanal',
'admin.plugins.cap.photos': 'Tillhandahåller foton',
'admin.plugins.cap.calendar': 'Tillhandahåller kalenderhändelser',
'admin.plugins.cap.placeDetails': 'Berikar platser',
'admin.plugins.cap.warnings': 'Flaggar problem',
'admin.plugins.cap.mapLayers': 'Ritar på kartan',
'admin.plugins.cap.routing': 'Erbjuder ruttplanering',
'admin.plugins.cap.daySchedule': 'Lägger till tider i planen',
'admin.plugins.cap.dayTint': 'Färgar dagarna',
'admin.plugins.cap.geolocation': 'Läser din position',
'admin.plugins.cap.events': 'Reagerar på aktivitet',
'admin.plugins.cap.requiresAddon': 'Kräver {addon}',
'admin.plugins.cap.dependsOn': 'Kräver {id} {version}',
'admin.plugins.dep.addonDisabledToast': 'Aktivera de nödvändiga tilläggen först: {addons}',
'admin.plugins.dep.autoEnabled': 'Aktiverade nödvändiga plugin först: {plugins}',
'admin.plugins.dep.downloaded': 'Laddade ner {id}',
'admin.plugins.dep.resolveTitle': 'Saknade beroenden',
'admin.plugins.dep.resolveBody': '”{name}” behöver dessa plugin installerade innan det kan aktiveras.',
'admin.plugins.dep.requires': 'Kräver {version}',
'admin.plugins.dep.mismatch': 'Kräver {wanted} — {installed} är installerad',
'admin.plugins.dep.download': 'Ladda ner',
'admin.plugins.dep.update': 'Uppdatera',
'admin.plugins.dep.resolveHint': 'Laddar ner den senaste kompatibla versionen, inklusive dess egna beroenden.',
'admin.plugins.dep.trekIncompatible': 'Kräver TREK {range} — den här servern kör {host}',
'admin.plugins.dep.trekUnknown': 'Anger inte vilka TREK-versioner som stöds',
'admin.plugins.installCompatible': 'Installera {version}',
'admin.plugins.installAnyway': 'Installera ändå',
'admin.plugins.rangeBypass.pill': 'Versionskontroller av',
'admin.plugins.rangeBypass.pillHint':
'TREK_PLUGINS_IGNORE_TREK_RANGE är satt — plugin kan installeras och köras utanför de TREK-versioner deras upphovspersoner angett',
'admin.plugins.rangeBypass.title': 'Utanför de TREK-versioner som stöds',
'admin.plugins.rangeBypass.noticeTitle': 'Installerat utanför de TREK-versioner som stöds',
'admin.plugins.rangeBypass.body':
'”{name}” anger stöd för TREK {range}, och den här servern kör {host}. TREK släpper igenom det bara för att TREK_PLUGINS_IGNORE_TREK_RANGE är satt. Upphovspersonen har inte uppdaterat pluginets versionsintervall för den här TREK-versionen, så det finns ingen garanti att det fungerar — och i sällsynta fall kan ett plugin som inte passar skada TREK-data. Fortsätt bara om du accepterar den risken.',
'admin.plugins.rangeBypass.bodyUnknown':
'”{name}” anger inte vilka TREK-versioner det stöder; den här servern kör {host}. TREK släpper igenom det bara för att TREK_PLUGINS_IGNORE_TREK_RANGE är satt. Inget tyder på att upphovspersonen har testat det på den här TREK-versionen, så det finns ingen garanti att det fungerar — och i sällsynta fall kan ett plugin som inte passar skada TREK-data. Fortsätt bara om du accepterar den risken.',
'admin.plugins.dep.trekBypassed':
'Utanför sitt TREK-intervall ({range}) — versionskontroller av',
'admin.plugins.dep.trekBypassedUnknown': 'Anger inget TREK-intervall — versionskontroller av',
'admin.plugins.incompatible': 'Inkompatibel',
'admin.plugins.accessTitle': 'Vad det har åtkomst till',
'admin.plugins.connectsTitle': 'Ansluter till',
'admin.plugins.detailsTitle': 'Detaljer',
'admin.plugins.noAccess': 'Behöver ingen särskild åtkomst.',
'admin.plugins.metaVersion': 'Version',
'admin.plugins.metaSize': 'Storlek',
'admin.plugins.metaRequires': 'Kräver',
'admin.plugins.metaReviewed': 'Granskad',
'admin.plugins.downloads': 'Nedladdningar',
'admin.addons.title': 'Tillägg',
'admin.addons.subtitle': 'Aktivera eller inaktivera funktioner för att anpassa din TREK-upplevelse.',
'admin.addons.catalog.packing.name': 'Listor',
'admin.addons.catalog.packing.description': 'Packlistor och saker att göra inför dina resor',
'admin.addons.catalog.budget.name': 'Kostnader',
'admin.addons.catalog.budget.description': 'Håll koll på resans utgifter och dela dem mellan resenärerna',
'admin.addons.catalog.documents.name': 'Dokument',
'admin.addons.catalog.documents.description': 'Spara och hantera resedokument',
'admin.addons.catalog.vacay.name': 'Vacay',
'admin.addons.catalog.vacay.description': 'Personlig semesterplanerare med kalendervy',
'admin.addons.catalog.atlas.name': 'Atlas',
'admin.addons.catalog.atlas.description': 'Världskarta med besökta länder och resestatistik',
'admin.addons.catalog.collab.name': 'Samarbete',
'admin.addons.catalog.collab.description': 'Anteckningar, omröstningar, chatt och förslag för gemensam planering',
'admin.addons.catalog.memories.name': 'Foton (Immich)',
'admin.addons.catalog.memories.description': 'Dela resefoton via din Immich-instans',
'admin.addons.catalog.mcp.name': 'MCP',
'admin.addons.catalog.mcp.description': 'Modellkontextprotokoll för integration av AI-assistenter',
'admin.addons.subtitleBefore': 'Aktivera eller inaktivera funktioner för att anpassa din ',
'admin.addons.subtitleAfter': ' erfarenhet.',
'admin.addons.catalog.naver_list_import.name': 'Naver List Import',
'admin.addons.catalog.naver_list_import.description': 'Importera platser från en delad Naver Maps-lista',
'admin.addons.catalog.airtrail.name': 'AirTrail',
'admin.addons.catalog.airtrail.description': 'Synkronisera flyg från din AirTrail-instans',
'admin.addons.catalog.llm_parsing.name': 'AI-tolkning',
'admin.addons.catalog.llm_parsing.description': 'Läser bokningar som den inbyggda tolken inte klarar, med en AI-modell du väljer',
'admin.addons.enabled': 'Aktiverad',
'admin.addons.disabled': 'Inaktiverad',
'admin.addons.type.trip': 'Resa',
'admin.addons.type.global': 'Global',
'admin.addons.type.integration': 'Integration',
'admin.addons.tripHint': 'Finns som en flik i varje resa',
'admin.addons.globalHint': 'Finns som en fristående sektion i huvudnavigeringen',
'admin.addons.integrationHint': 'Backend-tjänster och API-integrationer utan egen sida',
'admin.addons.toast.updated': 'Tillägget har uppdaterats',
'admin.addons.toast.error': 'Det gick inte att uppdatera tillägget',
'admin.addons.group.count': '{enabled} av {total} aktiverade',
'admin.addons.noAddons': 'Inga tillägg tillgängliga',
'admin.weather.title': 'Väderdata',
'admin.weather.badge': 'Sedan den 24 mars 2026',
'admin.weather.description':
'TREK använder Open-Meteo som källa för väderdata. Open-Meteo är en kostnadsfri vädertjänst med öppen källkod – ingen API-nyckel krävs.',
'admin.weather.forecast': '16-dagarsprognos',
'admin.weather.forecastDesc': 'Tidigare 5 dagar (OpenWeatherMap)',
'admin.weather.climate': 'Historiska klimatdata',
'admin.weather.climateDesc': 'Genomsnitt för de senaste 85 åren avseende dagar bortom den 16-dagarsprognosen',
'admin.weather.requests': '10 000 förfrågningar per dag',
'admin.weather.requestsDesc': 'Gratis, ingen API-nyckel krävs',
'admin.weather.locationHint':
'Väderuppgifterna baseras på den plats med koordinater som anges först för varje dag. Om ingen plats har angetts för en dag används en valfri plats från platslistan som referens.',
'admin.tabs.mcpTokens': 'MCP Åtkomst',
'admin.mcpTokens.title': 'MCP Åtkomst',
'admin.mcpTokens.subtitle': 'Hantera OAuth-sessioner och API-token för alla användare',
'admin.mcpTokens.sectionTitle': 'API Token',
'admin.mcpTokens.owner': 'Ägare',
'admin.mcpTokens.tokenName': 'Token namn',
'admin.mcpTokens.created': 'Skapad',
'admin.mcpTokens.lastUsed': 'Senast använd',
'admin.mcpTokens.never': 'Aldrig',
'admin.mcpTokens.empty': 'Inga MCP-tokens har skapats ännu',
'admin.mcpTokens.deleteTitle': 'Ta bort token',
'admin.mcpTokens.deleteMessage':
'Detta kommer att återkalla token omedelbart. Användaren kommer att förlora sin MCP-åtkomst via detta token.',
'admin.mcpTokens.deleteSuccess': 'Token har tagits bort',
'admin.mcpTokens.deleteError': 'Det gick inte att ta bort token',
'admin.mcpTokens.loadError': 'Det gick inte att ladda tokens',
'admin.oauthSessions.sectionTitle': 'OAuth Sessioner',
'admin.oauthSessions.clientName': 'Klient',
'admin.oauthSessions.owner': 'Ägare',
'admin.oauthSessions.scopes': 'Tillämpningsområden',
'admin.oauthSessions.created': 'Skapad',
'admin.oauthSessions.empty': 'Inga aktiva OAuth-sessioner',
'admin.oauthSessions.revokeTitle': 'Återkalla Session',
'admin.oauthSessions.revokeMessage':
'Detta kommer att återkalla OAuth-sessionen omedelbart. Klienten kommer att förlora åtkomsten till MCP.',
'admin.oauthSessions.revokeSuccess': 'Session återkallad',
'admin.oauthSessions.revokeError': 'Kunde inte återkalla session',
'admin.oauthSessions.loadError': 'Kunde inte ladda OAuth sessions',
'admin.tabs.github': 'GitHub',
'admin.audit.subtitle':
'Säkerhetsrelaterade händelser och administrativa händelser (säkerhetskopieringar, användare, MFA, inställningar).',
'admin.audit.empty': 'Inga revisionsposter ännu.',
'admin.audit.refresh': 'Uppdatera',
'admin.audit.loadMore': 'Ladda fler',
'admin.audit.showing': '{count} laddad · {total} totalt',
'admin.audit.col.time': 'Tid',
'admin.audit.col.user': 'Användare',
'admin.audit.col.action': 'Åtgärd',
'admin.audit.col.resource': 'Resurs',
'admin.audit.col.ip': 'IP',
'admin.audit.col.details': 'Detaljer',
'admin.github.title': 'Versionshistorik',
'admin.github.subtitle': 'Senaste uppdateringarna från {repo}',
'admin.github.latest': 'Senaste',
'admin.github.prerelease': 'Förhandsutgåva',
'admin.github.showDetails': 'Visa detaljer',
'admin.github.hideDetails': 'Göm detaljer',
'admin.github.loadMore': 'Ladda fler',
'admin.github.loading': 'Laddar...',
'admin.github.error': 'Det gick inte att ladda utgåvorna',
'admin.github.by': 'av',
'admin.github.support': 'Hjälper mig att fortsätta bygga TREK',
'admin.update.available': 'Uppdatering tillgänglig',
'admin.update.text': 'TREK {version} finns tillgängligt. Du kör {current}.',
'admin.update.button': 'Visa på GitHub',
'admin.update.install': 'Installera uppdatering',
'admin.update.confirmTitle': 'Ska uppdateringen installeras?',
'admin.update.confirmText':
'TREK kommer att uppdateras från {current} till {version}. Servern startas om automatiskt därefter.',
'admin.update.dataInfo':
'Alla dina data (resor, användare, API-nycklar, uppladdningar, Vacay, Atlas, budgetar) kommer att bevaras.',
'admin.update.warning': 'Appen kommer att vara tillfälligt otillgänglig under omstarten.',
'admin.update.confirm': 'Uppdatera nu',
'admin.update.installing': 'Uppdaterar…',
'admin.update.success': 'Uppdateringen är installerad! Servern startas om…',
'admin.update.failed': 'Uppdateringen misslyckades',
'admin.update.backupHint': 'Vi rekommenderar att du gör en säkerhetskopia innan du uppdaterar.',
'admin.update.backupLink': 'Gå till Säkerhetskopiering',
'admin.update.howTo': 'Så här uppdaterar du',
'admin.update.dockerText':
'Din TREK-instans körs i Docker. För att uppdatera till {version} kör du följande kommandon på din server:',
'admin.update.nonDockerText':
'Denna TREK-instans körs inte i Docker. För att uppdatera till {version}, kör installations- eller uppdateringsmetod du använde på nytt — till exempel, i Proxmox Community Scripts kör du uppdateringen från LXC-konsolen:',
'admin.update.wikiLink': 'Öppna uppdateringsguiden',
'admin.update.reloadHint': 'Vänligen uppdatera sidan om några sekunder.',
'admin.tabs.permissions': 'Behörigheter',
'admin.addons.catalog.journey.name': 'Journey',
'admin.addons.catalog.journey.description': 'Resespårning och resedagbok med incheckningar, foton och dagliga inlägg',
'admin.addons.catalog.collections.name': 'Samlingar',
'admin.addons.catalog.collections.description': 'Samla platser från alla resor i namngivna listor och återanvänd dem',
'admin.passkey.title': 'Inloggningsnyckel',
'admin.passkey.cardHint': 'Låter användare att logga in med inloggningsnyckel (WebAuthn). Avstängt som standard.',
'admin.passkey.login': 'Aktivera inloggningsnyckel',
'admin.passkey.loginHint':
'Visa alternativet ”Logga in med en inloggningsnyckel och låt användarna registrera inloggningsnycklar i sina inställningar.',
'admin.passkey.notConfigured':
'Det finns ännu ingen WebAuthn-domän för denna distribution. Ange APP_URL eller Relying Party ID nedan – inloggningsnycklar förblir dolda tills dess.',
'admin.passkey.rpId': 'Relying Party ID (domain)',
'admin.passkey.rpIdHint':
'De rena domän inloggningsnycklarna är kopplade till t.ex. trek.example.org. Lämna fältet tomt om du vill att nyckeln ska härledas från APP_URL. Om du ändrar detta senare blir befintliga nycklar ogiltiga.',
'admin.passkey.origins': 'Allowed origins',
'admin.passkey.originsHint':
'Fullständiga ursprungsadresser separerade med kommatecken, t.ex. https://trek.example.org. Lämna fältet tomt för att använda APP_URL.',
'admin.passkey.reset': 'Återställ inloggningsnycklar',
'admin.passkey.resetHint':
'Ta bort alla den här användarens inloggningsnycklar (t.ex. om enheten har försvunnit). Användaren kan fortfarande logga in med sitt lösenord.',
'admin.passkey.resetConfirm': 'Ta bort alla åtkomstnycklar för {name}?',
'admin.passkey.resetDone': 'Tog bort {count} inloggningsnycklar',
'admin.group.users': 'Users',
'admin.group.config': 'Configuration',
'admin.group.integration': 'Integrations',
'admin.group.maintenance': 'Maintenance',
'admin.invite.tripLabel': 'Lägg till i resa (valfritt)',
'admin.invite.tripNone': 'Ingen resa',
'admin.invite.tripHint':
'Den nya användaren läggs automatiskt till i den här resan när de registrerar sig via länken.',
'admin.invite.boundTo': 'läggs till i {trip}',
};
export default admin;