feat: swedis translation

This commit is contained in:
Andreas Olsson
2026-06-26 17:22:30 +02:00
committed by Maurice
parent 9d8af4b357
commit 424018fc66
47 changed files with 3113 additions and 0 deletions
@@ -14,6 +14,7 @@ import ko from '../ko/externalNotifications';
import nl from '../nl/externalNotifications';
import pl from '../pl/externalNotifications';
import ru from '../ru/externalNotifications';
import sv from '../sv/externalNotifications';
import tr from '../tr/externalNotifications';
import uk from '../uk/externalNotifications';
import zhTW from '../zh-TW/externalNotifications';
@@ -49,6 +50,7 @@ const LOCALES = {
ko,
uk,
gr,
sv,
} satisfies Record<string, NotificationLocale>;
export const EMAIL_I18N: Record<string, EmailStrings> = Object.fromEntries(
+1
View File
@@ -19,6 +19,7 @@ export const SUPPORTED_LANGUAGES = [
{ value: 'ko', label: '한국어', locale: 'ko-KR' },
{ value: 'uk', label: 'Українська', locale: 'uk-UA' },
{ value: 'gr', label: 'Ελληνικά', locale: 'el-GR' },
{ value: 'sv', label: 'Svenska', locale: 'sv-SE' },
] as const;
export type SupportedLanguageCode = (typeof SUPPORTED_LANGUAGES)[number]['value'];
+351
View File
@@ -0,0 +1,351 @@
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.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.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.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.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.saveError': 'Det gick inte att spara',
'admin.tabs.addons': 'Tillägg',
'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': 'Budget',
'admin.addons.catalog.budget.description': 'Håll koll på utgifterna och planera din resebudget',
'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': 'Noteringar, omröstningar och chatt i realtid för resplanering',
'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.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.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.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',
};
export default admin;
+6
View File
@@ -0,0 +1,6 @@
import type { TranslationStrings } from '../types';
const airport: TranslationStrings = {
'airport.searchPlaceholder': 'Flygplatskod eller ort (t.ex. FRA)',
};
export default airport;
+58
View File
@@ -0,0 +1,58 @@
import type { TranslationStrings } from '../types';
const atlas: TranslationStrings = {
'atlas.subtitle': 'Ditt resefotavtryck runt om i världen',
'atlas.countries': 'Länder',
'atlas.trips': 'Resor',
'atlas.places': 'Platser',
'atlas.unmark': 'Ta bort',
'atlas.confirmMark': 'Ska jag markera det här landet som besökt?',
'atlas.confirmUnmark': 'Vill du ta bort det här landet från listan över besökta länder?',
'atlas.confirmUnmarkRegion': 'Vill du ta bort denna region från listan över besökta platser?',
'atlas.markVisited': 'Markera som besökt',
'atlas.markVisitedHint': 'Lägg till detta land i listan över besökta länder',
'atlas.markRegionVisitedHint': 'Lägg till denna region i din lista över besökta platser',
'atlas.addToBucket': 'Lägg till på bucketlistan',
'atlas.addPoi': 'Lägg till plats',
'atlas.searchCountry': 'Sök efter ett land...',
'atlas.bucketNamePlaceholder': 'Namn (land, stad, ort...)',
'atlas.month': 'Månad',
'atlas.year': 'År',
'atlas.addToBucketHint': 'Spara som en plats du vill besöka',
'atlas.bucketWhen': 'När har du tänkt att komma på besök?',
'atlas.statsTab': 'Statistik',
'atlas.bucketTab': 'Bucketlista',
'atlas.addBucket': 'Lägg till i bucketlistan',
'atlas.bucketNotesPlaceholder': 'Notering (valfritt)',
'atlas.bucketEmpty': 'Din bucketlista är tom',
'atlas.bucketEmptyHint': 'Lägg till platser du drömmer om att besöka',
'atlas.days': 'Dagar',
'atlas.visitedCountries': 'Besökta länder',
'atlas.cities': 'Städer',
'atlas.noData': 'Inga resedata ännu',
'atlas.noDataHint': 'Skapa en resa och lägg till platser på din världskarta',
'atlas.lastTrip': 'Den senaste resan',
'atlas.nextTrip': 'Nästa resa',
'atlas.daysLeft': 'dagar kvar',
'atlas.streak': 'Streak',
'atlas.years': 'år',
'atlas.yearInRow': 'år i rad',
'atlas.yearsInRow': 'år i rad',
'atlas.tripIn': 'resa inom',
'atlas.tripsIn': 'resor inom',
'atlas.since': 'sedan',
'atlas.europe': 'Europa',
'atlas.asia': 'Asien',
'atlas.northAmerica': 'N. Amerika',
'atlas.southAmerica': 'S. Amerika',
'atlas.africa': 'Afrika',
'atlas.oceania': 'Oceanien',
'atlas.other': 'Andra',
'atlas.firstVisit': 'Första resan',
'atlas.lastVisitLabel': 'Den senaste resan',
'atlas.tripSingular': 'Resa',
'atlas.tripPlural': 'Resor',
'atlas.placeVisited': 'Plats besökt',
'atlas.placesVisited': 'Platser besökta',
};
export default atlas;
+72
View File
@@ -0,0 +1,72 @@
import type { TranslationStrings } from '../types';
const backup: TranslationStrings = {
'backup.title': 'Databackup',
'backup.subtitle': 'Databasen och alla uppladdade filer',
'backup.refresh': 'Uppdatera',
'backup.upload': 'Ladda upp säkerhetskopia',
'backup.uploading': 'Laddar upp…',
'backup.create': 'Skapa säkerhetskopia',
'backup.creating': 'Skapar…',
'backup.empty': 'Inga säkerhetskopior ännu',
'backup.createFirst': 'Skapa den första säkerhetskopian',
'backup.download': 'Ladda ner',
'backup.restore': 'Återställ',
'backup.confirm.restore': 'Återställ säkerhetskopia "{name}"?\n\nAlla aktuella data kommer att ersättas med säkerhetskopian.',
'backup.confirm.uploadRestore': 'Ladda upp och återställ säkerhetskopian "{name}"?\n\nAlla befintliga data kommer att skrivas över.',
'backup.confirm.delete': 'Ta bort säkerhetskopia "{name}"?',
'backup.toast.loadError': 'Det gick inte att ladda säkerhetskopiorna',
'backup.toast.created': 'Säkerhetskopian har skapats',
'backup.toast.createError': 'Det gick inte att skapa en säkerhetskopia',
'backup.toast.restored': 'Säkerhetskopian har återställts. Sidan kommer att laddas om…',
'backup.toast.restoreError': 'Återställningen misslyckades',
'backup.toast.uploadError': 'Det gick inte att ladda upp',
'backup.toast.deleted': 'Säkerhetskopian har raderats',
'backup.toast.deleteError': 'Det gick inte att ta bort',
'backup.toast.downloadError': 'Nedladdningen misslyckades',
'backup.toast.settingsSaved': 'Inställningarna för automatisk säkerhetskopiering har sparats',
'backup.toast.settingsError': 'Det gick inte att spara inställningarna',
'backup.auto.title': 'Automatisk säkerhetskopiering',
'backup.auto.subtitle': 'Automatisk säkerhetskopiering enligt ett schema',
'backup.auto.enable': 'Aktivera automatisk säkerhetskopiering',
'backup.auto.enableHint': 'Säkerhetskopior kommer att skapas automatiskt enligt det valda schemat',
'backup.auto.interval': 'Intervall',
'backup.auto.hour': 'Kör varje timme',
'backup.auto.hourHint': 'Serverens lokala tid ({format} format)',
'backup.auto.dayOfWeek': 'Veckodag',
'backup.auto.dayOfMonth': 'Dag i månaden',
'backup.auto.dayOfMonthHint': 'Begränsat till 1–28 för att passa alla månader',
'backup.auto.scheduleSummary': 'Schema',
'backup.auto.summaryDaily': 'Varje dag kl. {hour}:00',
'backup.auto.summaryWeekly': 'Varje {day} vid {hour}:00',
'backup.auto.summaryMonthly': 'Dag {day} varje månad kl. {hour}:00',
'backup.auto.envLocked': 'Docker',
'backup.auto.envLockedHint':
'Automatisk säkerhetskopiering konfigureras via Docker-miljövariabler. För att ändra dessa inställningar ska du uppdatera filen docker-compose.yml och starta om containern.',
'backup.auto.copyEnv': 'Kopiera Docker-miljövariabler',
'backup.auto.envCopied': 'Docker-miljövariabler kopierade till urklipp',
'backup.auto.keepLabel': 'Ta bort gamla säkerhetskopior efter',
'backup.dow.sunday': 'Sön',
'backup.dow.monday': 'Mån',
'backup.dow.tuesday': 'Tis',
'backup.dow.wednesday': 'Ons',
'backup.dow.thursday': 'Tor',
'backup.dow.friday': 'Fre',
'backup.dow.saturday': 'Lör',
'backup.interval.hourly': 'Per timme',
'backup.interval.daily': 'Dagligen',
'backup.interval.weekly': 'Varje vecka',
'backup.interval.monthly': 'Månadsvis',
'backup.keep.1day': '1 dag',
'backup.keep.3days': '3 dagar',
'backup.keep.7days': '7 dagar',
'backup.keep.14days': '14 dagar',
'backup.keep.30days': '30 dagar',
'backup.keep.forever': 'Behåll för alltid',
'backup.restoreConfirmTitle': 'Återställa säkerhetskopia?',
'backup.restoreWarning':
'Alla aktuella data (resor, platser, användare, uppladdningar) kommer att ersättas permanent med säkerhetskopian. Denna åtgärd går inte att ångra.',
'backup.restoreTip': 'Tips: Gör en säkerhetskopia av det aktuella läget innan du återställer.',
'backup.restoreConfirm': 'Ja, återställ',
};
export default backup;
+121
View File
@@ -0,0 +1,121 @@
import type { TranslationStrings } from '../types';
const budget: TranslationStrings = {
'budget.title': 'Budget',
'budget.exportCsv': 'Exportera CSV',
'budget.emptyTitle': 'Ingen budget har skapats ännu',
'budget.emptyText': 'Skapa kategorier och poster för att planera din resebudget',
'budget.emptyPlaceholder': 'Ange kategorinamn...',
'budget.createCategory': 'Skapa kategori',
'budget.category': 'Kategori',
'budget.categoryName': 'Kategorinamn',
'budget.table.name': 'Namnn',
'budget.table.total': 'Totalt',
'budget.table.persons': 'Personer',
'budget.table.days': 'Dagar',
'budget.table.perPerson': 'Per Person',
'budget.table.perDay': 'Per Dag',
'budget.table.perPersonDay': 'P. p / Dag',
'budget.table.note': 'Notering',
'budget.table.date': 'Datum',
'budget.newEntry': 'Nytt inlägg',
'budget.defaultEntry': 'Nytt inlägg',
'budget.defaultCategory': 'Ny kategori',
'budget.total': 'Totalt',
'budget.totalBudget': 'Total Budget',
'budget.byCategory': 'Efter kategori',
'budget.editTooltip': 'Klicka för att redigera',
'budget.linkedToReservation': 'Kopplat till en bokning – redigera namnet där',
'budget.confirm.deleteCategory': 'Är du säker på att du vill ta bort kategorin "{name}" med {count} inlägg?',
'budget.deleteCategory': 'Ta bort kategori',
'budget.perPerson': 'Per Person',
'budget.paid': 'Betald',
'budget.open': 'Öppen',
'budget.noMembers': 'Inga medlemmar har tilldelats',
'budget.settlement': 'Uppgörelse',
'budget.settlementInfo':
'Klicka på en medlems avatar vid en budgetpost för att markera den med grönt – det betyder att personen har betalat. Avräkningen visar sedan vem som är skyldig vem och hur mycket.',
'budget.netBalances': 'Nettosaldon',
'budget.categoriesLabel': 'kategorier',
'costs.you': 'Du',
'costs.youShort': 'D',
'costs.youLower': 'du',
'costs.youOwe': 'Du är skyldig',
'costs.youOweSub': 'Du bör betala andra',
'costs.youreOwed': "Du är skyldig",
'costs.youreOwedSub': 'Andra borde betala dig',
'costs.totalSpend': 'Totala resekostnader',
'costs.totalSpendSub': 'Bland alla resenärer',
'costs.to': 'Till',
'costs.from': 'Från',
'costs.allSettled': "Allt är nu reglerat",
'costs.nothingOwed': 'Ingenting är skyldig dig',
'costs.yourShare': 'Din andel',
'costs.youPaid': 'Du betalade',
'costs.expenses': 'Kostnader',
'costs.entries': '{count} inlägg',
'costs.searchPlaceholder': 'Sök kostnader…',
'costs.filter.all': 'Alla',
'costs.filter.mine': 'Betalat av mig',
'costs.filter.owed': "Jag är skyldig",
'costs.addExpense': 'Lägg till utgift',
'costs.editExpense': 'Redigera utgift',
'costs.noMatch': 'Inga utgifter stämmer överens med din sökning.',
'costs.emptyText': 'Inga utgifter ännu. Lägg till din första.',
'costs.spent': '{amount} spenderat',
'costs.noDate': 'Inget datum',
'costs.noOnePaid': 'Ingen har betalat än',
'costs.youLent': 'du lånade ut {amount}',
'costs.youBorrowed': 'du lånade {amount}',
'costs.settleUp': 'Betala',
'costs.history': 'Historik',
'costs.everyoneSquare': "Alla är likadana",
'costs.nothingOutstanding': 'Det finns inga utestående betalningar just nu.',
'costs.pay': 'betala',
'costs.pays': 'betalar',
'costs.settle': 'Lösa',
'costs.balances': 'Balanser',
'costs.byCategory': 'Via kategori',
'costs.noCategories': 'Inga utgifter än.',
'costs.settleHistory': 'Historik över reglering',
'costs.noSettlements': 'Inga betalningar har ännu reglerats.',
'costs.paymentsSettled': '{count} betalningar som har reglerats',
'costs.paid': 'betald',
'costs.undo': 'Ångra',
'costs.whatFor': 'Vad var det till för?',
'costs.namePlaceholder': 't.ex. middag, souvenirer, bensin…',
'costs.totalAmount': 'Totalt belopp',
'costs.currency': 'Valuta',
'costs.day': 'Dag',
'costs.rateLabel': '1 {from} i {to}',
'costs.category': 'Kategori',
'costs.whoPaid': 'Vem betalade?',
'costs.splitBetween': 'Fördela jämnt mellan',
'costs.pickSomeone': 'Välj minst en person att dela med.',
'costs.splitSummary': 'Dela {count} sätt · {amount} var och en',
'costs.cat.accommodation': 'Boende',
'costs.cat.food': 'Mat och dryck',
'costs.cat.groceries': 'Livsmedel',
'costs.cat.transport': 'Transport',
'costs.cat.flights': 'Flyg',
'costs.cat.activities': 'Aktiviteter',
'costs.cat.sightseeing': 'Sevärdheter',
'costs.cat.shopping': 'Shopping',
'costs.cat.fees': 'Avgifter och biljetter',
'costs.cat.health': 'Hälsa',
'costs.cat.tips': 'Dricks',
'costs.cat.other': 'Annat',
'costs.daysCount': '{count} dagar',
'costs.travelers': '{count} resenärer',
'costs.liveRate': 'realtidspris',
'costs.settleAll': 'Reglera allt',
'costs.payment': 'Betalning',
'costs.editPayment': 'Redigera betalning',
'costs.addPayment': 'Lägg till betalning',
'costs.unfinished': 'Oavslutad',
'costs.unfinishedHint': 'Endast totalt – ännu inte reglerat',
'costs.tapToInclude': 'Tryck för att inkludera',
'costs.amount': 'Summa',
};
export default budget;
+25
View File
@@ -0,0 +1,25 @@
import type { TranslationStrings } from '../types';
const categories: TranslationStrings = {
'categories.title': 'Kategorier',
'categories.subtitle': 'Hantera kategorier för platser',
'categories.new': 'Ny kategori',
'categories.empty': 'Inga kategorier ännu',
'categories.namePlaceholder': 'Kategorinamn',
'categories.icon': 'Ikon',
'categories.color': 'Färg',
'categories.customColor': 'Välj egen färg',
'categories.preview': 'Förhandsgranskning',
'categories.defaultName': 'Kategori',
'categories.update': 'Uppdatera',
'categories.create': 'Skapa',
'categories.confirm.delete': 'Ta bort kategorin? Platser i denna kategori kommer inte att tas bort.',
'categories.toast.loadError': 'Det gick inte att ladda kategorierna',
'categories.toast.nameRequired': 'Ange ett namn',
'categories.toast.updated': 'Kategorin har uppdaterats',
'categories.toast.created': 'Kategori skapad',
'categories.toast.saveError': 'Det gick inte att spara',
'categories.toast.deleted': 'Kategorin har tagits bort',
'categories.toast.deleteError': 'Det gick inte att ta bort',
};
export default categories;
+75
View File
@@ -0,0 +1,75 @@
import type { TranslationStrings } from '../types';
const collab: TranslationStrings = {
'collab.tabs.chat': 'Chatt',
'collab.tabs.notes': 'Noteringar',
'collab.tabs.polls': 'Omröstningar',
'collab.whatsNext.title': "Vad händer härnäst?",
'collab.whatsNext.today': 'Idag',
'collab.whatsNext.tomorrow': 'I morgon',
'collab.whatsNext.empty': 'Inga kommande aktiviteter',
'collab.whatsNext.until': 'till',
'collab.whatsNext.emptyHint': 'Här visas aktiviteter med angivna tider',
'collab.chat.send': 'Skicka',
'collab.chat.placeholder': 'Skriv ett meddelande...',
'collab.chat.empty': 'Inled konversationen',
'collab.chat.emptyHint': 'Meddelanden delas med alla deltagare i resan',
'collab.chat.emptyDesc': 'Dela idéer, planer och nyheter med din resegrupp',
'collab.chat.today': 'Idag',
'collab.chat.yesterday': 'Igår',
'collab.chat.deletedMessage': 'raderade ett meddelande',
'collab.chat.reply': 'Svara',
'collab.chat.loadMore': 'Ladda äldre meddelanden',
'collab.chat.justNow': 'just nu',
'collab.chat.minutesAgo': '{n}m sedan',
'collab.chat.hoursAgo': '{n}h sedan',
'collab.notes.title': 'Noteringar',
'collab.notes.new': 'Ny notering',
'collab.notes.empty': 'Inga anteckningar ännu',
'collab.notes.emptyHint': 'Börja samla in idéer och planer',
'collab.notes.all': 'Alla',
'collab.notes.titlePlaceholder': 'Noterings titel',
'collab.notes.contentPlaceholder': 'Skriv något...',
'collab.notes.categoryPlaceholder': 'Kategori',
'collab.notes.newCategory': 'Ny kategori...',
'collab.notes.category': 'Kategori',
'collab.notes.noCategory': 'Ingen kategori',
'collab.notes.color': 'Färg',
'collab.notes.save': 'Spara',
'collab.notes.cancel': 'Avbryt',
'collab.notes.edit': 'Redigera',
'collab.notes.delete': 'Radera',
'collab.notes.confirmDeleteTitle': 'Radera notering?',
'collab.notes.confirmDeleteBody': 'Denna notering kommer raderas permanent',
'collab.notes.pin': 'Fäst',
'collab.notes.unpin': 'Ta bort fästningen',
'collab.notes.daysAgo': '{n}d sedan',
'collab.notes.categorySettings': 'Hantera kategorier',
'collab.notes.create': 'Skapa',
'collab.notes.website': 'Hemsida',
'collab.notes.websitePlaceholder': 'https://...',
'collab.notes.attachFiles': 'Bifoga filer',
'collab.notes.noCategoriesYet': 'Inga kategorier ännu',
'collab.notes.emptyDesc': 'Skapa en anteckning för att komma igång',
'collab.polls.title': 'Omröstning',
'collab.polls.new': 'Ny omröstning',
'collab.polls.empty': 'Inga omröstningar ännu',
'collab.polls.emptyHint': 'Fråga gruppen och rösta tillsammans',
'collab.polls.question': 'Fråga',
'collab.polls.questionPlaceholder': 'Vad ska vi göra?',
'collab.polls.addOption': '+ Lägg till alternativ',
'collab.polls.optionPlaceholder': 'Alternativ {n}',
'collab.polls.create': 'Skapa omröstning',
'collab.polls.close': 'Stäng',
'collab.polls.closed': 'Stängd',
'collab.polls.votes': '{n} röster',
'collab.polls.vote': '{n} rösta',
'collab.polls.multipleChoice': 'Flera val',
'collab.polls.multiChoice': 'Flera val',
'collab.polls.deadline': 'Tidsfrist',
'collab.polls.option': 'Val',
'collab.polls.options': 'Val',
'collab.polls.delete': 'Ta bort',
'collab.polls.closedSection': 'Stängd',
};
export default collab;
+54
View File
@@ -0,0 +1,54 @@
import type { TranslationStrings } from '../types';
const common: TranslationStrings = {
'common.save': 'Spara',
'common.showMore': 'Visa mer',
'common.showLess': 'Visa mindre',
'common.cancel': 'Avbryt',
'common.clear': 'Rensa',
'common.delete': 'Ta bort',
'common.edit': 'Redigera',
'common.add': 'Lägg till',
'common.loading': 'Laddar...',
'common.import': 'Importera',
'common.select': 'Välj',
'common.selectAll': 'Välj alla',
'common.deselectAll': 'Avmarkera alla',
'common.error': 'Fel',
'common.unknownError': 'Okänt fel',
'common.tooManyAttempts': 'För många försök. Försök igen senare.',
'common.back': 'Tillbaka',
'common.all': 'Alla',
'common.close': 'Stäng',
'common.open': 'Öppen',
'common.upload': 'Ladda upp',
'common.search': 'Sök',
'common.confirm': 'Godkänn',
'common.ok': 'OK',
'common.yes': 'Ja',
'common.no': 'Nej',
'common.or': 'eller',
'common.none': 'Ingen',
'common.date': 'Datum',
'common.rename': 'Döp om',
'common.discardChanges': 'Ångra ändringar',
'common.discard': 'Ångra',
'common.name': 'Namn',
'common.email': 'E-post',
'common.password': 'Lösenord',
'common.saving': 'Sparar...',
'common.justNow': 'just nu',
'common.hoursAgo': '{count}h sedan',
'common.daysAgo': '{count}d sedan',
'common.saved': 'Sparad',
'common.update': 'Uppdatera',
'common.change': 'Ändra',
'common.uploading': 'Laddar upp…',
'common.backToPlanning': 'Tillbaka till planering',
'common.reset': 'Återställ',
'common.expand': 'Expandera',
'common.collapse': 'Dölj',
'common.copy': 'Kopiera',
'common.copied': 'Kopierad',
};
export default common;
+166
View File
@@ -0,0 +1,166 @@
import type { TranslationStrings } from '../types';
const dashboard: TranslationStrings = {
'dashboard.title': 'Mina resor',
'dashboard.subtitle.loading': 'Laddar resor...',
'dashboard.subtitle.trips': '{count} resor ({archived} arkiverad)',
'dashboard.subtitle.empty': 'Påbörja din första resa',
'dashboard.subtitle.activeOne': '{count} aktiv resa',
'dashboard.subtitle.activeMany': '{count} aktiva resor',
'dashboard.subtitle.archivedSuffix': ' · {count} arkiverad',
'dashboard.newTrip': 'Ny resa',
'dashboard.newTripSub': 'Planera en ny resa från grunden',
'dashboard.gridView': 'Rutnätsvy',
'dashboard.listView': 'Listvy',
'dashboard.currency': 'Valuta',
'dashboard.timezone': 'Tidszoner',
'dashboard.localTime': 'Lokal',
'dashboard.timezoneCustomTitle': 'Anpassad tidszon',
'dashboard.timezoneCustomLabelPlaceholder': 'Etikett (valfritt)',
'dashboard.timezoneCustomTzPlaceholder': 't.ex. America/New_York',
'dashboard.timezoneCustomAdd': 'Lägg till',
'dashboard.timezoneCustomErrorEmpty': 'Ange en tidszonskod',
'dashboard.timezoneCustomErrorInvalid': 'Ogiltig tidszon. Använd ett format som Europe/Berlin',
'dashboard.timezoneCustomErrorDuplicate': 'Redan lagts till',
'dashboard.emptyTitle': 'Inga resor ännu',
'dashboard.emptyText': 'Skapa din första resa och börja planera!',
'dashboard.emptyButton': 'Skapa första resan',
'dashboard.nextTrip': 'Nästa resa',
'dashboard.shared': 'Delad',
'dashboard.sharedBy': 'Delad av {name}',
'dashboard.days': 'Dagar',
'dashboard.places': 'Platser',
'dashboard.members': 'Vänner',
'dashboard.archive': 'Arkiv',
'dashboard.copyTrip': 'Kopiera',
'dashboard.copySuffix': 'kopiera',
'dashboard.restore': 'Återställ',
'dashboard.archived': 'Arkiverad',
'dashboard.status.ongoing': 'Pågående',
'dashboard.status.today': 'Idag',
'dashboard.status.tomorrow': 'I morgon',
'dashboard.status.past': 'Tidigare',
'dashboard.status.daysLeft': '{count} dagar kvar',
'dashboard.toast.loadError': 'Det gick inte att ladda resor',
'dashboard.loadErrorBanner': "Det gick inte att ansluta till servern. Dina resor är säkra – försök igen.",
'dashboard.retry': 'Försök igen',
'dashboard.toast.created': 'Resan har skapats!',
'dashboard.toast.createError': 'Det gick inte att skapa resan',
'dashboard.toast.updated': 'Resan har uppdaterats!',
'dashboard.toast.updateError': 'Det gick inte att uppdatera resan',
'dashboard.toast.deleted': 'Resan har raderats',
'dashboard.toast.deleteError': 'Det gick inte att ta bort resan',
'dashboard.toast.archived': 'Resan har arkiverats',
'dashboard.toast.archiveError': 'Det gick inte att arkivera resan',
'dashboard.toast.restored': 'Resan har återställts',
'dashboard.toast.restoreError': 'Det gick inte att återställa resan',
'dashboard.toast.copied': 'Resan har kopierats!',
'dashboard.toast.copyError': 'Det gick inte att kopiera resan',
'dashboard.confirm.delete': 'Ta bort resa "{title}"? Alla platser och planer kommer att raderas permanent.',
'dashboard.confirm.copy.title': 'Vill du kopiera den här resan?',
'dashboard.confirm.copy.willCopy': 'Kommer att kopieras',
'dashboard.confirm.copy.will1': 'Dagar, platser och dagsuppgifter',
'dashboard.confirm.copy.will2': 'Boende och bokningar',
'dashboard.confirm.copy.will3': 'Budgetposter och ordning på kategorierna',
'dashboard.confirm.copy.will4': 'Packlistor (okontrollerade)',
'dashboard.confirm.copy.will5': 'Uppgifter (ej tilldelade och ej avklarade)',
'dashboard.confirm.copy.will6': 'Dagliga anteckningar',
'dashboard.confirm.copy.wontCopy': "Kommer inte att kopieras",
'dashboard.confirm.copy.wont1': 'Samarbetspartners och medlemmarnas uppdrag',
'dashboard.confirm.copy.wont2': 'Samarbetsanteckningar, omröstningar och meddelanden',
'dashboard.confirm.copy.wont3': 'Filer och foton',
'dashboard.confirm.copy.wont4': 'Dela tokens',
'dashboard.confirm.copy.confirm': 'Kopiera resan',
'dashboard.editTrip': 'Redigera resa',
'dashboard.createTrip': 'Skapa ny resa',
'dashboard.tripTitle': 'Titel',
'dashboard.tripTitlePlaceholder': 't.ex. Sommar i Japan',
'dashboard.tripDescription': 'Beskrivning',
'dashboard.tripDescriptionPlaceholder': 'Vad handlar den här resan om?',
'dashboard.startDate': 'Startdatum',
'dashboard.endDate': 'Slutdatum',
'dashboard.dayCount': 'Antal dagar',
'dashboard.dayCountHint': 'Hur många dagar ska man räkna med när inga resedatum är fastställda?',
'dashboard.noDateHint': 'Inget datum angivet — 7 standarddagar kommer att skapas. Du kan ändra detta när som helst.',
'dashboard.coverImage': 'Omslagsbild',
'dashboard.addCoverImage': 'Lägg till omslagsbild (eller dra och släpp)',
'dashboard.addMembers': 'Resekompisar',
'dashboard.addMember': 'Lägg till medlem',
'dashboard.coverSaved': 'Omslagsbild sparad',
'dashboard.coverUploadError': 'Det gick inte att ladda upp',
'dashboard.coverRemoveError': 'Det gick inte att ta bort',
'dashboard.titleRequired': 'Titel är obligatoriskt',
'dashboard.endDateError': 'Slutdatumet måste ligga efter startdatumet',
'dashboard.greeting.morning': 'God morgon,',
'dashboard.greeting.afternoon': 'God eftermiddag,',
'dashboard.greeting.evening': 'God kväll,',
'dashboard.mobile.liveNow': 'Lev nu',
'dashboard.mobile.tripProgress': 'Resans förlopp',
'dashboard.mobile.daysLeft': '{count} dagar kvar',
'dashboard.mobile.places': 'Platser',
'dashboard.mobile.buddies': 'Kompisar',
'dashboard.mobile.newTrip': 'Ny resa',
'dashboard.mobile.currency': 'Valuta',
'dashboard.mobile.timezone': 'Tidszone',
'dashboard.mobile.upcomingTrips': 'Kommande resor',
'dashboard.mobile.yourTrips': 'Dina resor',
'dashboard.mobile.trips': 'resor',
'dashboard.mobile.starts': 'Börjar',
'dashboard.mobile.duration': 'Längd',
'dashboard.mobile.day': 'dag',
'dashboard.mobile.days': 'dagar',
'dashboard.mobile.ongoing': 'Pågår',
'dashboard.mobile.startsToday': 'Börjar idag',
'dashboard.mobile.tomorrow': 'I morgon',
'dashboard.mobile.inDays': 'Inom {count} dagar',
'dashboard.mobile.inMonths': 'Inom {count} månader',
'dashboard.mobile.completed': 'Slutförd',
'dashboard.mobile.currencyConverter': 'Valutaomvandlare',
'dashboard.filter.planned': 'Planerad',
'dashboard.hero.badgeLive': 'LEV NU',
'dashboard.hero.badgeToday': 'BÖRJAR IDAG',
'dashboard.hero.badgeTomorrow': 'I MORGON',
'dashboard.hero.badgeNext': 'NÄSTA',
'dashboard.hero.badgeRecent': 'SENASTE',
'dashboard.hero.tripDates': 'Resedatum',
'dashboard.hero.noDates': 'Tillgängliga datum',
'dashboard.hero.travelerOne': '{count} resenär',
'dashboard.hero.travelerMany': '{count} resenärer',
'dashboard.hero.destinationOne': '{count} destionation',
'dashboard.hero.destinationMany': '{count} destinationer',
'dashboard.hero.dayUnitOne': 'dag',
'dashboard.hero.dayUnitMany': 'dagar',
'dashboard.hero.dayLeft': 'Dag kvar',
'dashboard.hero.daysLeft': 'Dagar kvar',
'dashboard.hero.lastDay': 'Sista dagen',
'dashboard.hero.untilStart': 'Fram till start',
'dashboard.hero.startsIn': 'Resan börjar i',
'dashboard.atlas.countriesVisited': 'Atlas · Besökta länder',
'dashboard.atlas.ofTotal': 'av {total}',
'dashboard.atlas.tripsTotal': 'Resor totalt',
'dashboard.atlas.placesMapped': '{count} platser kartlagda',
'dashboard.atlas.daysTraveled': 'Dagar rest',
'dashboard.atlas.daysUnit': 'dagar',
'dashboard.atlas.acrossAllTrips': 'för alla resor',
'dashboard.atlas.distanceFlown': 'Flygsträcka',
'dashboard.atlas.kmUnit': 'km',
'dashboard.atlas.aroundEquator': '≈ {count}× runt ekvatorn',
'dashboard.card.idea': 'Idé',
'dashboard.card.buddyOne': 'Kompis',
'dashboard.fx.from': 'Från',
'dashboard.fx.to': 'Till',
'dashboard.fx.unavailable': 'Pris ej tillgängligt',
'dashboard.tz.searchPlaceholder': 'Sök efter tidszon…',
'dashboard.tz.empty': 'Inga andra tidszoner än så länge — lägg till en med +',
'dashboard.upcoming.title': 'Kommande bokningar',
'dashboard.upcoming.empty': 'Inget är bokat än.',
'dashboard.aria.toggleView': 'Växla vy',
'dashboard.aria.filter': 'Filtrera',
'dashboard.aria.duplicate': 'Duplicera',
'dashboard.aria.refreshRates': 'Uppdatera kurser',
'dashboard.aria.swapCurrencies': 'Växla valutor',
'dashboard.aria.addTimezone': 'Lägg till tidszon',
'dashboard.aria.removeTimezone': 'Ta bort {city}',
'dashboard.dayCountRequired': 'Antalet dagar måste anges',
};
export default dashboard;
+25
View File
@@ -0,0 +1,25 @@
import type { TranslationStrings } from '../types';
const day: TranslationStrings = {
'day.precipProb': 'Sannolikhet för regn',
'day.precipitation': 'Nederbörd',
'day.wind': 'Vind',
'day.sunrise': 'Soluppgång',
'day.sunset': 'Solnedgång',
'day.hourlyForecast': 'Prognos per timme',
'day.climateHint': 'Historiska medelvärden — prognos i realtid tillgänglig inom 16 dagar från detta datum.',
'day.noWeather': 'Det finns inga väderuppgifter tillgängliga. Lägg till en plats med koordinater.',
'day.overview': 'Daglig översikt',
'day.accommodation': 'Boende',
'day.addAccommodation': 'Lägg till boende',
'day.hotelDayRange': 'Tillämpa på dagar',
'day.noPlacesForHotel': 'Lägg först till platser i din resa',
'day.allDays': 'Alla',
'day.checkIn': 'Incheckning',
'day.checkInUntil': 'Tills',
'day.checkOut': 'Utcheckning',
'day.confirmation': 'Bekräftelse',
'day.editAccommodation': 'Redigera boende',
'day.reservations': 'Bokningar',
};
export default day;
+55
View File
@@ -0,0 +1,55 @@
import type { TranslationStrings } from '../types';
const dayplan: TranslationStrings = {
'dayplan.icsTooltip': 'Exportera kalender (ICS)',
'dayplan.emptyDay': 'Inga platser planerade för denna dag',
'dayplan.cannotReorderTransport': 'Bokningar med fast tid kan inte omordnas',
'dayplan.confirmRemoveTimeTitle': 'Ta bort tid?',
'dayplan.confirmRemoveTimeBody':
'Denna plats har fasta tider ({time}). Om du flyttar den tas tidsangivelsen bort och du kan sortera fritt.',
'dayplan.confirmRemoveTimeAction': 'Ta bort tid och flytta',
'dayplan.confirmDeleteNoteTitle': 'Ta bort notering?',
'dayplan.confirmDeleteNoteBody': 'Denna anteckning kommer att raderas permanent.',
'dayplan.cannotDropOnTimed': 'Objekt kan inte placeras mellan tidsbundna poster',
'dayplan.cannotBreakChronology': 'Detta skulle störa den kronologiska ordningen för tidsbestämda poster och bokningar',
'dayplan.addNote': 'Lägg till notering',
'dayplan.expandAll': 'Expandera alla dagar',
'dayplan.collapseAll': 'Dölj alla dagar',
'dayplan.editNote': 'Redigera notering',
'dayplan.noteAdd': 'Lägg till notering',
'dayplan.noteEdit': 'Redigera notering',
'dayplan.noteTitle': 'Notering',
'dayplan.noteSubtitle': 'Daglig notering',
'dayplan.totalCost': 'Totala kostnaden',
'dayplan.days': 'Dagar',
'dayplan.dayN': 'Dag {n}',
'dayplan.calculating': 'Beräknar...',
'dayplan.route': 'Rutt',
'dayplan.optimize': 'Optimera',
'dayplan.optimized': 'Rutt optimerad',
'dayplan.routeError': 'Det gick inte att beräkna rutten',
'dayplan.toast.needTwoPlaces': 'Minst två platser krävs för ruttoptimering',
'dayplan.toast.routeOptimized': 'Ruttoptimerad',
'dayplan.toast.routeOptimizedFromHotel': 'Ruttoptimerad utifrån ditt boende',
'dayplan.toast.noGeoPlaces': 'Inga platser med koordinater hittades för ruttberäkningen',
'dayplan.confirmed': 'Bekräftat',
'dayplan.pendingRes': 'Pendlande',
'dayplan.pdf': 'PDF',
'dayplan.pdfTooltip': 'Exportera dagsplanen som PDF',
'dayplan.pdfError': 'Kunde inte exportera PDF',
'dayplan.mobile.addPlace': 'Lägg itll plats',
'dayplan.mobile.searchPlaces': 'Sök platser...',
'dayplan.mobile.allAssigned': 'Alla platser tilldelade',
'dayplan.mobile.noMatch': 'Inga träffar',
'dayplan.mobile.createNew': 'Skapa ny plats',
'dayplan.reorderDays': 'Sortera om dagar',
'dayplan.reorderTitle': 'Sortera om dagar',
'dayplan.reorderHint': "Dagens platser, anteckningar och bokningar följer med.",
'dayplan.addDay': 'Lägg till dag',
'dayplan.moveUp': 'Flytta upp',
'dayplan.moveDown': 'Flytta ner',
'dayplan.reorderUndo': 'Sortera om dagar',
'dayplan.reorderError': 'Kunde inte sortera om dagar',
'dayplan.addDayError': 'Kunde inte lägga till dag',
};
export default dayplan;
@@ -0,0 +1,62 @@
import type { NotificationLocale } from '../externalNotifications/types';
const en: NotificationLocale = {
email: {
footer: 'Du har fått detta eftersom du har aktiverat aviseringar i TREK.',
manage: 'Hantera egenskaper under Inställningar',
madeWith: 'Gjorde med',
openTrek: 'Öppna TREK',
},
events: {
trip_invite: (p) => ({
title: `Reseinbjudan: "${p.trip}"`,
body: `${p.actor} bjöd in ${p.invitee || 'en medlem'} till resan "${p.trip}".`,
}),
booking_change: (p) => ({
title: `Ny bokning: ${p.booking}`,
body: `${p.actor} la till en ny ${p.type} "${p.booking}" till "${p.trip}".`,
}),
trip_reminder: (p) => ({
title: `Resepåminnelse: ${p.trip}`,
body: `Din resa "${p.trip}" kommer snart!`,
}),
todo_due: (p) => ({
title: `Uppgift förfaller: ${p.todo}`,
body: `"${p.todo}" i "${p.trip}" förfaller den ${p.due}.`,
}),
vacay_invite: (p) => ({
title: 'Vacay sammanslagnings inbjudan',
body: `${p.actor} bjöd in dig att slå samman semesterplaner. Öppna TREK för att acceptera eller avvisa.`,
}),
photos_shared: (p) => ({
title: `${p.count} foton delade`,
body: `${p.actor} delade ${p.count} foto(n) i "${p.trip}".`,
}),
collab_message: (p) => ({
title: `Nytt meddelande i "${p.trip}"`,
body: `${p.actor}: ${p.preview}`,
}),
packing_tagged: (p) => ({
title: `Packning: ${p.category}`,
body: `${p.actor} tilldelade dig till "${p.category}" packning kategori i "${p.trip}".`,
}),
version_available: (p) => ({
title: 'Ny TREK version tillgänglig',
body: `TREK ${p.version} är nu tillgänglig. Gå till adminpanelen för att uppdatera.`,
}),
synology_session_cleared: () => ({
title: 'Synology session rensad',
body: 'Ditt Synology-konto eller din webbadress har ändrats. Du har loggats ut från Synology Photos.',
}),
},
passwordReset: {
subject: 'Återställ ditt lösenord',
greeting: 'Hej',
body: 'Vi har fått en begäran om att återställa lösenordet till ditt TREK konto. Klicka på knappen nedan för att ange ett nytt lösenord.',
ctaIntro: 'Återställ lösenord',
expiry: 'Den här länken upphör att gälla om 60 minuter.',
ignore: "Om du inte har begärt detta kan du lugnt strunta i det här e-postmeddelandet – ditt lösenord kommer inte att ändras.",
},
};
export default en;
+59
View File
@@ -0,0 +1,59 @@
import type { TranslationStrings } from '../types';
const files: TranslationStrings = {
'files.title': 'Filer',
'files.pageTitle': 'Filer & Dokument',
'files.subtitle': '{count} filer för {trip}',
'files.download': 'Ladda ner',
'files.openError': 'Kunde inte öppna fil',
'files.downloadPdf': 'Ladda ner PDF',
'files.count': '{count} filer',
'files.countSingular': '1 fil',
'files.uploaded': '{count} uppladdade',
'files.uploadError': 'Uppladdning misslyckades',
'files.dropzone': 'Släpp filer här',
'files.dropzoneHint': 'eller klicka för att bläddra',
'files.allowedTypes': 'Foton, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Högst 50 MB',
'files.uploading': 'Laddar upp...',
'files.filterAll': 'Alla',
'files.filterPdf': 'PDFs',
'files.filterImages': 'Bilder',
'files.filterDocs': 'Dokument',
'files.filterCollab': 'Samarbetsanteckningar',
'files.sourceCollab': 'Från samarbetsanteckningar',
'files.empty': 'Inga filer ännu',
'files.emptyHint': 'Ladda upp filer för att bifoga dem till din resa',
'files.openTab': 'Öppna i ny flik',
'files.confirm.delete': 'Är du säker på att du vill ta bort den här filen?',
'files.toast.deleted': 'Fil borttagen',
'files.toast.deleteError': 'Kunde inte ta bort filen',
'files.sourcePlan': 'Dagsplan',
'files.sourceBooking': 'Bokning',
'files.sourceTransport': 'Transport',
'files.attach': 'Bifoga',
'files.pasteHint': 'Du kan också klistra in foton från urklipp (Ctrl+V)',
'files.trash': 'Papperskorgen',
'files.trashEmpty': 'papperskorgen är tom',
'files.emptyTrash': 'Töm papperskorgen',
'files.restore': 'Återställ',
'files.star': 'Stjärnmarkera',
'files.unstar': 'Ta bort stjärnmarkering',
'files.assign': 'Tilldela',
'files.assignTitle': 'Tilldela fil',
'files.assignPlace': 'Plats',
'files.assignBooking': 'Bokning',
'files.assignTransport': 'Transport',
'files.unassigned': 'Ej tilldelad',
'files.unlink': 'Ta bort länk',
'files.toast.trashed': 'Flyttad till papperskorgen',
'files.toast.restored': 'Fil återställd',
'files.toast.trashEmptied': 'papperskorgen tömd',
'files.toast.assigned': 'Fil tilldelad',
'files.toast.assignError': 'Tilldelning misslyckades',
'files.toast.restoreError': 'Återställning misslyckades',
'files.confirm.permanentDelete': 'Vill du ta bort den här filen permanent? Detta går inte att ångra.',
'files.confirm.emptyTrash': 'Vill du radera alla filer i papperskorgen permanent? Detta går inte att ångra.',
'files.noteLabel': 'Notering',
'files.notePlaceholder': 'Lägg till en notering...',
};
export default files;
+86
View File
@@ -0,0 +1,86 @@
import admin from './admin';
import airport from './airport';
import atlas from './atlas';
import backup from './backup';
import budget from './budget';
import categories from './categories';
import collab from './collab';
import common from './common';
import dashboard from './dashboard';
import day from './day';
import dayplan from './dayplan';
import files from './files';
import inspector from './inspector';
import journey from './journey';
import login from './login';
import map from './map';
import members from './members';
import memories from './memories';
import nav from './nav';
import notif from './notif';
import notifications from './notifications';
import oauth from './oauth';
import packing from './packing';
import pdf from './pdf';
import perm from './perm';
import photos from './photos';
import places from './places';
import planner from './planner';
import register from './register';
import reservations from './reservations';
import settings from './settings';
import share from './share';
import shared from './shared';
import stats from './stats';
import system_notice from './system_notice';
import todo from './todo';
import transport from './transport';
import trip from './trip';
import trips from './trips';
import undo from './undo';
import vacay from './vacay';
const locale = {
...common,
...trips,
...nav,
...dashboard,
...settings,
...admin,
...dayplan,
...share,
...shared,
...login,
...register,
...vacay,
...atlas,
...trip,
...places,
...inspector,
...reservations,
...airport,
...map,
...budget,
...files,
...packing,
...members,
...categories,
...backup,
...photos,
...pdf,
...planner,
...stats,
...day,
...memories,
...collab,
...perm,
...undo,
...notifications,
...todo,
...notif,
...journey,
...oauth,
...system_notice,
...transport,
};
export default locale;
+22
View File
@@ -0,0 +1,22 @@
import type { TranslationStrings } from '../types';
const inspector: TranslationStrings = {
'inspector.opened': 'Öppen',
'inspector.closed': 'Stängd',
'inspector.openingHours': 'Öppettider',
'inspector.showHours': 'Visa öppettider',
'inspector.files': 'Filer',
'inspector.filesCount': '{count} filer',
'inspector.remove': 'Ta bort',
'inspector.removeFromDay': 'Ta bort från dag',
'inspector.addToDay': 'Lägg till i dagen',
'inspector.confirmedRes': 'Bekräftad bokning',
'inspector.pendingRes': 'Pendlande bokning',
'inspector.google': 'Öppna i Google Maps',
'inspector.website': 'Öppna hemsida',
'inspector.addRes': 'Bokning',
'inspector.editRes': 'Redigera bokning',
'inspector.participants': 'Deltagare',
'inspector.trackStats': 'Spåra statistik',
};
export default inspector;
+231
View File
@@ -0,0 +1,231 @@
import type { TranslationStrings } from '../types';
const journey: TranslationStrings = {
'journey.search.placeholder': 'Sök journeys…',
'journey.search.noResults': 'Inga journeys matchar "{query}"',
'journey.title': 'Journey',
'journey.subtitle': 'Följ dina resor i realtid',
'journey.new': 'Ny Journey',
'journey.create': 'Skapa',
'journey.titlePlaceholder': 'Vart ska du?',
'journey.empty': 'Inga journeys än',
'journey.emptyHint': 'Börja dokumentera din nästa resa',
'journey.deleted': 'Journey borttagen',
'journey.createError': 'Kunde inte skapa journey',
'journey.deleteError': 'Kunde inte ta bort journey',
'journey.deleteConfirmTitle': 'Ta bort',
'journey.deleteConfirmMessage': 'Ta bort "{title}"? Detta kan inte ångras.',
'journey.deleteConfirmGeneric': 'Är du säker på att du vill ta bort denna?',
'journey.notFound': 'Journey hittades inte',
'journey.photos': 'Foton',
'journey.timelineEmpty': 'Inga stopp än så länge',
'journey.timelineEmptyHint': 'Lägg till en incheckning eller skriv ett dagboksinlägg för att komma igång',
'journey.status.draft': 'Utkast',
'journey.status.active': 'Aktiv',
'journey.status.completed': 'Slutförd',
'journey.status.upcoming': 'Kommande',
'journey.status.archived': 'Arkiverat',
'journey.checkin.add': 'Checka in',
'journey.checkin.namePlaceholder': 'Platsnamn',
'journey.checkin.notesPlaceholder': 'Noteringar (valfritt)',
'journey.checkin.save': 'Spara',
'journey.checkin.error': 'Kunde inte spara incheckning',
'journey.entry.add': 'Dagboksinlägg',
'journey.entry.edit': 'Redigera inlägg',
'journey.entry.titlePlaceholder': 'Titel (valfritt)',
'journey.entry.bodyPlaceholder': 'Vad hände idag?',
'journey.entry.save': 'Spara',
'journey.entry.error': 'Kunde inte spara inlägg',
'journey.photo.add': 'Foto',
'journey.photo.uploadError': 'Uppladdning misslyckades',
'journey.share.share': 'Dela',
'journey.share.public': 'Offentlig',
'journey.share.linkCopied': 'Offentlig länk kopierad',
'journey.share.disabled': 'Offentlig delning avaktiverad',
'journey.editor.titlePlaceholder': 'Ge det här ögonblicket ett namn...',
'journey.editor.bodyPlaceholder': 'Berätta om den här dagen...',
'journey.editor.placePlaceholder': 'Plats (valfritt)',
'journey.editor.tagsPlaceholder': 'Taggar: en dold pärla, den bästa måltiden, måste återvända...',
'journey.visibility.private': 'Privat',
'journey.visibility.shared': 'Delad',
'journey.visibility.public': 'Offentlig',
'journey.emptyState.title': 'Din berättelse börjar här',
'journey.emptyState.subtitle': 'Checka in på en plats eller skriv ditt första dagboksinlägg',
'journey.frontpage.subtitle': "Förvandla dina resor till minnen du aldrig kommer att glömma",
'journey.frontpage.createJourney': 'Skapa Journey',
'journey.frontpage.activeJourney': 'Aktiv Journey',
'journey.frontpage.allJourneys': 'Alla Journeys',
'journey.frontpage.journeys': 'journeys',
'journey.frontpage.createNew': 'Skapa en ny Journey',
'journey.frontpage.createNewSub': 'Välj resor, skriv berättelser, dela med dig av dina äventyr',
'journey.frontpage.live': 'Live',
'journey.frontpage.synced': 'Synkad',
'journey.frontpage.continueWriting': 'Fortsätt skriva',
'journey.frontpage.updated': 'Uppdaterad {time}',
'journey.frontpage.suggestionLabel': 'Resan har just avslutats',
'journey.frontpage.suggestionText': 'Förvandla <strong>{title}</strong> till en Journey',
'journey.frontpage.dismiss': 'Stäng',
'journey.frontpage.journeyName': 'Journey namn',
'journey.frontpage.namePlaceholder': 't.ex. Sydostasien 2026',
'journey.frontpage.selectTrips': 'Välj resor',
'journey.frontpage.tripsSelected': 'resor markerade',
'journey.frontpage.trips': 'resor',
'journey.frontpage.placesImported': 'platser kommer att importeras',
'journey.frontpage.places': 'platser',
'journey.detail.backToJourney': 'Tillbaka till Journey',
'journey.detail.syncedWithTrips': 'Synkroniserat med resor',
'journey.detail.addEntry': 'Lägg till inlägg',
'journey.detail.newEntry': 'Ny inlägg',
'journey.detail.editEntry': 'Redigera inlägg',
'journey.detail.noEntries': 'Inga inlägg än så länge',
'journey.detail.noEntriesHint': 'Lägg till en resa för att komma igång med utkast',
'journey.detail.noPhotos': 'Inga foton ännu',
'journey.detail.noPhotosHint': 'Ladda upp foton till inlägg eller bläddra i ditt Immich/Synology-bibliotek',
'journey.detail.journeyTab': 'Journey',
'journey.detail.journeyStats': 'Journey statistik',
'journey.detail.syncedTrips': 'Synkroniserade resor',
'journey.detail.noTripsLinked': 'Inga resor har kopplats ännu',
'journey.detail.contributors': 'Medverkande',
'journey.detail.readMore': 'Läs mer',
'journey.detail.prosCons': 'För- och nackdelar',
'journey.detail.photos': 'foton',
'journey.detail.day': 'Dag {number}',
'journey.detail.places': 'platser',
'journey.stats.days': 'Dagar',
'journey.stats.cities': 'Städer',
'journey.stats.entries': 'Inlägg',
'journey.stats.photos': 'Foton',
'journey.stats.places': 'Platser',
'journey.skeletons.show': 'Visa förslag',
'journey.skeletons.hide': 'Dölj förslag',
'journey.verdict.lovedIt': 'Älskade det',
'journey.verdict.couldBeBetter': 'Kan bli bättre',
'journey.synced.places': 'platser',
'journey.synced.synced': 'synkade',
'journey.editor.discardChangesConfirm': 'Du har ändringar som inte har sparats. Vill du avbryta dem?',
'journey.editor.uploadFailed': 'Foto uppladdning misslyckades',
'journey.editor.uploadPhotos': 'Ladda upp foton',
'journey.editor.uploading': 'Laddar upp...',
'journey.editor.uploadingProgress': 'Laddar upp {done}/{total}…',
'journey.editor.uploadPartialFailed': '{failed} av {total} foton misslyckades — spara igen för att försoka igen',
'journey.editor.fromGallery': 'Från album',
'journey.editor.allPhotosAdded': 'Alla foton är redan tillagda',
'journey.editor.writeStory': 'Skriv din berättelse...',
'journey.editor.prosCons': 'För- och nackdelar',
'journey.editor.pros': 'Fördelar',
'journey.editor.cons': 'Nackdelar',
'journey.editor.proPlaceholder': 'Något fantastiskt...',
'journey.editor.conPlaceholder': 'Inte så bra...',
'journey.editor.addAnother': 'Lägg till en annan',
'journey.editor.date': 'Datum',
'journey.editor.location': 'Plats',
'journey.editor.searchLocation': 'Sök plats...',
'journey.editor.mood': 'Humör',
'journey.editor.weather': 'Väder',
'journey.editor.photoFirst': '1:a',
'journey.editor.makeFirst': 'Gör 1:a',
'journey.editor.searching': 'Söker...',
'journey.mood.amazing': 'Fantastiskt',
'journey.mood.good': 'Bra',
'journey.mood.neutral': 'Neutral',
'journey.mood.rough': 'Grov',
'journey.weather.sunny': 'Soligt',
'journey.weather.partly': 'Delvis molnigt',
'journey.weather.cloudy': 'Molnigt',
'journey.weather.rainy': 'Regnigt',
'journey.weather.stormy': 'Stormigt',
'journey.weather.cold': 'Snöigt',
'journey.trips.linkTrip': 'Länka resa',
'journey.trips.searchTrip': 'Sök resa',
'journey.trips.searchPlaceholder': 'Resans namn eller resmål...',
'journey.trips.noTripsAvailable': 'Inga resor tillgängliga',
'journey.trips.link': 'Länka',
'journey.trips.tripLinked': 'Resa länkat',
'journey.trips.linkFailed': 'Kunde inte länka resa',
'journey.trips.addTrip': 'Lägg till resa',
'journey.trips.unlinkTrip': 'Koppla ifrån resa',
'journey.trips.unlinkMessage':
'Koppla ifrån "{title}"? Alla synkroniserade poster och foton från den här resan kommer att raderas permanent. Detta går inte att ångra.',
'journey.trips.unlink': 'Koppla ifrån',
'journey.trips.tripUnlinked': 'Resa frånkopplad',
'journey.trips.unlinkFailed': 'Det gick inte att ta bort kopplingen till resan',
'journey.trips.noTripsLinkedSettings': 'Inga resor kopplade',
'journey.contributors.invite': 'Bjud in medverkande',
'journey.contributors.searchUser': 'Sök användare',
'journey.contributors.searchPlaceholder': 'Användarnamn eller epost...',
'journey.contributors.noUsers': 'Inga användare hittades',
'journey.contributors.role': 'Roll',
'journey.contributors.added': 'Medverkare tillagd',
'journey.contributors.addFailed': 'Kunde inte lägga till medverkare',
'journey.contributors.remove': 'Ta bort medverkare',
'journey.contributors.removeConfirm': 'Ta bort {username} från denna journey?',
'journey.contributors.removed': 'Medverkare borttagen',
'journey.contributors.removeFailed': 'Kunde inte ta bort medverkare',
'journey.share.publicShare': 'Offentlig delning',
'journey.share.createLink': 'Skapa en delningslänk',
'journey.share.linkCreated': 'Länk för delning har skapats',
'journey.share.createFailed': 'Kunde inte skapa en delningslänk',
'journey.share.copy': 'Kopiera',
'journey.share.copied': 'Kopierad!',
'journey.share.timeline': 'Tidslinje',
'journey.share.gallery': 'Album',
'journey.share.map': 'Karta',
'journey.share.removeLink': 'Ta bort delningslänk',
'journey.share.linkDeleted': 'Delningslänk borttagen',
'journey.share.deleteFailed': 'Kunde inte ta bort',
'journey.share.updateFailed': 'Kunde inte uppdatera',
'journey.invite.role': 'Roll',
'journey.invite.viewer': 'Visare',
'journey.invite.editor': 'Redaktör',
'journey.invite.invite': 'Bjud in',
'journey.invite.inviting': 'Bjuder in...',
'journey.settings.title': 'Journey Inställningar',
'journey.settings.coverImage': 'Omslagsbild',
'journey.settings.changeCover': 'Ändra omslag',
'journey.settings.addCover': 'Lägg till omslagsbild',
'journey.settings.name': 'Namn',
'journey.settings.subtitle': 'Undertext',
'journey.settings.subtitlePlaceholder': 't.ex. Thailand, Vietnam och Kambodja',
'journey.settings.endJourney': 'Arkivera Journey',
'journey.settings.reopenJourney': 'Återställ Journey',
'journey.settings.archived': 'Journey arkiverad',
'journey.settings.reopened': 'Journey återöppnad',
'journey.settings.endDescription': 'Döljer Live märket. Du kan öppna det igen när som helst.',
'journey.settings.delete': 'Ta bort',
'journey.settings.deleteJourney': 'Ta bort Journey',
'journey.settings.deleteMessage': 'Ta bort "{title}"? Alla inlägg och foton kommer att raderas.',
'journey.settings.saved': 'Inställningar sparade',
'journey.settings.saveFailed': 'Kunde inte spara',
'journey.settings.coverUpdated': 'Omslag uppdaterad',
'journey.settings.coverFailed': 'Uppladdning misslyckades',
'journey.settings.failedToDelete': 'Kunde inte ta bort',
'journey.entries.deleteTitle': 'Ta bort inlägg',
'journey.photosUploaded': '{count} foton uppladdade',
'journey.photosUploadFailed': 'Några foton kunde inte laddas upp',
'journey.photosAdded': '{count} foton tillagd',
'journey.public.notFound': 'Hittades inte',
'journey.public.notFoundMessage': "Denna journey existerar inte eller länken har utgått.",
'journey.public.readOnly': 'Skrivskyddad · Offentlig Journey',
'journey.public.tagline': 'Reseresurser och upptäcktspaket',
'journey.public.sharedVia': 'Dela via',
'journey.public.madeWith': 'Gjord med',
'journey.pdf.journeyBook': 'Journey bok',
'journey.pdf.madeWith': 'Gjord med TREK',
'journey.pdf.day': 'Dag',
'journey.pdf.theEnd': 'Slut',
'journey.pdf.saveAsPdf': 'Spara som PDF',
'journey.pdf.pages': 'sidor',
'journey.picker.tripPeriod': 'Reseperiod',
'journey.picker.dateRange': 'Datumintervall',
'journey.picker.allPhotos': 'Alla foton',
'journey.picker.albums': 'Album',
'journey.picker.selected': 'markerade',
'journey.picker.addTo': 'Lägg till i',
'journey.picker.newGallery': 'Nytt album',
'journey.picker.selectAll': 'Markera alla',
'journey.picker.deselectAll': 'Avmarkera alla',
'journey.picker.noAlbums': 'Inga album hittades',
'journey.picker.selectDate': 'Välj datum',
'journey.picker.search': 'Sök',
};
export default journey;
+89
View File
@@ -0,0 +1,89 @@
import type { TranslationStrings } from '../types';
const login: TranslationStrings = {
'login.error': 'Inloggningen misslyckades. Kontrollera dina inloggningsuppgifter.',
'login.tagline': 'Dina resor.\nDin plan.',
'login.description': 'Planera resor tillsammans med hjälp av interaktiva kartor, budgetar och synkronisering i realtid.',
'login.features.maps': 'Interaktiva kartor',
'login.features.mapsDesc': 'Google Places, rutter och klusterbildning',
'login.features.realtime': 'Synkronisering i realtid',
'login.features.realtimeDesc': 'Planera tillsammans via WebSocket',
'login.features.budget': 'Budgetuppföljning',
'login.features.budgetDesc': 'Kategorier, diagram och kostnader per person',
'login.features.collab': 'Samarbete',
'login.features.collabDesc': 'Flera användare med delade resor',
'login.features.packing': 'Packlistor',
'login.features.packingDesc': 'Kategorier, framsteg och förslag',
'login.features.bookings': 'Bokningar',
'login.features.bookingsDesc': 'Flyg, hotell, restauranger och mycket mer',
'login.features.files': 'Dokument',
'login.features.filesDesc': 'Ladda upp och hantera dokument',
'login.features.routes': 'Smarta rutter',
'login.features.routesDesc': 'Automatisk optimering och export till Google Maps',
'login.selfHosted': 'Egenhostad · Öppen källkod · Dina data förblir dina',
'login.title': 'Logga in',
'login.subtitle': 'Välkommen tillbaka',
'login.signingIn': 'Loggar in…',
'login.signIn': 'Logga in',
'login.createAdmin': 'Skapa administratörskonto',
'login.createAdminHint': 'Skapa det första administratörskontot för TREK.',
'login.setNewPassword': 'Ställ in nytt lösenord',
'login.setNewPasswordHint': 'Du måste byta lösenord innan du fortsätter.',
'login.createAccount': 'Skapa konto',
'login.createAccountHint': 'Skapa ett nytt konto.',
'login.creating': 'Skapar…',
'login.noAccount': "Har du inget konto?",
'login.hasAccount': 'Har du redan ett konto?',
'login.register': 'Registrera dig',
'login.emailPlaceholder': 'din@epost.com',
'login.username': 'Användarnamn',
'login.oidc.registrationDisabled': 'Registreringen är inaktiverad. Kontakta din administratör.',
'login.oidc.noEmail': 'Inget e-postmeddelande har mottagits från leverantören.',
'login.oidc.tokenFailed': 'Autentiseringen misslyckades.',
'login.oidc.invalidState': 'Ogiltig session. Försök igen.',
'login.demoFailed': 'Inloggningen för demoversionen misslyckades',
'login.oidcSignIn': 'Logga in med {name}',
'login.oidcOnly': 'Lösenordsautentisering är inaktiverad. Logga in via din SSO-leverantör.',
'login.oidcLoggedOut': 'Du har loggats ut. Logga in igen via din SSO-leverantör.',
'login.demoHint': 'Prova demoversionen – ingen registrering krävs',
'login.mfaTitle': 'Tvåfaktorsautentisering',
'login.mfaSubtitle': 'Ange den 6-siffriga koden från din autentiseringsapp.',
'login.mfaCodeLabel': 'Verifieringskod',
'login.mfaCodeRequired': 'Ange koden från din autentiseringsapp.',
'login.mfaHint': 'Öppna Google Authenticator, Authy eller någon annan TOTP-app.',
'login.mfaBack': '← Tillbaka till inloggningen',
'login.mfaVerify': 'Verifiera',
'login.invalidInviteLink': 'Ogiltig eller utgången inbjudningslänk',
'login.oidcFailed': 'Inloggningen på OIDC misslyckades',
'login.usernameRequired': 'Användarnamn krävs',
'login.passwordMinLength': 'Lösenordet måste bestå av minst 8 tecken',
'login.forgotPassword': 'Har du glömt lösenordet?',
'login.rememberMe': 'Kom ihåg mig',
'login.forgotPasswordTitle': 'Återställ ditt lösenord',
'login.forgotPasswordBody':
"Ange den e-postadress du använde när du registrerade dig. Om det finns ett konto skickar vi en länk för att återställa lösenordet.",
'login.forgotPasswordSubmit': 'Skicka återställningslänk',
'login.forgotPasswordSentTitle': 'Kolla din e-post',
'login.forgotPasswordSentBody':
'Om det finns ett konto kopplat till den e-postadressen är en återställningslänk på väg. Den går ut om 60 minuter.',
'login.forgotPasswordSmtpHintOff':
"Observera: din administratör har inte konfigurerat SMTP, så återställningslänken kommer att skrivas ut på serverkonsolen istället för att skickas via e-post.",
'login.backToLogin': 'Tillbaka till inloggningen',
'login.newPassword': 'Nytt lösenord',
'login.confirmPassword': 'Godkänn nytt lösenord',
'login.passwordsDontMatch': "Lösenorden matchar inte",
'login.mfaCode': '2FA kod',
'login.resetPasswordTitle': 'Ange ett nytt lösenord',
'login.resetPasswordBody': 'Välj ett starkt lösenord som du inte har använt här tidigare. Minst 8 tecken.',
'login.resetPasswordMfaBody': 'Ange din 2FA-kod eller en reservkod för att slutföra återställningen.',
'login.resetPasswordSubmit': 'Återställ lösenord',
'login.resetPasswordVerify': 'Verifiera och återställ',
'login.resetPasswordSuccessTitle': 'Lösenordet har uppdaterats',
'login.resetPasswordSuccessBody': 'Nu kan du logga in med ditt nya lösenord.',
'login.resetPasswordInvalidLink': 'Ogiltig återställningslänk',
'login.resetPasswordInvalidLinkBody': 'Den här länken saknas eller fungerar inte. Begär en ny för att kunna fortsätta.',
'login.resetPasswordFailed': 'Återställningen misslyckades. Länken kan ha gått ut.',
'login.passkey.signIn': 'Logga in med en inloggningsnyckel',
'login.passkey.failed': 'Inloggningsnyckel misslyckades. Försök igen.',
};
export default login;
+17
View File
@@ -0,0 +1,17 @@
import type { TranslationStrings } from '../types';
const map: TranslationStrings = {
'map.connections': 'Anslutningar',
'map.showConnections': 'Visa bokningsvägar',
'map.hideConnections': 'Dölj bokningsvägar',
'poi.searchThisArea': 'Sök i detta område',
'poi.cat.restaurants': 'Restauranger',
'poi.cat.cafes': 'Kaféer',
'poi.cat.bars': 'Barer och nattliv',
'poi.cat.hotels': 'Boende',
'poi.cat.sights': 'Sevärdheter',
'poi.cat.museums': 'Museer och kultur',
'poi.cat.nature': 'Natur och parker',
'poi.cat.activities': 'Aktiviteter',
};
export default map;
+24
View File
@@ -0,0 +1,24 @@
import type { TranslationStrings } from '../types';
const members: TranslationStrings = {
'members.shareTrip': 'Dela resan',
'members.inviteUser': 'Bjud in användare',
'members.selectUser': 'Välj användare…',
'members.invite': 'Bjud in',
'members.allHaveAccess': 'Alla användare har redan åtkomst.',
'members.access': 'Åtkomst',
'members.person': 'person',
'members.persons': 'personer',
'members.you': 'du',
'members.owner': 'Ägare',
'members.leaveTrip': 'Lämna resan',
'members.removeAccess': 'Ta bort åtkomst',
'members.confirmLeave': 'Lämna resan? Då förlorar du åtkomsten.',
'members.confirmRemove': 'Ska åtkomsten för den här användaren tas bort?',
'members.loadError': 'Det gick inte att ladda medlemmarna',
'members.added': 'tillagd',
'members.addError': 'Kunde inte lägga till',
'members.removed': 'Medlem borttagen',
'members.removeError': 'Kunde inte ta bort',
};
export default members;
+75
View File
@@ -0,0 +1,75 @@
import type { TranslationStrings } from '../types';
const memories: TranslationStrings = {
'memories.title': 'Foton',
'memories.notConnected': '{provider_name} inte ansluten',
'memories.notConnectedHint': 'Anslut din {provider_name} instans i inställningar för att kunna lägga till foton till denna resa.',
'memories.notConnectedMultipleHint':
'Anslut någon av följande fotoleverantörer: {provider_names} i Inställningar för att kunna lägga till foton till den här resan.',
'memories.noDates': 'Ange datum för din resa för att ladda foton.',
'memories.noPhotos': 'Inga foton hittades',
'memories.noPhotosHint': "Inga foton hittades i {provider_name} för tidsperioden för denna resa.",
'memories.photosFound': 'foton',
'memories.fromOthers': 'från andra',
'memories.sharePhotos': 'Dela foton',
'memories.sharing': 'Delar',
'memories.reviewTitle': 'Granska dina foton',
'memories.reviewHint': 'Klicka på fotona för att undanta dem från delningen.',
'memories.shareCount': 'Dela {count} foton',
'memories.providerUrl': 'Server URL',
'memories.providerApiKey': 'API nyckel',
'memories.providerUsername': 'Användarnamn',
'memories.providerPassword': 'Lösenord',
'memories.providerOTP': 'MFA kod (om aktiverat)',
'memories.skipSSLVerification': 'Hoppa över verifieringen av SSL-certifikatet',
'memories.immichAutoUpload': 'Synkronisera journey bilder till Immich vid uppladdning',
'memories.providerUrlHintSynology': 'Inkludera Photos appsökväg i länken, t.ex. https://nas:5001/photo',
'memories.testConnection': 'Testa anslutning',
'memories.testShort': 'Testa',
'memories.testFirst': 'Testa anslutning först',
'memories.connected': 'Ansluten',
'memories.disconnected': 'Inte ansluten',
'memories.connectionSuccess': 'Ansluten till {provider_name}',
'memories.connectionError': 'Kunde inte ansluta till {provider_name}',
'memories.saved': '{provider_name} inställningar sparade',
'memories.providerDisconnectedBanner':
'Din {provider_name} anslutningen har brutits. Återanslut i Inställningar för att kunna se fotona.',
'memories.saveError': 'Kunde inte spara {provider_name} inställningar',
'memories.addPhotos': 'Lägg till foton',
'memories.linkAlbum': 'Länka album',
'memories.selectAlbum': 'Välj {provider_name} album',
'memories.selectAlbumMultiple': 'Välj album',
'memories.noAlbums': 'Inga album hittades',
'memories.syncAlbum': 'Synkronisera album',
'memories.unlinkAlbum': 'Ta bort länken till albumet',
'memories.photos': 'foton',
'memories.selectPhotos': 'Välj foton från {provider_name}',
'memories.selectPhotosMultiple': 'Välj foton',
'memories.selectHint': 'Tryck på fotona för att markera dem.',
'memories.selected': 'valda',
'memories.addSelected': 'Lägg till {count} foton',
'memories.alreadyAdded': 'Tillagd',
'memories.private': 'Privat',
'memories.stopSharing': 'Sluta dela',
'memories.oldest': 'Äldsta först',
'memories.newest': 'Nyaste först',
'memories.allLocations': 'Alla platser',
'memories.tripDates': 'Resedatum',
'memories.allPhotos': 'Alla foton',
'memories.confirmShareTitle': 'Dela med resedeltagarna?',
'memories.confirmShareHint':
'{count} foton kommer att vara synliga för alla deltagare i resan. Du kan senare göra enskilda foton privata.',
'memories.confirmShareButton': 'Dela foton',
'memories.error.loadAlbums': 'Det gick inte att ladda albumen',
'memories.error.linkAlbum': 'Det gick inte att länka albumet',
'memories.error.unlinkAlbum': 'Det gick inte att ta bort länken till albumet',
'memories.error.syncAlbum': 'Det gick inte att synkronisera albumet',
'memories.error.loadPhotos': 'Det gick inte att ladda fotona',
'memories.error.addPhotos': 'Det gick inte att lägga till foton',
'memories.error.removePhoto': 'Det gick inte att ta bort fotot',
'memories.error.toggleSharing': 'Det gick inte att uppdatera delningen',
'memories.saveRouteNotConfigured': 'Funktionen spara rutt är inte konfigurerad för denna leverantör',
'memories.testRouteNotConfigured': 'Testrutten är inte konfigurerad för denna leverantör',
'memories.fillRequiredFields': 'Fyll i alla obligatoriska fält',
};
export default memories;
+20
View File
@@ -0,0 +1,20 @@
import type { TranslationStrings } from '../types';
const nav: TranslationStrings = {
'nav.trip': 'Resa',
'nav.share': 'Dela',
'nav.settings': 'Inställningar',
'nav.admin': 'Admin',
'nav.logout': 'Logga ut',
'nav.lightMode': 'Ljust läge',
'nav.darkMode': 'Mörkt läge',
'nav.autoMode': 'Auto läge',
'nav.administrator': 'Administratör',
'nav.myTrips': 'Mina resor',
'nav.profile': 'Profil',
'nav.bottomSettings': 'Inställningar',
'nav.bottomAdmin': 'Admin Inställningar',
'nav.bottomLogout': 'Logga ut',
'nav.bottomAdminBadge': 'Admin',
};
export default nav;
+40
View File
@@ -0,0 +1,40 @@
import type { TranslationStrings } from '../types';
const notif: TranslationStrings = {
'notif.test.title': '[Test] Meddelande',
'notif.test.simple.text': 'Detta är ett enkelt testmeddelande.',
'notif.test.boolean.text': 'Godkänner du detta testmeddelande?',
'notif.test.navigate.text': 'Klicka nedan för att gå till instrumentpanelen.',
'notif.trip_invite.title': 'Inbjudan till resa',
'notif.trip_invite.text': '{actor} bjöd in dig till {trip}',
'notif.booking_change.title': 'Bokningen har uppdaterats',
'notif.booking_change.text': '{actor} uppdaterat en bokning i {trip}',
'notif.trip_reminder.title': 'Påminnelse om resan',
'notif.trip_reminder.text': 'Din resa {trip} kommer snart!',
'notif.todo_due.title': 'Uppgift förfaller',
'notif.todo_due.text': '{todo} i {trip} förfaller den {due}',
'notif.vacay_invite.title': 'Vacay sammanslagnings inbjudan',
'notif.vacay_invite.text': '{actor} bjöd in dig till sammanslagning av semester planer',
'notif.photos_shared.title': 'Delade foton',
'notif.photos_shared.text': '{actor} delade {count} foto(n) i {trip}',
'notif.collab_message.title': 'Nytt meddelande',
'notif.collab_message.text': '{actor} skickade ett meddelande i {trip}',
'notif.packing_tagged.title': 'Packningsuppdrag',
'notif.packing_tagged.text': '{actor} har tilldelat dig {category} i {trip}',
'notif.version_available.title': 'Ny version tillgänglig',
'notif.version_available.text': 'TREK {version} finns nu tillgängligt',
'notif.action.view_trip': 'Visa resan',
'notif.action.view_collab': 'Visa meddelanden',
'notif.action.view_packing': 'Visa förpackning',
'notif.action.view_photos': 'Visa bilder',
'notif.action.view_vacay': 'Visa Vacay',
'notif.action.view_admin': 'Gå till Admin',
'notif.action.view': 'Visa',
'notif.action.accept': 'Godkänn',
'notif.action.decline': 'Neka',
'notif.generic.title': 'Meddelande',
'notif.generic.text': 'Du har fått ett nytt meddelande',
'notif.dev.unknown_event.title': '[DEV] Okänd händelse',
'notif.dev.unknown_event.text': 'Evenemang typ "{event}" är inte registrerad i EVENT_NOTIFICATION_CONFIG',
};
export default notif;
+36
View File
@@ -0,0 +1,36 @@
import type { TranslationStrings } from '../types';
const notifications: TranslationStrings = {
'notifications.title': 'Meddelanden',
'notifications.markAllRead': 'Markera alla som lästa',
'notifications.deleteAll': 'Ta bort alla',
'notifications.showAll': 'Visa alla meddelanden',
'notifications.empty': 'Inga meddelanden',
'notifications.emptyDescription': "Nu är du helt uppdaterad!",
'notifications.all': 'Alla',
'notifications.unreadOnly': 'Olästa',
'notifications.markRead': 'Markera som läst',
'notifications.markUnread': 'Markera som oläst',
'notifications.delete': 'Radera',
'notifications.system': 'System',
'notifications.synologySessionCleared.title': 'Synology Photos har kopplats bort',
'notifications.synologySessionCleared.text':
'Din server eller ditt konto har ändrats – gå till Inställningar för att testa din anslutning igen.',
'notifications.versionAvailable.title': 'Uppdatering tillgänglig',
'notifications.versionAvailable.text': 'TREK {version} finns nu tillgängligt.',
'notifications.versionAvailable.button': 'Visa detaljer',
'notifications.test.title': 'Testmeddelande från {actor}',
'notifications.test.text': 'Detta är ett enkelt testmeddelande.',
'notifications.test.booleanTitle': '{actor} ber om ditt godkännande',
'notifications.test.booleanText': 'Detta är ett testmeddelande av typen boolean. Välj en åtgärd nedan.',
'notifications.test.accept': 'Godkänn',
'notifications.test.decline': 'Neka',
'notifications.test.navigateTitle': 'Kolla in det här',
'notifications.test.navigateText': 'Detta är ett testmeddelande om navigering.',
'notifications.test.goThere': 'Gå dit',
'notifications.test.adminTitle': 'Meddelande från administratören',
'notifications.test.adminText': '{actor} skickade ett testmeddelande till alla administratörer.',
'notifications.test.tripTitle': '{actor} publicerat i din resa',
'notifications.test.tripText': 'Testmeddelande för resan "{trip}".',
};
export default notifications;
+91
View File
@@ -0,0 +1,91 @@
import type { TranslationStrings } from '../types';
const oauth: TranslationStrings = {
'oauth.scope.group.trips': 'Resor',
'oauth.scope.group.places': 'Platser',
'oauth.scope.group.atlas': 'Atlas',
'oauth.scope.group.packing': 'Packning',
'oauth.scope.group.todos': 'Att göra',
'oauth.scope.group.budget': 'Budget',
'oauth.scope.group.reservations': 'Bokningar',
'oauth.scope.group.collab': 'Samarbete',
'oauth.scope.group.notifications': 'Meddelanden',
'oauth.scope.group.vacay': 'Semester',
'oauth.scope.group.geo': 'Geo',
'oauth.scope.group.weather': 'Väder',
'oauth.scope.group.journey': 'Journey',
'oauth.scope.trips:read.label': 'Visa resor och resplaner',
'oauth.scope.trips:read.description': 'Läs om resor, dagar, daganteckningar och medlemmar',
'oauth.scope.trips:write.label': 'Redigera resor och resplaner',
'oauth.scope.trips:write.description': 'Skapa och uppdatera resor, dagar och anteckningar samt hantera medlemmar',
'oauth.scope.trips:delete.label': 'Ta bort resor',
'oauth.scope.trips:delete.description': 'Ta bort hela resor permanent – denna åtgärd går inte att ångra',
'oauth.scope.trips:share.label': 'Hantera delningslänkar',
'oauth.scope.trips:share.description': 'Skapa, uppdatera och återkalla offentliga delningslänkar för resor',
'oauth.scope.places:read.label': 'Visa platser och kartdata',
'oauth.scope.places:read.description': 'Läsa platser, dagsuppdrag, taggar och kategorier',
'oauth.scope.places:write.label': 'Hantera platser',
'oauth.scope.places:write.description': 'Skapa, uppdatera och ta bort platser, uppdrag och taggar',
'oauth.scope.atlas:read.label': 'Visa Atlas',
'oauth.scope.atlas:read.description': 'Läs om besökta länder, regioner och bucketlist',
'oauth.scope.atlas:write.label': 'Hantera Atlas',
'oauth.scope.atlas:write.description': 'Markera besökta länder och regioner, hantera bucketlist',
'oauth.scope.packing:read.label': 'Visa packlistor',
'oauth.scope.packing:read.description': 'Läs om packningsföremål, väskor och kategoritilldelningar',
'oauth.scope.packing:write.label': 'Hantera packlistor',
'oauth.scope.packing:write.description': 'Lägg till, uppdatera, ta bort, växla mellan och ordna om packningsföremål och väskor',
'oauth.scope.todos:read.label': 'Visa uppgiftslistor',
'oauth.scope.todos:read.description': 'Läs uppgifter som ska göras under resan och vilka som är ansvariga för respektive kategori',
'oauth.scope.todos:write.label': 'Hantera uppgiftslistor',
'oauth.scope.todos:write.description': 'Skapa, uppdatera, aktivera/inaktivera, ta bort och ändra ordningen på uppgifter',
'oauth.scope.budget:read.label': 'Visa budget',
'oauth.scope.budget:read.description': 'Läs om budgetposter och kostnadsfördelning',
'oauth.scope.budget:write.label': 'Hantera budgeten',
'oauth.scope.budget:write.description': 'Skapa, uppdatera och ta bort budgetposter',
'oauth.scope.reservations:read.label': 'Visa bokningar',
'oauth.scope.reservations:read.description': 'Läs information om bokningar och boende',
'oauth.scope.reservations:write.label': 'Hantera bokningar',
'oauth.scope.reservations:write.description': 'Skapa, uppdatera, ta bort och ändra ordningen på bokningar',
'oauth.scope.collab:read.label': 'Visa samarbete',
'oauth.scope.collab:read.description': 'Läs samarbetsanteckningar, omröstningar och meddelanden',
'oauth.scope.collab:write.label': 'Hantera samarbete',
'oauth.scope.collab:write.description': 'Skapa, uppdatera och ta bort samarbetsanteckningar, omröstningar och meddelanden',
'oauth.scope.notifications:read.label': 'Visa meddelanden',
'oauth.scope.notifications:read.description': 'Läsa meddelanden i appen och antalet olästa meddelanden',
'oauth.scope.notifications:write.label': 'Hantera aviseringar',
'oauth.scope.notifications:write.description': 'Markera meddelanden som lästa och svara på dem',
'oauth.scope.vacay:read.label': 'Visa semesterplaner',
'oauth.scope.vacay:read.description': 'Läs information om semesterplanering, inlägg och statistik',
'oauth.scope.vacay:write.label': 'Hantera semesterplaner',
'oauth.scope.vacay:write.description': 'Skapa och hantera semesterposter, helgdagar och teamplaner',
'oauth.scope.geo:read.label': 'Kartor och geokodning',
'oauth.scope.geo:read.description': 'Sök efter platser, omvandla kart-URL:er och utför omvänd geokodning av koordinater',
'oauth.scope.weather:read.label': 'Väderprognoser',
'oauth.scope.weather:read.description': 'Hämta väderprognoser för resmål och datum',
'oauth.scope.journey:read.label': 'Visa journeys',
'oauth.scope.journey:read.description': 'Läs journeys, inlägg och författarlistan',
'oauth.scope.journey:write.label': 'Hantera journeys',
'oauth.scope.journey:write.description': 'Skapa, uppdatera och ta bort journeys och deras poster',
'oauth.scope.journey:share.label': 'Hantera journey länkar',
'oauth.scope.journey:share.description': 'Skapa, uppdatera och återkalla offentliga delningslänkar för journeys',
'oauth.authorize.authorizing': 'Autentiserar…',
'oauth.authorize.loading': 'Laddar…',
'oauth.authorize.errorTitle': 'Auktoriseringsfel',
'oauth.authorize.loginTitle': 'Logga in för att fortsätta',
'oauth.authorize.loginDescription': '{client} vill ha åtkomst till ditt TREK konto. Logga in först.',
'oauth.authorize.loginButton': 'Logga in på TREK',
'oauth.authorize.requestLabel': 'Begäran om behörighet',
'oauth.authorize.requestDescription': 'Den här applikationen begär åtkomst till ditt TREK konto.',
'oauth.authorize.trustNote': 'Ge endast åtkomst till applikationer som du litar på. Dina data förblir på din server.',
'oauth.authorize.selectScope': 'Välj minst ett tillämpningsområde',
'oauth.authorize.approveOneScope': 'Godkänn ({count} tillämpningsområde)',
'oauth.authorize.approveManyScopes': 'Godkänn ({count} tillämpningsområden)',
'oauth.authorize.approveAccess': 'Godkänn åtkomst',
'oauth.authorize.deny': 'Neka',
'oauth.authorize.choosePermissions': 'Välj vilka behörigheter du vill bevilja',
'oauth.authorize.permissionsRequested': 'Begärda behörigheter',
'oauth.authorize.alwaysIncluded': 'Ingår alltid',
'oauth.authorize.alwaysTool.listTrips': 'Lista dina resor så att AI:n kan identifiera resenummer',
'oauth.authorize.alwaysTool.getTripSummary': 'Läs en översikt över resan som krävs för att kunna använda något annat verktyg',
};
export default oauth;
+184
View File
@@ -0,0 +1,184 @@
import type { TranslationStrings } from '../types';
const packing: TranslationStrings = {
'packing.title': 'Packlista',
'packing.empty': 'Packlistan är tom',
'packing.import': 'Importera',
'packing.importTitle': 'Importera packlista',
'packing.importHint':
'Ett föremål per rad. Format: Kategori, Namn, Vikt i g (valfritt), Påse (valfritt)',
'packing.importPlaceholder':
'Hygiene, tandborste\nKläder, T-shirts, 200\nDokument, pass, handbagage\nElektronik, laddare, 50, resväska',
'packing.importCsv': 'Ladda CSV/TXT',
'packing.importAction': 'Importera {count}',
'packing.importSuccess': '{count} föremål imported',
'packing.importError': 'Importen misslyckades',
'packing.importEmpty': 'Inga föremål att importera',
'packing.progress': '{packed} av {total} packade ({percent}%)',
'packing.clearChecked': 'Ta bort {count} markerade',
'packing.clearCheckedShort': 'Ta bort {count}',
'packing.suggestions': 'Förslag',
'packing.suggestionsTitle': 'Lägg till förslag',
'packing.allSuggested': 'All förslag tillagd',
'packing.allPacked': 'Allt packat!',
'packing.addPlaceholder': 'Lägg till nytt föremål',
'packing.categoryPlaceholder': 'Kategori...',
'packing.filterAll': 'Alla',
'packing.filterOpen': 'Öppna',
'packing.filterDone': 'Klar',
'packing.emptyTitle': 'Packlistan är tom',
'packing.emptyHint': 'Lägg till föremål eller använd förslagen',
'packing.emptyFiltered': 'Inga föremål matchar detta filter',
'packing.menuRename': 'Döp om',
'packing.menuCheckAll': 'Markera alla',
'packing.menuUncheckAll': 'Avmarkera alla',
'packing.menuDeleteCat': 'Ta bort kategori',
'packing.noMembers': 'Inga resedeltagare',
'packing.addItem': 'Lägg till föremål',
'packing.addItemPlaceholder': 'Föremålsnamn...',
'packing.addCategory': 'Lägg till kategori',
'packing.newCategoryPlaceholder': 'Kategorinamn (t.ex. kläder)',
'packing.applyTemplate': 'Använd mall',
'packing.template': 'Mall',
'packing.templateApplied': '{count} föremål tillagda från mallen',
'packing.templateError': 'Det gick inte att tillämpa mallen',
'packing.saveAsTemplate': 'Spara som mall',
'packing.templateName': 'Mallnamn',
'packing.templateSaved': 'Packlista sparad som mall',
'packing.bags': 'Väskor',
'packing.noBag': 'Ej tilldelad',
'packing.totalWeight': 'Totalvikt',
'packing.bagName': 'Väskans namn...',
'packing.addBag': 'Lägg till väska',
'packing.changeCategory': 'Ändra kategori',
'packing.confirm.clearChecked': 'Är du säker att du vill ta bort {count} markerade föremål?',
'packing.confirm.deleteCat': 'Är du säker att du vill ta bort kategori "{name}" med {count} föremål?',
'packing.defaultCategory': 'Övrigt',
'packing.toast.saveError': 'Kunde inte spara',
'packing.toast.deleteError': 'Kunde inte ta bort',
'packing.toast.renameError': 'Kunde inte döpa om',
'packing.toast.addError': 'Kunde inte lägga till',
'packing.suggestions.items': [
{
name: 'Pass',
category: 'Dokument',
},
{
name: 'ID-kort',
category: 'Dokument',
},
{
name: 'Reseförsäkring',
category: 'Dokument',
},
{
name: 'Flygbiljetter',
category: 'Dokument',
},
{
name: 'Kreditkort',
category: 'Ekonomi',
},
{
name: 'Kontanter',
category: 'Ekonomi',
},
{
name: 'Visum',
category: 'Dokument',
},
{
name: 'T-shirts',
category: 'Kläder',
},
{
name: 'Byxor',
category: 'Kläder',
},
{
name: 'Underkläder',
category: 'Kläder',
},
{
name: 'Strumpor',
category: 'Kläder',
},
{
name: 'Jacka',
category: 'Kläder',
},
{
name: 'Nattkläder',
category: 'Kläder',
},
{
name: 'Badkläder',
category: 'Kläder',
},
{
name: 'Regnjacka',
category: 'Kläder',
},
{
name: 'Bekväma skor',
category: 'Kläder',
},
{
name: 'Tandborste',
category: 'Toalettartiklar',
},
{
name: 'Tandkräm',
category: 'Toalettartiklar',
},
{
name: 'Schampo',
category: 'Toalettartiklar',
},
{
name: 'Deodorant',
category: 'Toalettartiklar',
},
{
name: 'Solskyddsmedel',
category: 'Toalettartiklar',
},
{
name: 'Rakhyvel',
category: 'Toalettartiklar',
},
{
name: 'Laddare',
category: 'Elektronik',
},
{
name: 'Powerbank',
category: 'Elektronik',
},
{
name: 'Hörlurar',
category: 'Elektronik',
},
{
name: 'Resadapter',
category: 'Elektronik',
},
{
name: 'Kamera',
category: 'Elektronik',
},
{
name: 'Smärtstillande läkemedel',
category: 'Hälsa',
},
{
name: 'Plåster',
category: 'Hälsa',
},
{
name: 'Desinfektionsmedel',
category: 'Hälsa',
},
],
};
export default packing;
+10
View File
@@ -0,0 +1,10 @@
import type { TranslationStrings } from '../types';
const pdf: TranslationStrings = {
'pdf.travelPlan': 'Resplan',
'pdf.planned': 'Planerat',
'pdf.costLabel': 'Kostnad EUR',
'pdf.preview': 'Förhandsgranskning av PDF',
'pdf.saveAsPdf': 'Spara som PDF',
};
export default pdf;
+51
View File
@@ -0,0 +1,51 @@
import type { TranslationStrings } from '../types';
const perm: TranslationStrings = {
'perm.title': 'Behörighetsinställningar',
'perm.subtitle': 'Styr vem som kan utföra åtgärder i hela applikationen',
'perm.saved': 'Behörighetsinställningarna har sparats',
'perm.resetDefaults': 'Återställ till standardinställningarna',
'perm.customized': 'skräddarsydd',
'perm.level.admin': 'Admin endast',
'perm.level.tripOwner': 'Researrangör',
'perm.level.tripMember': 'Resedeltagare',
'perm.level.everybody': 'Alla',
'perm.cat.trip': 'Resahantering',
'perm.cat.members': 'Medlemshantering',
'perm.cat.files': 'Filer',
'perm.cat.content': 'Innehåll och schema',
'perm.cat.extras': 'Budget, packning och samarbete',
'perm.action.trip_create': 'Skapa resor',
'perm.action.trip_edit': 'Redigera resedetaljer',
'perm.action.trip_delete': 'Ta bort resor',
'perm.action.trip_archive': 'Arkivera/ta bort resor från arkivet',
'perm.action.trip_cover_upload': 'Ladda upp omslagsbild',
'perm.action.member_manage': 'Lägg till/ta bort medlemmar',
'perm.action.file_upload': 'Ladda upp filer',
'perm.action.file_edit': 'Redigera filens metadata',
'perm.action.file_delete': 'Ta bort filer',
'perm.action.place_edit': 'Lägg till / redigera / ta bort platser',
'perm.action.day_edit': 'Redigera dagar, anteckningar och uppgifter',
'perm.action.reservation_edit': 'Hantera bokningar',
'perm.action.budget_edit': 'Hantera budgeten',
'perm.action.packing_edit': 'Hantera packlistor',
'perm.action.collab_edit': 'Samarbete (anteckningar, omröstningar, chatt)',
'perm.action.share_manage': 'Hantera delningslänkar',
'perm.actionHint.trip_create': 'Vem kan skapa nya resor',
'perm.actionHint.trip_edit': 'Vem kan ändra resans namn, datum, beskrivning och valuta',
'perm.actionHint.trip_delete': 'Vem kan radera en resa permanent',
'perm.actionHint.trip_archive': 'Vem kan lägga till en resa i arkivet eller ta bort den därifrån',
'perm.actionHint.trip_cover_upload': 'Vem kan ladda upp eller ändra omslagsbilden',
'perm.actionHint.member_manage': 'Vem kan bjuda in eller ta bort deltagare i resan',
'perm.actionHint.file_upload': 'Vem kan ladda upp filer till en resa',
'perm.actionHint.file_edit': 'Vem kan redigera filbeskrivningar och länkar',
'perm.actionHint.file_delete': 'Vem kan flytta filer till papperskorgen eller radera dem permanent',
'perm.actionHint.place_edit': 'Vem kan lägga till, redigera eller ta bort platser',
'perm.actionHint.day_edit': 'Vem kan redigera dagar, daganteckningar och platsuppdrag',
'perm.actionHint.reservation_edit': 'Vem kan skapa, redigera eller ta bort bokningar',
'perm.actionHint.budget_edit': 'Vem kan skapa, redigera eller ta bort budgetposter',
'perm.actionHint.packing_edit': 'Vem kan sköta packningen av föremål och väskor',
'perm.actionHint.collab_edit': 'Vem kan skapa anteckningar, omröstningar och skicka meddelanden',
'perm.actionHint.share_manage': 'Vem kan skapa eller ta bort länkar till offentliga delningar',
};
export default perm;
+25
View File
@@ -0,0 +1,25 @@
import type { TranslationStrings } from '../types';
const photos: TranslationStrings = {
'photos.title': 'Foton',
'photos.subtitle': '{count} foton för {trip}',
'photos.dropHere': 'Släpp foton här...',
'photos.dropHereActive': 'Släpp foton här',
'photos.captionForAll': 'Fototext (för alla)',
'photos.captionPlaceholder': 'Valfri fototext...',
'photos.addCaption': 'Lägg till fototext...',
'photos.allDays': 'Alla dagar',
'photos.noPhotos': 'Inga foton ännu',
'photos.uploadHint': 'Ladda upp dina resefoton',
'photos.clickToSelect': 'eller klicka för att välja',
'photos.linkPlace': 'Länkplats',
'photos.noPlace': 'Ingen plats',
'photos.uploadN': '{n} foto(n) uppladdad',
'photos.linkDay': 'Länka dag',
'photos.noDay': 'Ingen dag',
'photos.dayLabel': 'Dag {number}',
'photos.photoSelected': 'Foton markerade',
'photos.photosSelected': 'Foton markerade',
'photos.fileTypeHint': 'JPG, PNG, WebP · max. 10 MB · upp till 30 foton',
};
export default photos;
+90
View File
@@ -0,0 +1,90 @@
import type { TranslationStrings } from '../types';
const places: TranslationStrings = {
'places.addPlace': 'Lägg till plats/aktivitet',
'places.importFile': 'Importera fil',
'places.sidebarDrop': 'Släpp för att importera',
'places.importFileHint':
'Importera .gpx-, .kml- eller .kmz-filer från verktyg som Google My Maps, Google Earth eller en GPS-spårare.',
'places.importFileDropHere': 'Klicka för att välja en fil eller dra och släpp här',
'places.importFileDropActive': 'Släpp filen för att välja den',
'places.importFileUnsupported': 'Filtypen stöds inte. Använd .gpx, .kml eller .kmz.',
'places.importFileTooLarge': 'Filen är för stor. Den maximala storleken för uppladdning är {maxMb} MB.',
'places.importFileError': 'Importen misslyckades',
'places.importAllSkipped': 'Alla platser ingick redan i resan.',
'places.gpxImported': '{count} platser som importerats från GPX',
'places.gpxImportTypes': 'Vad vill du importera?',
'places.gpxImportWaypoints': 'Vägpunkter',
'places.gpxImportRoutes': 'Rutter',
'places.gpxImportTracks': 'Spår (med spårgeometri)',
'places.gpxImportNoneSelected': 'Välj minst en typ att importera.',
'places.kmlImportTypes': 'Vad vill du importera?',
'places.kmlImportPoints': 'Punkter (platsmarkeringar)',
'places.kmlImportPaths': 'Stigar (LineStrings)',
'places.kmlImportNoneSelected': 'Välj minst en typ att importera.',
'places.selectionCount': '{count} markerade',
'places.deleteSelected': 'Ta bort det markerade',
'places.kmlKmzImported': '{count} platser som importerats från KMZ/KML',
'places.urlResolved': 'Plats importerad från URL',
'places.importList': 'Importera lista',
'places.kmlKmzSummaryValues': 'Platsmarkeringar: {total} • Importerat: {created} • Hoppat över: {skipped}',
'places.importGoogleList': 'Google-lista',
'places.importNaverList': 'Naver-lista',
'places.googleListHint': 'Klistra in en länk till en delad lista i Google Maps för att importera alla platser.',
'places.googleListImported': '{count} platser som importerats från "{list}"',
'places.googleListError': 'Det gick inte att importera listan från Google Maps',
'places.naverListHint': 'Klistra in en länk till en delad lista på Naver Maps för att importera alla platser.',
'places.naverListImported': '{count} platser som importerats från "{list}"',
'places.naverListError': 'Det gick inte att importera listan från Naver Maps',
'places.viewDetails': 'Visa detaljer',
'places.assignToDay': 'Lägg till vilken dag?',
'places.all': 'Alla',
'places.unplanned': 'Oplanerat',
'places.filterTracks': 'Spår',
'places.search': 'Sök efter platser...',
'places.allCategories': 'Alla kategorier',
'places.categoriesSelected': 'kategorier',
'places.clearFilter': 'Rensa filter',
'places.count': '{count} platser',
'places.countSingular': '1 plats',
'places.allPlanned': 'Alla platser är planerade',
'places.noneFound': 'Inga platser hittades',
'places.editPlace': 'Redigera plats',
'places.formName': 'Namn',
'places.formNamePlaceholder': 't.ex. Eiffeltornet',
'places.formDescription': 'Beskrivning',
'places.formDescriptionPlaceholder': 'Kort beskrivning...',
'places.formAddress': 'Adress',
'places.formAddressPlaceholder': 'Gata, stad, land',
'places.formLat': 'Latitud (t.ex. 48.8566)',
'places.formLng': 'Longitud (t.ex. 2.3522)',
'places.formCategory': 'Kategori',
'places.noCategory': 'Ingen kategori',
'places.categoryNamePlaceholder': 'Kategorinamn',
'places.formTime': 'Tid',
'places.startTime': 'Börjar',
'places.endTime': 'Slutar',
'places.endTimeBeforeStart': 'Sluttiden infaller före starttiden',
'places.timeCollision': 'Tidsöverlappning med:',
'places.formWebsite': 'Hemsida',
'places.formNotes': 'Noteringar',
'places.formNotesPlaceholder': 'Personliga anteckningar...',
'places.formReservation': 'Bokning',
'places.reservationNotesPlaceholder': 'Bokningsinformation, bekräftelsenummer...',
'places.mapsSearchPlaceholder': 'Sök efter platser...',
'places.mapsSearchError': 'Sökningen efter plats misslyckades.',
'places.loadingDetails': 'Hämtar information om platsen…',
'places.osmHint':
'Använder OpenStreetMap-sökningen (inga bilder, öppettider eller betyg). Lägg till en Google API-nyckel i inställningarna för fullständig information.',
'places.osmActive':
'Sök via OpenStreetMap (inga bilder, betyg eller öppettider). Lägg till en Google API-nyckel under Inställningar för utökad information.',
'places.categoryCreateError': 'Det gick inte att skapa kategorin',
'places.nameRequired': 'Ange ett namn',
'places.saveError': 'Det gick inte att spara',
'places.duplicateExists': "'{name}' ingår redan i resan.",
'places.addAnyway': 'Lägg till ändå',
'places.enrichOnImport': 'Berika platser via Google',
'places.enrichOnImportHint':
'Sök upp varje importerad plats för att fylla i bilder, adress och kontaktuppgifter. Använder din Google Maps-nyckel.',
};
export default places;
+66
View File
@@ -0,0 +1,66 @@
import type { TranslationStrings } from '../types';
const planner: TranslationStrings = {
'planner.places': 'Platser',
'planner.bookings': 'Bokningar',
'planner.packingList': 'Packlista',
'planner.documents': 'Dokument',
'planner.dayPlan': 'Dagsplan',
'planner.reservations': 'Bokningar',
'planner.minTwoPlaces': 'Minst 2 platser med koordinater krävs',
'planner.noGeoPlaces': 'Inga platser med tillgängliga koordinater',
'planner.routeCalculated': 'Rutt beräknad',
'planner.routeCalcFailed': 'Rutt kunde inte beräknas',
'planner.routeError': 'Fel vid beräkning av rutten',
'planner.icsExportFailed': 'ICS-exporten misslyckades',
'planner.routeOptimized': 'Ruttoptimerad',
'planner.reservationUpdated': 'Bokningen har uppdaterats',
'planner.reservationAdded': 'Bokning tillagd',
'planner.confirmDeleteReservation': 'Ta bort bokningen?',
'planner.reservationDeleted': 'Bokningen har raderats',
'planner.days': 'Dagar',
'planner.allPlaces': 'Alla platser',
'planner.totalPlaces': '{n} platser totalt',
'planner.noDaysPlanned': 'Inga dagar har planerats ännu',
'planner.editTrip': 'Redigera resa →',
'planner.placeOne': '1 plats',
'planner.placeN': '{n} platser',
'planner.addNote': 'Lägg till notering',
'planner.noEntries': 'Inga inlägg för denna dag',
'planner.addPlace': 'Lägg till plats/aktivitet',
'planner.addPlaceShort': '+ Lägg till plats/aktivitet',
'planner.resPending': 'Bokningen väntar på bekräftelse · ',
'planner.resConfirmed': 'Bokningen bekräftad · ',
'planner.notePlaceholder': 'Notering...',
'planner.noteTimePlaceholder': 'Tid (valfritt)',
'planner.noteExamplePlaceholder': 't.ex. S3 kl. 14.30 från centralstationen, färja från kaj 7, lunchpaus…',
'planner.totalCost': 'Total kostnad',
'planner.searchPlaces': 'Sök efter platser…',
'planner.allCategories': 'Alla kategorier',
'planner.noPlacesFound': 'Inga platser hittades',
'planner.addFirstPlace': 'Lägg till första platsen',
'planner.noReservations': 'Inga bokningar',
'planner.addFirstReservation': 'Lägg till första bokningen',
'planner.new': 'Ny',
'planner.addToDay': '+ Dag',
'planner.calculating': 'Beräknar…',
'planner.route': 'Rutt',
'planner.optimize': 'Optimera',
'planner.openGoogleMaps': 'Öppna i Google Maps',
'planner.selectDayHint': 'Välj en dag i listan till vänster för att se dagsplanen',
'planner.noPlacesForDay': 'Det finns inga platser för denna dagen ännu',
'planner.addPlacesLink': 'Lägg till platser →',
'planner.minTotal': 'min. totalt',
'planner.noReservation': 'Ingen bokning',
'planner.removeFromDay': 'Ta bort från dagen',
'planner.addToThisDay': 'Lägg till i denna dag',
'planner.overview': 'Översikt',
'planner.noDays': 'Inga dagar ännu',
'planner.editTripToAddDays': 'Redigera resan för att lägga till dagar',
'planner.dayCount': '{n} Dagar',
'planner.clickToUnlock': 'Klicka för att låsa upp',
'planner.keepPosition': 'Behåll positionen under ruttoptimeringen',
'planner.dayDetails': 'Information om dagen',
'planner.dayN': 'Dag {n}',
};
export default planner;
+25
View File
@@ -0,0 +1,25 @@
import type { TranslationStrings } from '../types';
const register: TranslationStrings = {
'register.passwordMismatch': 'Lösenorden stämmer inte överens',
'register.passwordTooShort': 'Lösenordet måste bestå av minst 8 tecken',
'register.failed': 'Registreringen misslyckades',
'register.getStarted': 'Kom igång',
'register.subtitle': 'Skapa ett konto och börja planera dina drömresor.',
'register.feature1': 'Resplaner utan begränsningar',
'register.feature2': 'Interaktiv kartvy',
'register.feature3': 'Hantera platser och kategorier',
'register.feature4': 'Spåra bokningar',
'register.feature5': 'Skapa packlistor',
'register.feature6': 'Spara foton och filer',
'register.createAccount': 'Skapa konto',
'register.startPlanning': 'Börja planera din resa',
'register.minChars': 'Minst 6 tecken',
'register.confirmPassword': 'Bekräfta lösenord',
'register.repeatPassword': 'Upprepa lösenordet',
'register.registering': 'Registrerar...',
'register.register': 'Registrera',
'register.hasAccount': 'Har du redan ett konto?',
'register.signIn': 'Logga in',
};
export default register;
+162
View File
@@ -0,0 +1,162 @@
import type { TranslationStrings } from '../types';
const reservations: TranslationStrings = {
'reservations.title': 'Bokningar',
'reservations.empty': 'Inga bokningar än',
'reservations.emptyHint': 'Lägg till bokningar av flyg, hotell och annat',
'reservations.add': 'Lägg till bokning',
'reservations.addManual': 'Manuell bokning',
'reservations.placeHint': 'Tips: Det är bäst att göra bokningar direkt från en plats för att koppla dem till din dagsplan.',
'reservations.confirmed': 'Bekräftat',
'reservations.pending': 'Väntar på beslut',
'reservations.summary': '{confirmed} bekräftat, {pending} väntar på beslut',
'reservations.fromPlan': 'Från plan',
'reservations.showFiles': 'Visa filer',
'reservations.editTitle': 'Redigera reservation',
'reservations.status': 'Status',
'reservations.datetime': 'Datum & Tid',
'reservations.startTime': 'Starttid',
'reservations.endTime': 'Sluttid',
'reservations.date': 'Datum',
'reservations.time': 'Tid',
'reservations.timeAlt': 'Tid (alternativ, t.ex. 19:30)',
'reservations.notes': 'Noteringar',
'reservations.notesPlaceholder': 'Ytterligare noteringar...',
'reservations.meta.airline': 'Flygbolag',
'reservations.meta.flightNumber': 'Flygnummer',
'reservations.meta.from': 'Från',
'reservations.meta.to': 'Till',
'reservations.layover.route': 'Rutt',
'reservations.layover.stop': 'Stopp',
'reservations.layover.addStop': 'Lägg till stopp',
'reservations.layover.connection': 'Anslutning',
'reservations.layover.layover': 'Mellanlandning',
'reservations.needsReview': 'Granska',
'reservations.needsReviewHint': 'Flygplatsen kunde inte matchas automatiskt – bekräfta platsen.',
'reservations.searchLocation': 'Sök efter station, hamn, adress…',
'reservations.meta.trainNumber': 'Tågnummer',
'reservations.meta.platform': 'Plattform',
'reservations.meta.seat': 'Säte',
'reservations.meta.checkIn': 'Incheckning',
'reservations.meta.checkInUntil': 'Incheckning fram till',
'reservations.meta.checkOut': 'Utcheckning',
'reservations.meta.linkAccommodation': 'Boende',
'reservations.meta.pickAccommodation': 'Länk till boende',
'reservations.meta.noAccommodation': 'Inget',
'reservations.meta.hotelPlace': 'Boende',
'reservations.meta.pickHotel': 'Välj boende',
'reservations.meta.fromDay': 'Från',
'reservations.meta.toDay': 'Till',
'reservations.meta.selectDay': 'Välj dag',
'reservations.type.flight': 'Flygning',
'reservations.type.hotel': 'Boende',
'reservations.type.restaurant': 'Restaurang',
'reservations.type.train': 'Tåg',
'reservations.type.car': 'Bil',
'reservations.type.cruise': 'Kryssning',
'reservations.type.event': 'Evenemang',
'reservations.type.tour': 'Rundtur',
'reservations.type.other': 'Övrigt',
'reservations.type.bus': 'Buss',
'reservations.type.ferry': 'Färja',
'reservations.type.bicycle': 'Cyckel',
'reservations.type.taxi': 'Taxi',
'reservations.type.transport_other': 'Annat',
'reservations.confirm.delete': 'Är du säker på att du vill ta bort bokningen "{name}"?',
'reservations.confirm.deleteTitle': 'Ta bort bokningen?',
'reservations.confirm.deleteBody': '"{name}" kommer att raderas permanent.',
'reservations.toast.updated': 'Bokning uppdaterad',
'reservations.toast.removed': 'Bokning borttagen',
'reservations.toast.fileUploaded': 'Fil uppladdad',
'reservations.toast.uploadError': 'Det gick inte att ladda upp',
'reservations.newTitle': 'Ny bokning',
'reservations.bookingType': 'Bokningstyp',
'reservations.titleLabel': 'Titel',
'reservations.titlePlaceholder': 't.ex. Lufthansa LH123, Hotel Adlon, ...',
'reservations.locationAddress': 'Plats / Adress',
'reservations.locationPlaceholder': 'Adress, flygplats, hotell...',
'reservations.confirmationCode': 'Bokningskod',
'reservations.confirmationPlaceholder': 't.ex. ABC12345',
'reservations.day': 'Dag',
'reservations.noDay': 'Ingen dag',
'reservations.place': 'Plats',
'reservations.noPlace': 'Ingen Plats',
'reservations.pendingSave': 'kommer att sparas...',
'reservations.uploading': 'Laddar upp...',
'reservations.attachFile': 'Bifoga fil',
'reservations.linkExisting': 'Länka till befintlig fil',
'reservations.toast.saveError': 'Det gick inte att spara',
'reservations.toast.updateError': 'Uppdateringen misslyckades',
'reservations.toast.deleteError': 'Det gick inte att ta bort',
'reservations.confirm.remove': 'Ta bort bokningen för "{name}"?',
'reservations.linkAssignment': 'Länk till dagsuppgift',
'reservations.pickAssignment': 'Välj en uppgift från din plan...',
'reservations.noAssignment': 'Ingen länk (fristående)',
'reservations.price': 'Pris',
'reservations.budgetCategory': 'Budgetkategori',
'reservations.budgetCategoryPlaceholder': 't.ex. transport, boende',
'reservations.budgetCategoryAuto': 'Auto (från bokningstyp)',
'reservations.budgetHint': 'En budgetpost skapas automatiskt när du sparar.',
'reservations.departureDate': 'Avgång',
'reservations.arrivalDate': 'Ankomst',
'reservations.departureTime': 'Avgångstid',
'reservations.arrivalTime': 'Ankomsttid',
'reservations.pickupDate': 'Upphämtning',
'reservations.returnDate': 'Återlämning',
'reservations.pickupTime': 'Upphämtningstid',
'reservations.returnTime': 'Återlämningstid',
'reservations.endDate': 'Slutdatum',
'reservations.meta.departureTimezone': 'Avgång Tidzon',
'reservations.meta.arrivalTimezone': 'Ankomst Tidzon',
'reservations.span.departure': 'Avgång',
'reservations.span.arrival': 'Ankomst',
'reservations.span.inTransit': 'Under transport',
'reservations.span.pickup': 'Upphämtning',
'reservations.span.return': 'Återlämning',
'reservations.span.active': 'Aktiv',
'reservations.span.start': 'Start',
'reservations.span.end': 'Slut',
'reservations.span.ongoing': 'Pågår',
'reservations.validation.endBeforeStart': 'Slutdatum och -tid måste ligga efter startdatum och -tid',
'reservations.addBooking': 'Lägg till bokning',
'reservations.import.title': 'Importera bokningsbekräftelser',
'reservations.import.cta': 'Importera från fil',
'reservations.import.dropHere': 'Dra och släpp bokningsbekräftelser här, eller klicka för att välja',
'reservations.import.dropActive': 'Dra och släpp filerna som ska importeras',
'reservations.import.acceptedFormats': 'Godkända filformat: EML, PDF, PKPass, HTML, TXT (högst 10 MB per fil, upp till 5 filer)',
'reservations.import.parsing': 'Analyserar filer…',
'reservations.import.previewHeading': '{count} reservation(er) hittades',
'reservations.import.previewEmpty': 'Inga bokningar kunde extraheras från de uppladdade filerna.',
'reservations.import.removeItem': 'Ta bort',
'reservations.import.confirm': 'Importera {count} reservation(er)',
'reservations.import.back': 'Tillbaka',
'reservations.import.success': '{count} reservation(er) importerades',
'reservations.import.partialFailure': '{created} importerades, {failed} misslyckades',
'reservations.import.error': 'Analysen misslyckades. Kontrollera att filen är en giltig bokningsbekräftelse.',
'reservations.import.unavailable': 'Import av bokningar är inte tillgängligt på den här servern.',
'reservations.import.unsupportedFormat': 'Filformatet stöds inte. Använd EML, PDF, PKPass, HTML eller TXT.',
'reservations.import.fileTooLarge': 'Filen "{name}" överskrider gränsen på 10 MB.',
'reservations.airtrail.title': 'Importera från AirTrail',
'reservations.airtrail.cta': 'AirTrail',
'reservations.airtrail.synced': 'AirTrail',
'reservations.airtrail.syncedHint': 'Synkroniserat från AirTrail – ändringarna synkroniseras åt båda hållen.',
'reservations.airtrail.notSynced': 'Ej synkroniserad',
'reservations.airtrail.notSyncedHint': 'Denna flygning har tagits bort i AirTrail och synkroniseras inte längre.',
'reservations.airtrail.loadError': 'Det gick inte att hämta dina AirTrail-flygningar.',
'reservations.airtrail.imported': '{count} flygning(ar) importerades',
'reservations.airtrail.skippedDuplicate': '{count} redan under den här resan, hoppade över',
'reservations.airtrail.nothingImported': 'Inget att importera.',
'reservations.airtrail.importError': 'Importen misslyckades. Försök igen.',
'reservations.airtrail.undo': 'Importera från AirTrail',
'reservations.airtrail.alreadyImported': 'Importerad',
'reservations.airtrail.duringTrip': 'Under denna resa',
'reservations.airtrail.otherFlights': 'Övriga flygningar',
'reservations.airtrail.empty': 'Inga flygningar hittades i ditt AirTrail-konto.',
'reservations.airtrail.importCta': 'Importera {count}',
'reservations.costsLabel': 'Kostnader',
'reservations.createExpense': 'Skapa utgift',
'reservations.createExpenseHint': 'Sparar bokningen och öppnar sedan kostnadsredigeraren.',
'reservations.linkedExpense': 'Relaterade kostnader',
'reservations.removeExpense': 'Ta bort utgiften',
};
export default reservations;
+323
View File
@@ -0,0 +1,323 @@
import type { TranslationStrings } from '../types';
const settings: TranslationStrings = {
'settings.title': 'Inställningar',
'settings.subtitle': 'Konfigurera dina personliga inställningar',
'settings.tabs.display': 'Visning',
'settings.tabs.map': 'Karta',
'settings.tabs.notifications': 'Meddelanden',
'settings.tabs.integrations': 'Integrationer',
'settings.tabs.account': 'Konto',
'settings.tabs.offline': 'Offline',
'settings.tabs.about': 'Om',
'settings.map': 'Karta',
'settings.mapTemplate': 'Kartmall',
'settings.mapTemplatePlaceholder.select': 'Välj mall...',
'settings.mapDefaultHint': 'Lämna fältet tomt för OpenStreetMap (standard)',
'settings.mapTemplatePlaceholder': 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
'settings.mapHint': 'URL-mall för kartrutor',
'settings.mapProvider': 'Kartleverantör',
'settings.mapProviderHint': 'Påverkar resplaneraren och resedagbokens kartor. Atlas använder alltid Leaflet.',
'settings.mapLeafletSubtitle': 'Klassisk 2D, valfria rasterplattor',
'settings.mapMapboxSubtitle': 'Vektorplattor, 3D-byggnader och terräng',
'settings.mapExperimental': 'Experimentell',
'settings.mapMapboxToken': 'Mapbox-åtkomsttoken',
'settings.mapMapboxTokenHint': 'Offentlig token (pk.*) från',
'settings.mapMapboxTokenLink': 'mapbox.com → Åtkomsttoken',
'settings.mapStyle': 'Kartstil',
'settings.mapStylePlaceholder': 'Välj en Mapbox-stil',
'settings.mapStyleHint': 'Förinställda eller egna mapbox://styles/USER/ID länk',
'settings.map3dBuildings': '3D-byggnader och terräng',
'settings.map3dHint': 'Vinkel + verklighetstrogna 3D-byggnadsextrusioner — fungerar för alla stilar, inklusive satellitstil.',
'settings.mapHighQuality': 'Högkvalitetsläge',
'settings.mapHighQualityHint': 'Antialiasing + globprojektion för skarpare kanter och en realistisk världsbild.',
'settings.mapHighQualityWarning': 'Kan påverka prestandan på enheter i lägre enheter.',
'settings.mapTipLabel': 'Tips:',
'settings.mapTip':
'högerklicka och dra för att rotera eller luta kartan. Mittklicka för att lägga till en plats (högerklick är reserverat för rotation).',
'settings.latitude': 'Latitud',
'settings.longitude': 'Longitud',
'settings.saveMap': 'Spara karta',
'settings.apiKeys': 'API nycklar',
'settings.mapsKey': 'Google Maps API nyckel',
'settings.mapsKeyHint': 'För platssökning. Kräver Places API (nytt). Hämta på console.cloud.google.com',
'settings.weatherKey': 'OpenWeatherMap API nyckel',
'settings.weatherKeyHint': 'För väderdata. Gratis på openweathermap.org/api',
'settings.keyPlaceholder': 'Ange nyckel...',
'settings.configured': 'Inställd',
'settings.saveKeys': 'Spara nycklar',
'settings.display': 'Visning',
'settings.colorMode': 'Färgläge',
'settings.light': 'Ljust',
'settings.dark': 'Mörkt',
'settings.auto': 'Auto',
'settings.language': 'Språk',
'settings.temperature': 'Temperaturenhet',
'settings.timeFormat': 'Tidsformat',
'settings.bookingLabels': 'Etiketter för bokningsrutter',
'settings.bookingLabelsHint': 'Visa stations- och flygplatsnamn på kartan. När funktionen är avstängd visas endast ikonen.',
'settings.mapPoiPill': 'Utforska platser på kartan',
'settings.mapPoiPillHint':
'Visa en kategoriknapp på resekartan för att hitta restauranger, hotell och annat i närheten från OpenStreetMap.',
'settings.blurBookingCodes': 'Blurra bokningskoder',
'settings.optimizeFromAccommodation': 'Optimera rutten från boendet',
'settings.optimizeFromAccommodationHint':
'När du planerar en dag på bästa sätt bör du börja rutten vid det hotell där du vaknar och avsluta den vid det hotell där du checkar in samma kväll.',
'settings.notifications': 'Meddelanden',
'settings.notifyTripInvite': 'Inbjudningar till resor',
'settings.notifyBookingChange': 'Ändringar i bokningen',
'settings.notifyTripReminder': 'Påminnelser inför resan',
'settings.notifyTodoDue': 'Att göra ska göras snart',
'settings.notifyVacayInvite': 'Vacay samanslagnings inbjudningar',
'settings.notifyPhotosShared': 'Delade foton (Immich)',
'settings.notifyCollabMessage': 'Chatt meddelande (Samarbete)',
'settings.notifyPackingTagged': 'Packningslista: uppgifter',
'settings.notifyWebhook': 'Webhook meddelanden',
'settings.notifyVersionAvailable': 'Ny version tillgänglig',
'settings.notificationPreferences.email': 'E-post',
'settings.notificationPreferences.webhook': 'Webhook',
'settings.notificationPreferences.inapp': 'I appen',
'settings.notificationPreferences.ntfy': 'Ntfy',
'settings.notificationPreferences.noChannels':
'Inga meddelandekanaler har konfigurerats. Be en administratör att ställa in e-post- eller webhook-meddelanden.',
'settings.webhookUrl.label': 'Webhook URL',
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
'settings.webhookUrl.hint': 'Ange din Discord-, Slack- eller anpassade webhook-URL för att få aviseringar.',
'settings.webhookUrl.saved': 'Webhook URL sparad',
'settings.webhookUrl.test': 'Test',
'settings.webhookUrl.testSuccess': 'Test av webhook skickades utan problem',
'settings.webhookUrl.testFailed': 'Test av webhook misslyckades',
'settings.ntfyUrl.topicLabel': 'Ntfy Ämne',
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
'settings.ntfyUrl.serverLabel': 'Ntfy Server URL (valfritt)',
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
'settings.ntfyUrl.hint':
'Ange ditt ntfy-ämne för att få push-meddelanden. Lämna fältet ”server” tomt om du vill använda standardinställningen som din administratör har konfigurerat.',
'settings.ntfyUrl.tokenLabel': 'Åtkomsttoken (valfritt)',
'settings.ntfyUrl.tokenHint': 'Krävs för lösenordsskyddade ämnen.',
'settings.ntfyUrl.saved': 'Ntfy inställningar sparade',
'settings.ntfyUrl.test': 'Test',
'settings.ntfyUrl.testSuccess': 'Test av ntfy meddelande skickades utan problem',
'settings.ntfyUrl.testFailed': 'Test av ntfy meddelande misslyckades',
'settings.ntfyUrl.tokenCleared': 'Åtkomsttoken har raderats',
'settings.notificationsDisabled':
'Meddelanden är inte konfigurerade. Be en administratör att aktivera e-post- eller webhook-meddelanden.',
'settings.notificationsActive': 'Aktiv kanal',
'settings.notificationsManagedByAdmin': 'Meddelandehändelser konfigureras av din administratör.',
'settings.on': 'På',
'settings.off': 'Av',
'settings.mcp.title': 'MCP-konfiguration',
'settings.mcp.endpoint': 'MCP-ändpunkt',
'settings.mcp.clientConfig': 'Klientkonfiguration',
'settings.mcp.clientConfigHint':
'Ersätt <your_token> med ett API-token från listan nedan. Sökvägen till npx kan behöva anpassas efter ditt system (t.ex. C:\\PROGRA~1\\nodejs\\npx.cmd i Windows).',
'settings.mcp.clientConfigHintOAuth':
'Ersätt <your_client_id> och <your_client_secret> med de autentiseringsuppgifter som visas i den OAuth 2.1-klient du skapade ovan. mcp-remote öppnar din webbläsare för att slutföra auktoriseringen första gången du ansluter. Sökvägen till npx kan behöva anpassas efter ditt system (t.ex. C:PROGRA~1\nodejs\npx.cmd i Windows).',
'settings.mcp.copy': 'Kopiera',
'settings.mcp.copied': 'Kopierad!',
'settings.mcp.apiTokens': 'API Tokens',
'settings.mcp.createToken': 'Skapa ny token',
'settings.mcp.noTokens': 'Inga tokens ännu. Skapa en för att ansluta MCP-klienter.',
'settings.mcp.tokenCreatedAt': 'Skapad',
'settings.mcp.tokenUsedAt': 'Använt',
'settings.mcp.deleteTokenTitle': 'Ta bort token',
'settings.mcp.deleteTokenMessage':
'Denna token kommer att sluta fungera omedelbart. Alla MCP-klienter som använder den kommer att förlora åtkomsten.',
'settings.mcp.modal.createTitle': 'Skapa API-token',
'settings.mcp.modal.tokenName': 'Token namn',
'settings.mcp.modal.tokenNamePlaceholder': 't.ex. Claude Desktop, Arbetsdator',
'settings.mcp.modal.creating': 'Skapar...',
'settings.mcp.modal.create': 'Skapa token',
'settings.mcp.modal.createdTitle': 'Token skapad',
'settings.mcp.modal.createdWarning':
'Denna token visas endast en gång. Kopiera och spara den nu – den går inte att återställa.',
'settings.mcp.modal.done': 'Klar',
'settings.mcp.toast.created': 'Token skapad',
'settings.mcp.toast.createError': 'Misslyckades att skapa token',
'settings.mcp.toast.deleted': 'Token raderad',
'settings.mcp.toast.deleteError': 'Misslyckades att radera token',
'settings.mcp.apiTokensDeprecated':
'API Tokens är föråldrade och kommer att tas bort i en framtida version. Använd istället OAuth 2.1-klienter.',
'settings.oauth.clients': 'OAuth 2.1 Klienter',
'settings.oauth.clientsHint':
'Registrera OAuth 2.1-klienter så att MCP-applikationer från tredje part (Claude Web, Cursor m.fl.) kan ansluta utan statiska token.',
'settings.oauth.createClient': 'Ny klient',
'settings.oauth.noClients': 'Inga OAuth klienter registrerade.',
'settings.oauth.clientId': 'Klient ID',
'settings.oauth.clientSecret': 'Klient hemlighet',
'settings.oauth.deleteClient': 'Radera klient',
'settings.oauth.deleteClientMessage':
'Denna klient och alla aktiva sessioner kommer att tas bort permanent. Alla program som använder den kommer omedelbart att förlora åtkomsten.',
'settings.oauth.rotateSecret': 'Rotera hemlighet',
'settings.oauth.rotateSecretMessage':
'En ny klientnyckel kommer att genereras och alla befintliga sessioner kommer omedelbart att ogiltigförklaras. Uppdatera din applikation innan du stänger den här dialogrutan.',
'settings.oauth.rotateSecretConfirm': 'Rotera',
'settings.oauth.rotateSecretConfirming': 'Roterar...',
'settings.oauth.rotateSecretDoneTitle': 'Ny hemlighet genererad',
'settings.oauth.rotateSecretDoneWarning':
'Denna hemlighet visas endast en gång. Kopiera den nu och uppdatera din applikation – alla tidigare sessioner har ogiltigförklarats.',
'settings.oauth.activeSessions': 'Aktiva OAuth-sessioner',
'settings.oauth.sessionScopes': 'Tillämpningsområden',
'settings.oauth.sessionExpires': 'Utgår',
'settings.oauth.revoke': 'Återkalla',
'settings.oauth.revokeSession': 'Återkalla session',
'settings.oauth.revokeSessionMessage': 'Detta kommer omedelbart att återkalla åtkomsten för denna OAuth-session.',
'settings.oauth.modal.createTitle': 'Registrera OAuth-klient',
'settings.oauth.modal.presets': 'Snabba förinställningar',
'settings.oauth.modal.clientName': 'Programnamn',
'settings.oauth.modal.clientNamePlaceholder': 't.ex. Claude Web, Min MCP App',
'settings.oauth.modal.redirectUris': 'Omdirigerings-URI:er',
'settings.oauth.modal.redirectUrisPlaceholder': 'https://din-app.com/callback\nhttps://din-app.com/auth',
'settings.oauth.modal.redirectUrisHint': 'En URI per rad. HTTPS krävs (med undantag för localhost). Exakt matchning krävs.',
'settings.oauth.modal.scopes': 'Tillåtna tillämpningsområden',
'settings.oauth.modal.scopesHint':
'list_trips och get_trip_summary är alltid tillgängliga – inget tillämpningsområden krävs. De gör det möjligt för AI:n att hämta de res-ID:n som behövs för att använda andra verktyg.',
'settings.oauth.modal.selectAll': 'Välj alla',
'settings.oauth.modal.deselectAll': 'Avmarkera alla',
'settings.oauth.modal.creating': 'Registrerar...',
'settings.oauth.modal.create': 'Registrerar klient',
'settings.oauth.modal.createdTitle': 'Klient registrerad',
'settings.oauth.modal.createdWarning': 'Klienthemligheten visas endast en gång. Kopiera den nu – den går inte att återställa.',
'settings.oauth.toast.createError': 'Det gick inte att registrera OAuth-klienten',
'settings.oauth.toast.deleted': 'OAuth-klienten har tagits bort',
'settings.oauth.toast.deleteError': 'Det gick inte att ta bort OAuth-klienten',
'settings.oauth.toast.revoked': 'Sessionen har återkallats',
'settings.oauth.toast.revokeError': 'Det gick inte att återkalla sessionen',
'settings.oauth.toast.rotateError': 'Det gick inte att rotera klienthemligheten',
'settings.oauth.modal.machineClient': 'Maskinklient (ingen inloggning via webbläsare)',
'settings.oauth.modal.machineClientHint':
'Använd behörighetsmodellen client_credentials — inga omdirigerings-URI:er behövs. Tokenet utfärdas direkt via client_id + client_secret och agerar som dig inom de valda tillämpningsområdena.',
'settings.oauth.modal.machineClientUsage':
'Få en token: POST /oauth/token med grant_type=client_credentials, client_id, och client_secret. Ingen webbläsare, inget uppdateringstoken.',
'settings.oauth.badge.machine': 'maskin',
'settings.account': 'Konto',
'settings.about': 'Om',
'settings.about.reportBug': 'Rapportera en bugg',
'settings.about.reportBugHint': 'Har du upptäckt ett problem? Meddela oss',
'settings.about.featureRequest': 'Förslag på ny funktion',
'settings.about.featureRequestHint': 'Föreslå en ny funktion',
'settings.about.wikiHint': 'Dokumentation och handledningar',
'settings.about.supporters.badge': 'Månatliga bidragsgivare',
'settings.about.supporters.title': 'Resekompisar för TREK',
'settings.about.supporters.subtitle':
"Medan du planerar din nästa rutt bidrar dessa personer till att forma TREK:s framtid. Deras månatliga bidrag går direkt till utveckling och faktisk arbetstid – så att TREK förblir öppen källkod.",
'settings.about.supporters.since': 'bidragsgivare sedan {date}',
'settings.about.supporters.tierEmpty': 'Var först',
'settings.about.supporter.tier.noReturnTicket': 'Ingen returbiljett',
'settings.about.supporter.tier.lostLuggageVip': 'VIP-tjänst för förlorat bagage',
'settings.about.supporter.tier.businessClassDreamer': 'Business Class-drömmaren',
'settings.about.supporter.tier.budgetTraveller': 'Budgetresenären',
'settings.about.supporter.tier.hostelBunkmate': 'Rumskamrat på vandrarhem',
'settings.about.description':
'TREK är en resplanerare som du själv kan driva och som hjälper dig att organisera dina resor från den första idén till det sista minnet. Dagsplanering, budget, packlistor, foton och mycket mer – allt på ett och samma ställe, på din egen server.',
'settings.about.madeWith': 'Gjord med',
'settings.about.madeBy': 'av Maurice och en växande open source-gemenskap.',
'settings.username': 'Användarnamn',
'settings.email': 'E-post',
'settings.role': 'Roll',
'settings.roleAdmin': 'Administratör',
'settings.oidcLinked': 'Länkad med',
'settings.changePassword': 'Ändra lösenord',
'settings.currentPassword': 'Nuvarande lösenord',
'settings.currentPasswordRequired': 'Nuvarande lösenord krävs',
'settings.newPassword': 'Nytt lösenord',
'settings.confirmPassword': 'Godkänn nya lösenordet',
'settings.updatePassword': 'Uppdatera lösenord',
'settings.passwordRequired': 'Ange nuvarande och nytt lösenord',
'settings.passwordTooShort': 'Lösenordet måste bestå av minst 8 tecken',
'settings.passwordMismatch': 'Lösenorden stämmer inte överens',
'settings.passwordWeak': 'Lösenordet måste innehålla versaler, gemener, en siffra och ett specialtecken',
'settings.passwordChanged': 'Lösenordet har ändrats',
'settings.mustChangePassword':
'Du måste byta lösenord innan du kan fortsätta. Välj ett nytt lösenord nedan.',
'settings.deleteAccount': 'Ta bort konto',
'settings.deleteAccountTitle': 'Ta bort ditt konto?',
'settings.deleteAccountWarning':
'Ditt konto samt alla dina resor, platser och filer kommer att raderas permanent. Denna åtgärd går inte att ångra.',
'settings.deleteAccountConfirm': 'Radera permanent',
'settings.deleteBlockedTitle': 'Det går inte att radera',
'settings.deleteBlockedMessage':
'Du är den enda administratören. Befordra en annan användare till administratör innan du raderar ditt konto.',
'settings.roleUser': 'Användare',
'settings.saveProfile': 'Spara profil',
'settings.toast.mapSaved': 'Kartinställningarna har sparats',
'settings.toast.keysSaved': 'API nycklar sparade',
'settings.toast.displaySaved': 'Visningsinställningarna har sparats',
'settings.toast.profileSaved': 'Profil sparad',
'settings.uploadAvatar': 'Ladda upp profilbild',
'settings.removeAvatar': 'Ta bort profilbild',
'settings.avatarUploaded': 'Profilbilden har uppdaterats',
'settings.avatarRemoved': 'Profilbilden har tagits bort',
'settings.avatarError': 'Uppladdning misslyckades',
'settings.mfa.title': 'Tvåfaktorsautentisering (2FA)',
'settings.mfa.description':
'Lägger till ett extra steg när du loggar in med e-postadress och lösenord. Använd en autentiseringsapp (Google Authenticator, Authy m.fl.).',
'settings.mfa.requiredByPolicy':
'Din administratör kräver tvåfaktorsautentisering. Konfigurera en autentiseringsapp nedan innan du fortsätter.',
'settings.mfa.backupTitle': 'Säkerhetskoder',
'settings.mfa.backupDescription': 'Använd dessa engångskoder för säkerhetskopiering om du förlorar åtkomsten till din autentiseringsapp.',
'settings.mfa.backupWarning': 'Spara dessa koder nu. Varje kod kan endast användas en gång.',
'settings.mfa.backupCopy': 'Copy codes',
'settings.mfa.backupDownload': 'Ladda ner TXT',
'settings.mfa.backupPrint': 'Skriv ut / PDF',
'settings.mfa.backupCopied': 'Säkerhetskoder har kopierats',
'settings.mfa.enabled': '2FA är aktiverat på ditt konto.',
'settings.mfa.disabled': '2FA är inte aktiverat.',
'settings.mfa.setup': 'Konfigurera autentiseringsappen',
'settings.mfa.scanQr': 'Skanna den här QR-koden med din app, eller ange koden manuellt.',
'settings.mfa.secretLabel': 'Hemlig nyckel (manuell inmatning)',
'settings.mfa.codePlaceholder': '6-siffrig kod',
'settings.mfa.enable': 'Aktivera 2FA',
'settings.mfa.cancelSetup': 'Avbryt',
'settings.mfa.disableTitle': 'Inaktivera 2FA',
'settings.mfa.disableHint': 'Ange ditt kontolösenord och en aktuell kod från din autentiseringsapp.',
'settings.mfa.disable': 'Inaktivera 2FA',
'settings.mfa.toastEnabled': 'Tvåfaktorsautentisering är aktiverad',
'settings.mfa.toastDisabled': 'Tvåfaktorsautentisering är inaktiverad',
'settings.mfa.demoBlocked': 'Finns inte i demoläge',
'settings.currency': 'Valuta',
'settings.currencyHint': 'Alla belopp under kostnader omräknas till och redovisas i denna valuta.',
'settings.passkey.title': 'Inloggningsnycklar',
'settings.passkey.description':
'Logga in snabbare och med bättre skydd mot nätfiske med en inloggningsnyckel – ditt fingeravtryck, ditt ansikte, din PIN-kod eller en hårdvarunyckel. Ditt lösenord finns kvar som reserv.',
'settings.passkey.notConfigured':
'Inloggningsnycklar är aktiverade men ännu inte fullständigt konfigurerade på den här servern. Be din administratör att ställa in WebAuthn-domänen.',
'settings.passkey.add': 'Lägg till en inloggningsnyckel',
'settings.passkey.addTitle': 'Lägg till en inloggningsnyckel',
'settings.passkey.passwordPrompt': 'Bekräfta ditt nuvarande lösenord och följ sedan anvisningarna på enheten.',
'settings.passkey.passwordRequired': 'Du måste ange ditt nuvarande lösenord.',
'settings.passkey.namePlaceholder': 'Namn (valfritt, t.ex. ”iPhone”)',
'settings.passkey.addedToast': 'Inloggningsnyckel tillagd',
'settings.passkey.added': 'Tillagd',
'settings.passkey.addError': 'Kunde inte lägga till inloggningsnyckel',
'settings.passkey.cancelled': 'Konfigurationen av inloggningsnyckel har avbrutits',
'settings.passkey.deleted': 'Inloggningsnyckel borttagen',
'settings.passkey.deleteConfirm': 'Ta bort denna inloggningsnyckel? Godkänn med ditt lösenord',
'settings.passkey.rename': 'Döp om',
'settings.passkey.defaultName': 'Inloggningsnyckel',
'settings.passkey.synced': 'Synkroniserad',
'settings.passkey.deviceBound': 'Denna enhet',
'settings.passkey.lastUsed': 'Senast använd',
'settings.passkey.neverUsed': 'Aldrig använd',
'settings.airtrail.title': 'AirTrail',
'settings.airtrail.hint':
'Anslut din egenhostade AirTrail för att importera och synkronisera flygningar. Skapa en API-nyckel i AirTrail under Inställningar → Säkerhet.',
'settings.airtrail.url': 'Instans URL',
'settings.airtrail.apiKey': 'API nyckel',
'settings.airtrail.apiKeyPlaceholder': 'API-nyckel för innehavare',
'settings.airtrail.apiKeyHint': 'Skapad i AirTrail under Inställningar → Säkerhet. Lagras i krypterad form.',
'settings.airtrail.allowInsecureTls': 'Tillåt självsignerade certifikat',
'settings.airtrail.allowInsecureTlsHint': 'Aktivera endast för en betrodd instans i ditt eget nätverk.',
'settings.airtrail.writeBack': 'Skriv tillbaka ändringarna till AirTrail',
'settings.airtrail.writeBackHint':
'Avstängt som standard: AirTrail är den primära källan och TREK läser endast från den. Aktivera funktionen för att skicka ändringar som gjorts i TREK tillbaka till AirTrail.',
'settings.airtrail.connected': 'Ansluten',
'settings.airtrail.notConnected': 'Inte ansluten',
'settings.airtrail.toast.saved': 'AirTrail anslutning sparad',
'settings.airtrail.toast.saveError': 'Det gick inte att spara anslutningen',
'settings.airtrail.test.button': 'Testa anslutningen',
'settings.airtrail.test.success': 'Ansluten — {count} flygning(ar) hittades',
'settings.airtrail.test.failed': 'Anslutning misslyckades',
};
export default settings;
+16
View File
@@ -0,0 +1,16 @@
import type { TranslationStrings } from '../types';
const share: TranslationStrings = {
'share.linkTitle': 'Allmän länk',
'share.linkHint':
'Skapa en länk som vem som helst kan använda för att se den här resan utan att logga in. Endast läsbehörighet – redigering är inte möjlig.',
'share.createLink': 'Skapa länk',
'share.deleteLink': 'Radera länk',
'share.createError': 'Kunde inte skapa länk',
'share.permMap': 'Karta & Plan',
'share.permBookings': 'Bokningar',
'share.permPacking': 'Packning',
'share.permBudget': 'Budget',
'share.permCollab': 'Chatt',
};
export default share;
+21
View File
@@ -0,0 +1,21 @@
import type { TranslationStrings } from '../types';
const shared: TranslationStrings = {
'shared.expired': 'Länken har gått ut eller är ogiltig',
'shared.expiredHint': 'Den här länken till den delade resan är inte längre aktiv.',
'shared.readOnly': 'Delad vy i skrivskyddat läge',
'shared.tabPlan': 'Plan',
'shared.tabBookings': 'Bokningar',
'shared.tabPacking': 'Packning',
'shared.tabBudget': 'Budget',
'shared.tabChat': 'Chatt',
'shared.days': 'dagar',
'shared.places': 'platser',
'shared.other': 'Andra',
'shared.totalBudget': 'Total Budget',
'shared.messages': 'meddelanden',
'shared.sharedVia': 'Delad via',
'shared.confirmed': 'Godkänt',
'shared.pending': 'Pendlande',
};
export default shared;
+13
View File
@@ -0,0 +1,13 @@
import type { TranslationStrings } from '../types';
const stats: TranslationStrings = {
'stats.countries': 'Länder',
'stats.cities': 'Städer',
'stats.trips': 'Resor',
'stats.places': 'Platser',
'stats.worldProgress': 'Världsliga framsteg',
'stats.visited': 'besökta',
'stats.remaining': 'återstår',
'stats.visitedCountries': 'Besökta länder',
};
export default stats;
+50
View File
@@ -0,0 +1,50 @@
import type { TranslationStrings } from '../types';
const system_notice: TranslationStrings = {
'system_notice.v3_photos.title': 'Bilderna har flyttats i version 3.0',
'system_notice.v3_photos.body':
'**Bilder** i resplaneraren har tagits bort. Dina bilder är i säkerhet – TREK har aldrig ändrat ditt Immich- eller Synology-bibliotek.\n\nBilderna finns nu i tillägget **Journey**. Journey är valfritt – om det ännu inte är tillgängligt kan du be din administratör att aktivera det under Admin → Tillägg.',
'system_notice.v3_journey.title': 'Upptäck Journey – resedagbok',
'system_notice.v3_journey.body':
'Dokumentera dina resor som innehållsrika reseskildringar med tidslinjer, fotoalbum och interaktiva kartor.',
'system_notice.v3_journey.cta_label': 'Öppna Journey',
'system_notice.v3_journey.highlight_timeline': 'Dag-för-dag-tidslinje och fotoalbum',
'system_notice.v3_journey.highlight_photos': 'Importera från Immich eller Synology',
'system_notice.v3_journey.highlight_share': 'Dela offentligt – ingen inloggning krävs',
'system_notice.v3_journey.highlight_export': 'Exportera som en fotobok i PDF-format',
'system_notice.v3_features.title': 'Fler höjdpunkter i version 3.0',
'system_notice.v3_features.body': 'Några ytterligare saker som är bra att veta om den här utgåvan.',
'system_notice.v3_features.highlight_dashboard': 'Omdesign av instrumentpanelen med fokus på mobilanvändning',
'system_notice.v3_features.highlight_offline': 'Fullständigt offline-läge som PWA',
'system_notice.v3_features.highlight_search': 'Automatisk komplettering vid platssökning i realtid',
'system_notice.v3_features.highlight_import': 'Importera platser från KMZ-/KML-filer',
'system_notice.v3_mcp.title': 'MCP: OAuth 2.1 uppgradering',
'system_notice.v3_mcp.body':
'MCP-integrationen har genomgått en fullständig omarbetning. OAuth 2.1 är nu den rekommenderade autentiseringsmetoden. De äldre statiska tokenen (trek_…) är utfasade och kommer att tas bort i en kommande version.',
'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 rekommenderas (mcp-remote)',
'system_notice.v3_mcp.highlight_scopes': '24 detaljerade behörighetsområden',
'system_notice.v3_mcp.highlight_deprecated': 'Statiska trek_-token är utfasade',
'system_notice.v3_mcp.highlight_tools': 'Utökad verktygslåda och uppmaningar',
'system_notice.v3_thankyou.title': 'Ett personligt meddelande från mig',
'system_notice.v3_thankyou.body':
"Innan du går – vill jag ta en stund.\n\nTREK började som ett sidoprojekt som jag skapade för mina egna resor. Jag hade aldrig kunnat föreställa mig att det skulle växa till något som 4 000 av er nu litar på för att planera era äventyr. Varje stjärna, varje problem, varje önskemål om funktioner – jag läser dem alla, och de är det som håller mig igång under sena nätter mellan mitt heltidsjobb och universitetet.\n\nJag vill att ni ska veta: TREK kommer alltid att vara öppen källkod, alltid självhostat, alltid ert. Ingen spårning, inga prenumerationer, inga förbehåll. Bara ett verktyg skapat av någon som älskar att resa lika mycket som ni.\n\nEtt särskilt tack till [jubnl](https://github.com/jubnl) – du har blivit en fantastisk samarbetspartner. Så mycket av det som gör 3.0 så bra bär dina avtryck. Tack för att du trodde på det här projektet när det fortfarande var lite ojämnt i kanterna.\n\nOch till var och en av er som rapporterade ett fel, översatte en sträng, delade TREK med en vän eller helt enkelt använde det för att planera en resa – **tack**. Ni är anledningen till att det här finns.\n\nSkål för många fler äventyr tillsammans.\n\n— Maurice\n\n---\n\n[Gå med i communityn på Discord](https://discord.gg/7Q6M6jDwzf)\n\nOm TREK gör dina resor bättre, så håller en [liten kaffe](https://ko-fi.com/mauriceboe) alltid lamporna tända.",
'system_notice.v3014_whitespace_collision.title': 'Åtgärd krävs: konflikt mellan användarkonton',
'system_notice.v3014_whitespace_collision.body':
'Uppgraderingen till version 3.0.14 upptäckte en eller flera konflikter mellan användarnamn eller e-postadresser som orsakades av blanksteg i början eller slutet av lagrade konton. De berörda kontona döptes om automatiskt. Kontrollera serverloggarna efter rader som börjar med **[migration] WHITESPACE COLLISION** för att identifiera vilka konton som behöver granskas.',
'system_notice.welcome_v1.title': 'Välkommen till TREK',
'system_notice.welcome_v1.body':
'Din allt-i-ett-resplanerare. Skapa resplaner, dela resor med vänner och håll ordning på allt – både online och offline.',
'system_notice.welcome_v1.cta_label': 'Planera en resa',
'system_notice.welcome_v1.hero_alt': 'Ett naturskönt resmål med TREK planering UI-överlagring',
'system_notice.welcome_v1.highlight_plan': 'Dag-för-dag-resplaner för alla typer av resor',
'system_notice.welcome_v1.highlight_share': 'Samarbeta med resepartners',
'system_notice.welcome_v1.highlight_offline': 'Fungerar offline på mobilen',
'system_notice.dev_test_modal.title': '[Dev] Meddelande om test',
'system_notice.dev_test_modal.body': 'Detta är ett testmeddelande avsett endast för utvecklare.',
'system_notice.pager.prev': 'Tidigare meddelande',
'system_notice.pager.next': 'Nästa meddelande',
'system_notice.pager.counter': '{current} / {total}',
'system_notice.pager.goto': 'Gå till meddelandet {n}',
'system_notice.pager.position': 'Meddlenade {current} av {total}',
};
export default system_notice;
+40
View File
@@ -0,0 +1,40 @@
import type { TranslationStrings } from '../types';
const todo: TranslationStrings = {
'todo.subtab.packing': 'Packlista',
'todo.subtab.todo': 'Att göra',
'todo.completed': 'slutförd',
'todo.filter.all': 'Alla',
'todo.filter.open': 'Öppna',
'todo.filter.done': 'Slutförda',
'todo.uncategorized': 'Okategoriserat',
'todo.namePlaceholder': 'Uppgiftsnamn',
'todo.descriptionPlaceholder': 'Beskrivning (valfritt)',
'todo.unassigned': 'Ej tilldelad',
'todo.noCategory': 'Ingen kategori',
'todo.hasDescription': 'Har beskrivning',
'todo.addItem': 'Lägg till ny uppgift',
'todo.sidebar.sortBy': 'Sortera efter',
'todo.priority': 'Prioritet',
'todo.newCategoryLabel': 'ny',
'todo.newCategory': 'Kategori namn',
'todo.addCategory': 'Lägg till kategori',
'todo.newItem': 'Ny uppgift',
'todo.empty': 'Ingen uppgifter. Lägg till en uppgift för att komma igång!',
'todo.filter.my': 'Mina uppgifter',
'todo.filter.overdue': 'Förfallen',
'todo.sidebar.tasks': 'Uppgifter',
'todo.sidebar.categories': 'Kategorier',
'todo.detail.title': 'Uppgift',
'todo.detail.description': 'Beskrivning',
'todo.detail.category': 'Kategori',
'todo.detail.dueDate': 'Förfallodag',
'todo.detail.assignedTo': 'Tilldelad till',
'todo.detail.delete': 'Radera',
'todo.detail.save': 'Spara ändringar',
'todo.sortByPrio': 'Prioritet',
'todo.detail.priority': 'Prioritet',
'todo.detail.noPriority': 'Ingen',
'todo.detail.create': 'Skapa uppgift',
};
export default todo;
+10
View File
@@ -0,0 +1,10 @@
import type { TranslationStrings } from '../types';
const transport: TranslationStrings = {
'transport.addTransport': 'Lägg till transport',
'transport.modalTitle.create': 'Lägg till transport',
'transport.modalTitle.edit': 'Redigera transport',
'transport.title': 'Transporter',
'transport.addManual': 'Manuell Transport',
};
export default transport;
+31
View File
@@ -0,0 +1,31 @@
import type { TranslationStrings } from '../types';
const trip: TranslationStrings = {
'trip.tabs.plan': 'Plan',
'trip.tabs.transports': 'Transporter',
'trip.tabs.reservations': 'Bokningar',
'trip.tabs.reservationsShort': 'Bokningar',
'trip.tabs.packing': 'Packlista',
'trip.tabs.packingShort': 'Packning',
'trip.tabs.lists': 'Listor',
'trip.tabs.listsShort': 'Listor',
'trip.tabs.budget': 'Kostnader',
'trip.tabs.files': 'Filer',
'trip.loading': 'Laddar resa...',
'trip.loadingPhotos': 'Laddar plats foton...',
'trip.mobilePlan': 'Plan',
'trip.mobilePlaces': 'Platser',
'trip.toast.placeUpdated': 'Plats uppdaterad',
'trip.toast.placeAdded': 'Plats tillagd',
'trip.toast.placeDeleted': 'Plats raderad',
'trip.toast.selectDay': 'Vänligen välj en dag först',
'trip.toast.assignedToDay': 'Plats tilldelad till dag',
'trip.toast.reorderError': 'Misslyckades att ordna om',
'trip.toast.reservationUpdated': 'Reservation uppdaterad',
'trip.toast.reservationAdded': 'Reservation tillagd',
'trip.toast.deleted': 'Raderad',
'trip.confirm.deletePlace': 'Är du säker på att du vill radera denna plats?',
'trip.confirm.deletePlaces': 'Radera {count} platser?',
'trip.toast.placesDeleted': '{count} platser raderade',
};
export default trip;
+16
View File
@@ -0,0 +1,16 @@
import type { TranslationStrings } from '../types';
const trips: TranslationStrings = {
'trips.memberRemoved': '{username} borttagen',
'trips.memberRemoveError': 'Det gick inte att ta bort',
'trips.memberAdded': '{username} tillagd',
'trips.memberAddError': 'Det gick inte att lägga till',
'trips.reminder': 'Påminnelse',
'trips.reminderNone': 'Ingen',
'trips.reminderDay': 'dag',
'trips.reminderDays': 'dagar',
'trips.reminderCustom': 'Anpassad',
'trips.reminderDaysBefore': 'dagar innan avresa',
'trips.reminderDisabledHint': 'Resepåminnelser är inaktiverade. Aktivera dem under Admin > Inställningar > Meddelanden.',
};
export default trips;
+22
View File
@@ -0,0 +1,22 @@
import type { TranslationStrings } from '../types';
const undo: TranslationStrings = {
'undo.button': 'Ångra',
'undo.tooltip': 'Ångra: {action}',
'undo.assignPlace': 'Plats tilldelad dagen',
'undo.removeAssignment': 'Plats har tagits bort från dagen',
'undo.reorder': 'Platserna har ordnats om',
'undo.optimize': 'Rutt optimerad',
'undo.deletePlace': 'Plats borttagen',
'undo.deletePlaces': 'Platser borttagna',
'undo.moveDay': 'Plats har flyttats till en annan dag',
'undo.lock': 'Plats lås växlad',
'undo.importGpx': 'GPX importering',
'undo.importKeyholeMarkup': 'KMZ/KML importering',
'undo.importGoogleList': 'Google Maps importering',
'undo.importNaverList': 'Naver Maps importering',
'undo.importBooking': 'Boknings godkännande importering',
'undo.addPlace': 'Plats tillagd',
'undo.done': 'Återställd: {action}',
};
export default undo;
+93
View File
@@ -0,0 +1,93 @@
import type { TranslationStrings } from '../types';
const vacay: TranslationStrings = {
'vacay.subtitle': 'Planera och hantera semesterdagar',
'vacay.settings': 'Inställningar',
'vacay.year': 'År',
'vacay.addYear': 'Lägg till nästa år',
'vacay.addPrevYear': 'Lägg till föregående år',
'vacay.removeYear': 'Ta bort år',
'vacay.removeYearConfirm': 'Ta bort {year}?',
'vacay.removeYearHint': 'Alla semesterposter och företagshelger för i år kommer att raderas permanent.',
'vacay.remove': 'Ta bort',
'vacay.persons': 'Personer',
'vacay.noPersons': 'Inga personer tillagda',
'vacay.addPerson': 'Lägg till person',
'vacay.editPerson': 'Redigera person',
'vacay.removePerson': 'Radera person',
'vacay.removePersonConfirm': 'Radera {name}?',
'vacay.removePersonHint': 'Alla semesterposter för den här personen kommer att raderas permanent.',
'vacay.personName': 'Namn',
'vacay.personNamePlaceholder': 'Ange namn',
'vacay.color': 'Färg',
'vacay.add': 'Lägg till',
'vacay.legend': 'Legend',
'vacay.publicHoliday': 'Helgdag',
'vacay.companyHoliday': 'Företagshelg',
'vacay.weekend': 'Helgen',
'vacay.modeVacation': 'Semester',
'vacay.modeCompany': 'Företagshelg',
'vacay.entitlement': 'Rättighet',
'vacay.entitlementDays': 'Dagar',
'vacay.used': 'Använt',
'vacay.remaining': 'Kvar',
'vacay.carriedOver': 'från {year}',
'vacay.blockWeekends': 'Blockera Helger',
'vacay.blockWeekendsHint': 'Förhindra att semesterdagar läggs in på helgdagar',
'vacay.weekendDays': 'Helgdagar',
'vacay.mon': 'Mån',
'vacay.tue': 'Tis',
'vacay.wed': 'Ons',
'vacay.thu': 'Tor',
'vacay.fri': 'Fre',
'vacay.sat': 'Lör',
'vacay.sun': 'Sön',
'vacay.publicHolidays': 'Allmänna helgdagar',
'vacay.publicHolidaysHint': 'Markera allmäna helgdagar i kalendern',
'vacay.selectCountry': 'Välj land',
'vacay.selectRegion': 'Välj region (valfritt)',
'vacay.addCalendar': 'Lägg till kalender',
'vacay.calendarLabel': 'Etikett (valfritt)',
'vacay.calendarColor': 'Färg',
'vacay.noCalendars': 'Inga helgdagskalendrar har ännu tillagts',
'vacay.companyHolidays': 'Företagshelger',
'vacay.companyHolidaysHint': 'Tillåt markering av helgdagar som gäller för hela företaget',
'vacay.companyHolidaysNoDeduct': 'Företagets helgdagar räknas inte in i semesterdagarna.',
'vacay.weekStart': 'Vecka börjar på',
'vacay.weekStartHint': 'Välj om kalenderveckan ska börja på måndag eller söndag',
'vacay.carryOver': 'Överföring',
'vacay.carryOverHint': 'Överför automatiskt återstående semesterdagar till nästa år',
'vacay.sharing': 'Dela',
'vacay.sharingHint': 'Dela dina semesterplaner med andra TREK användare',
'vacay.owner': 'Ägare',
'vacay.shareEmailPlaceholder': 'E-postadress för TREK användare',
'vacay.shareSuccess': 'Planen har delats utan problem',
'vacay.shareError': 'Kunde inte dela planen',
'vacay.dissolve': 'Upplös Sammanslagning',
'vacay.dissolveHint': 'Återigen separata kalendrar. Dina inlägg kommer att sparas.',
'vacay.dissolveAction': 'Upplös',
'vacay.dissolved': 'Kalendrar separerade',
'vacay.fusedWith': 'I kombination med',
'vacay.you': 'dig',
'vacay.noData': 'Ingen data',
'vacay.changeColor': 'Ändra färg',
'vacay.inviteUser': 'Bjud in användare',
'vacay.inviteHint': 'Bjud in en annan TREK användare att dela en gemensam semesterkalender.',
'vacay.selectUser': 'Välj användare',
'vacay.sendInvite': 'Skicka inbjudan',
'vacay.inviteSent': 'Inbjudan skickad',
'vacay.inviteError': 'Kunde inte skicka inbjudan',
'vacay.pending': 'väntande',
'vacay.noUsersAvailable': 'Inga användare tillgängliga',
'vacay.accept': 'Godkänn',
'vacay.decline': 'Neka',
'vacay.acceptFusion': 'Godkänn & Slå samman',
'vacay.inviteTitle': 'Sammanslagning Begäran',
'vacay.inviteWantsToFuse': 'vill dela en semesterkalender med dig.',
'vacay.fuseInfo1': 'Ni båda kommer att kunna se alla semesteranteckningar i en gemensam kalender.',
'vacay.fuseInfo2': 'Båda parter kan skapa och redigera poster åt varandra.',
'vacay.fuseInfo3': 'Båda parter kan radera poster och ändra semesterrättigheter.',
'vacay.fuseInfo4': 'Inställningar som allmänna helgdagar och företagshelgdagar delas.',
'vacay.fuseInfo5': 'Sammanslagningen kan när som helst upphävas av endera parten. Dina uppgifter kommer att bevaras.',
};
export default vacay;