diff --git a/package-lock.json b/package-lock.json index 4957279e..7441ecc0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "beacon-web", - "version": "2.0.0", + "version": "2.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "beacon-web", - "version": "2.0.0", + "version": "2.0.1", "license": "AGPL-3.0-or-later", "dependencies": { "@nazka/map-gl-js-spiderfy": "^2.0.0", diff --git a/package.json b/package.json index 483e457a..ebabcfa7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "beacon-web", "private": true, - "version": "2.0.0", + "version": "2.0.1", "license": "AGPL-3.0-or-later", "type": "module", "scripts": { diff --git a/src/i18n/locales/sv.json b/src/i18n/locales/sv.json new file mode 100644 index 00000000..2b6507bf --- /dev/null +++ b/src/i18n/locales/sv.json @@ -0,0 +1,908 @@ +{ + "name": "Svenska", + "translation": { + "language": { + "label": "Språk", + "help": "Välj ett språk." + }, + "tabs": { + "Packets": "Paket", + "Channels": "Kanaler", + "Map": "Karta", + "Nodes": "Noder", + "Observers": "Observatörer", + "Routes": "Rutter", + "Traces": "Spårningar", + "Analytics": "Analys" + }, + "navigation": { + "primary": "Huvudnavigering", + "more": "Mer", + "moreTabs": "Fler flikar" + }, + "connection": { + "live": "LIVE", + "stale": "INAKTUELL {{age}}", + "offline": "OFFLINE", + "rateLimited": "HASTIGHETSBEGRÄNSAD {{seconds}} s" + }, + "region": { + "label": "Region", + "allShort": "ALLA", + "allRegions": "Alla regioner", + "group": "Regioner", + "areaGroup": "Områden", + "count_one": "{{count}} region", + "count_other": "{{count}} regioner", + "iataCount_one": "{{count}} område", + "iataCount_other": "{{count}} områden", + "filter": "Sök efter region eller områdeskod…", + "failed": "Kunde inte läsa in", + "noMatches": "Inga träffar" + }, + "theme": { + "label": "Tema" + }, + "common": { + "loading": "Läser in…", + "loadFailed": "Kunde inte läsa in", + "noData": "Inga data", + "dataUnavailable": "Data är inte tillgängliga", + "info": "Mer information", + "closeDetailPanel": "Stäng detaljpanelen", + "expandDetailPanel": "Expandera detaljpanelen", + "minimizeDetailPanel": "Minimera detaljpanelen", + "notFound": "Hittades inte", + "loadingDots": "Läser in...", + "copyLink": "Kopiera länk", + "copied": "Kopierad", + "copyFailed": "Kopieringen misslyckades", + "filters": "Filter", + "closeFilters": "Stäng filter", + "clearAll": "Rensa alla", + "done": "Klar", + "all": "Alla", + "noOptions": "Inga alternativ", + "copy": "Kopiera", + "close": "Stäng", + "clear": "Rensa", + "none": "Ingen", + "noMatches": "Inga träffar", + "filterPlaceholder": "Filtrera..." + }, + "mesh": { + "totalPackets": "Totalt antal paket", + "observations": "Observationer", + "activeObservers": "Aktiva observatörer", + "activeIatas": "Aktiva områden", + "lastHours": "Senaste {{hours}} h", + "lastHoursTo": "Senaste {{hours}} h · till {{time}} UTC", + "observationsTitle": "Observationer · {{range}}", + "topObservers": "Mest aktiva observatörer · {{range}}", + "payloadTypes": "Nyttolasttyper · {{range}}", + "obs": "{{value}} obs", + "topNodes": "Mest aktiva noder · {{range}}", + "nodeTypes": "Nodtyper · hela perioden", + "radioPresets": "Radioförinställningar · hela perioden", + "scope": "Scope", + "packets": "Paket", + "observers": "Observatörer", + "nodes": "Noder", + "nodesCenter": "NODER" + }, + "stats": { + "section": "Statistikavsnitt", + "mobileSection": "Avsnitt", + "timeRange": "Tidsintervall", + "tabs": { + "mesh": "Mesh", + "traffic": "Trafik", + "signal": "RF / signal", + "paths": "Vägar och hashvärden", + "scopes": "Scopes", + "talkers": "Sändare", + "clockdrift": "Klockdrift", + "compare": "Jämför observatörer", + "graph": "Granngraf" + }, + "ranges": { + "24h": "24 h", + "7d": "7 d", + "30d": "30 d" + } + }, + "signal": { + "subtitle": "Signalstyrka för paket som tagits emot av observatörer.", + "error": "Kunde inte läsa in signaldata. Försök uppdatera eller välj en kortare tidsperiod.", + "receptions": "Observationer", + "meanSnr": "Genomsnittligt SNR", + "meanRssi": "Genomsnittligt RSSI", + "hoursWithRecords": "Aktiva timmar", + "measurement": "Mätt av varje observatör på det sista hoppet. Tiderna anges i UTC.", + "window": "{{since}} till {{until}} UTC, aktuell timme exkluderad. Tomma timmar innebär inte ett avbrott.", + "histogramTitle": "Fördelning av {{metric}} · {{unit}}", + "meanTitle": "Genomsnittligt {{metric}} per timme · {{unit}}", + "availability": "Tillgängliga mätvärden", + "averagesTitle": "Vad genomsnittsvärdena omfattar", + "loading": "Läser in signal…", + "empty": "Inga observationer under den här perioden.", + "availabilityTable": "Tillgängliga signalmätvärden", + "metric": "Mätvärde", + "samples": "Mätningar", + "missing": "Saknas", + "share": "Andel", + "averagesHelp": "Varje observation väger lika tungt; saknade mätvärden utelämnas.", + "details": "Exakta histogram- och timvärden", + "histogramTable": "Histogram för {{metric}}", + "binsHelp": "Varje intervall inkluderar sin nedre gräns; de yttersta intervallen fångar allt utanför.", + "hourlyTable": "Signalvärden per timme", + "utcHour": "UTC-timme", + "receptionsColumn": "Observationer", + "metricSamples": "Mätningar av {{metric}}", + "meanUnit": "Genomsnitt {{unit}}", + "binInterval": "{{lower}} till < {{upper}}", + "histogramDescription": "Fördelning av {{metric}} i {{unit}}. Exakta intervallgränser och antal visas nedan.", + "trendDescription": "Genomsnittligt {{metric}} per timme i {{unit}}, UTC. Luckor innebär att mätvärden saknas. Exakta värden finns i timtabellen.", + "coverageDescription": "Tillgängliga och saknade mätvärden för SNR och RSSI. Exakta antal och procenttal finns i tabellen över tillgängliga mätvärden.", + "available": "Tillgänglig", + "unavailable": "Ej tillgänglig", + "noSample": "Ingen mätning" + }, + "paths": { + "subtitle": "Hur rutthashar lagras i mottagna paket.", + "error": "Kunde inte läsa in vägdata. Försök uppdatera eller välj en kortare tidsperiod.", + "receptions": "Observationer", + "withHashPaths": "Med hashvägar", + "multiByteShare": "Andel med flera byte", + "mostEntries": "Flest vägposter", + "measurement": "Vägposter räknas per observation.", + "window": "{{since}} till {{until}} UTC, aktuell timme exkluderad.", + "widthTitle": "Observerade hashbredder", + "lengthTitle": "Mottagna vägposter", + "trendTitle": "Observationer med hashvägar över tid", + "coverageTitle": "Täckning per vägformat", + "countsTitle": "Vad antalen omfattar", + "loading": "Läser in vägar…", + "empty": "Inga observationer under den här perioden.", + "classificationTable": "Antal per vägklassificering", + "category": "Kategori", + "receptionsColumn": "Observationer", + "share": "Andel", + "categories": { + "hashed": "Hashvägar", + "empty": "Tomma", + "trace": "Trace", + "unclassified": "Oklassificerade" + }, + "countsHelp": "Tomma vägar har ingen hashbredd, och oklassificerade paket saknade användbara vägdata.", + "details": "Exakta värden för bredd, väglängd och timmar", + "widthTable": "Antal per hashbredd", + "bytesPerHash": "Byte per hash", + "lengthTable": "Antal per vägpost", + "headerEntries": "Poster i headern", + "lengthsHelp": "Noll betyder en tom väg; timmar utan data lämnas som luckor.", + "hourlyTable": "Vägantal per timme", + "utcHour": "UTC-timme", + "hashWidth_one": "{{count}} byte", + "hashWidth_other": "{{count}} byte", + "hashPathsCenter": "HASHVÄGAR", + "receptionsCenter": "OBSERVATIONER", + "widthDescription": "Andel per hashbredd bland icke-tomma vägar. Exakta antal visas nedan.", + "coverageDescription": "Vägtyp för varje observation. Exakta antal visas bredvid.", + "lengthDescription": "Vägposter per observation. Noll betyder en tom väg. Exakta antal visas i tabellen.", + "entries": "Vägposter", + "trendDescription": "Observationer per timme med 1-, 2- eller 3-byte långa hashvägar, UTC. Luckor innebär att data saknas. Exakta värden finns i timtabellen." + }, + "traffic": { + "subtitle": "När och var observatörer tar emot paket.", + "error": "Kunde inte läsa in trafikdata. Försök uppdatera.", + "receptions": "Observationer", + "reportingIatas": "Aktiva områden", + "busiestHour": "Mest aktiva timme", + "hoursWithRecords": "Aktiva timmar", + "measurement": "Antalen avser observationer, inte unika paket. Tiderna anges i UTC; tomma timmar innebär inte ett avbrott.", + "trendTitle": "Observationer per område", + "hourlyRecords": "Per timme · UTC", + "hourlyTitle": "Aktivitet per timme · {{range}}", + "shareTitle": "Andel observationer", + "byIata": "Observationer per område", + "loading": "Läser in trafik…", + "empty": "Inga observationer under den här perioden.", + "receptionsColumn": "Observationer", + "area": "Område", + "share": "Andel", + "groupingHelp": "Diagram grupperar mindre områden under ”Övriga områden”; tabellen behåller alla områden.", + "receptionsCenter": "OBSERVATIONER", + "shareDescription": "Andel observationer per område. Exakta antal och procenttal visas i tabellen.", + "unassigned": "Ej tilldelat", + "otherIatas": "Övriga områden", + "trendDescription": "Observationer per timme och område. Luckor innebär att data saknas. Exakta totaler finns i datatabellen.", + "heatmapDescription": "Aktivitet per UTC-dag och timme. Ljusare celler innebär fler observationer.", + "more": "Fler", + "fewer": "Färre", + "heatmapTooltip_one": "{{day}} {{hour}}:00 UTC\n{{value}} observation", + "heatmapTooltip_other": "{{day}} {{hour}}:00 UTC\n{{value}} observationer" + }, + "scopes": { + "subtitle": "Scope-aktivitet för den valda regionen.", + "search": "Sök efter scope", + "error": "Kunde inte läsa in scopes. Försök uppdatera.", + "active": "Scopes med data", + "scopedPackets": "Paket med scope", + "memberships": "Observatörer", + "defaultNodes": "Noder i standardscope", + "observersLine": "Linje: mottagning per timme", + "nodesLine": "Linje: annonsering per timme", + "measurement": "Paketantal omfattar det valda intervallet. Antalet observatörer och noder är aktuella värden, och en observatör kan tillhöra flera scopes.", + "packetsTitle": "Paket per scope", + "membershipsTitle": "Observatörer per scope", + "countsTitle": "Antal per scope", + "visibleCount_one": "{{visible}} av {{count}} scope", + "visibleCount_other": "{{visible}} av {{count}} scopes", + "loading": "Läser in scopes…", + "noMatches": "Inga scopes matchar sökningen.", + "empty": "Inga scope-data är tillgängliga.", + "scope": "Scope", + "packets": "Paket", + "observers": "Observatörer", + "nodes": "Noder", + "groupingHelp": "Diagram visar de 12 största scopes samt eventuell återstod. Tabellen behåller alla matchande scopes.", + "other": "Övriga scopes", + "chartDescription": "Antal per transport-scope. Exakta värden för alla matchande scopes listas i tabellen." + }, + "nodeDetail": { + "viewOnMap": "Visa på karta", + "title": "Noddetaljer", + "copyLink": "Kopiera nodlänk", + "notFound": "Noden hittades inte", + "summary": "Sammanfattning", + "copyKey": "Kopiera publik nyckel", + "viewObserver": "Visa observatör →", + "location": "Position", + "lat": "Lat", + "lng": "Long", + "source": "Källa", + "capabilities": "Funktioner", + "minFirmware": "Min. firmware", + "multibytePaths": "Flerbytevägar", + "multibyteTraces": "Flerbytespårningar", + "yes": "ja", + "no": "nej", + "radio": "Radio", + "scope": "Scope", + "timestamps": "Tidsstämplar", + "first": "Första", + "last": "Senaste", + "advert": "Annons", + "clockDrift": "Klockdrift", + "neighbors": "Grannar", + "neighborsCount": "Grannar ({{count}})", + "noNeighbors": "Inga kända grannar", + "recentPackets": "Senaste paket", + "noRecentPackets": "Inga senaste paket", + "observations_one": "{{formatted}} obs", + "observations_other": "{{formatted}} obs", + "hops": "Hopp" + }, + "nodes": { + "lastHeard": "senast mottagen {{ago}}", + "colName": "Namn", + "colType": "Typ", + "colRadio": "Radio", + "colAreas": "Områden", + "colNeighbors": "Grannar", + "colLocation": "Position", + "observer": "Observatör", + "empty": "Inga noder", + "neighbors_one": "{{formatted}} granne", + "neighbors_other": "{{formatted}} grannar", + "possiblyForeign": "Möjligen främmande", + "possiblyForeignHint": "Nodens position ligger utanför serverns lokala område." + }, + "packetRow": { + "noResolution": "Ingen vägupplösning tillgänglig", + "observer": "observatör", + "first": "första", + "last": "senaste", + "spread": "spann", + "noPath": "Ingen upplöst väg att visa på kartan", + "noObservations": "Inga observationer", + "loadFailed": "Kunde inte läsa in observationer", + "heardBy_one": "Mottaget av {{count}} observatör", + "heardBy_other": "Mottaget av {{count}} observatörer", + "unknown": "Okänd" + }, + "clockDrift": { + "caption": "Repeatrar och rumsservrar ur synk · störst avvikelse först", + "node": "Nod", + "drift": "Drift", + "checked": "Kontrollerad", + "inSync": "synkroniserad", + "ahead": "före", + "behind": "efter", + "empty": "Inga repeatrar ur synk", + "areas": "Områden" + }, + "timestamp": { + "ago": "för {{duration}} sedan", + "unit": { + "s": "{{count}} s", + "m": "{{count}} min", + "h": "{{count}} h", + "d": "{{count}} d" + } + }, + "observerPage": { + "back": "Tillbaka till observatörer", + "detail": "Observatörsdetaljer", + "range": "Tidsintervall", + "open": "Öppna observatörspanel", + "legacy": "Observationer (hela perioden)", + "metrics": "Observatörsmätvärden", + "records": "Mottagna paket", + "lastPacket": "Senaste paket", + "battery": "Batteri", + "batteryV": "Batteri V", + "uptime": "Drifttid", + "noise": "Brusgolv", + "noiseDbm": "Brus dBm", + "packets": "Paket", + "search": "Sök efter observatör", + "choose": "Välj en observatör", + "searchHelp": "Sök efter namn för att hitta observatörer utanför de första 50 resultaten.", + "summaryMissing": "Pakettotaler är inte tillgängliga.", + "statusRecent": "Aktuell status", + "statusStale": "Statusen är inaktuell", + "statusMissing": "Ingen statusrapport", + "activity": "Mottagna paket per {{interval}}", + "mix": "Fördelning av pakettyper", + "signal": "Mottagen signal", + "airtime": "Radiotid TX / RX", + "device": "Enhetstelemetri", + "queue": "Kölängd", + "errors": "Mottagningsfel", + "busy": "Kanalbeläggning", + "empty": "Inga paket mottagna under perioden", + "noTelemetry": "Ingen telemetri", + "noTelemetryHelp": "Den här observatören skickade ingen enhetstelemetri under perioden.", + "loadFailed": "Observatören kunde inte läsas in.", + "retry": "Försök igen", + "model": "Modell", + "firmware": "Firmware", + "client": "Klient", + "radio": "Radio", + "publicKey": "Publik nyckel", + "copy": "Kopiera", + "copied": "Kopierad", + "packetArrival": "Paketankomst", + "firstSeen": "Först sedd", + "copyLink": "Kopiera observatörslänk", + "window": "UTC-intervall", + "time": "Tid (UTC)", + "mean": "Genomsnitt", + "minimum": "Minimum", + "unknown": "Okänd", + "recording": "Läser in observatör…", + "hour": "timme", + "day": "dag", + "sidebarSearch": "Sök observatörer", + "noMatches": "Inga träffar", + "none": "Inga observatörer", + "packetsLastHour": "Paket senaste timmen", + "copyKey": "Kopiera publik nyckel", + "sort": "Sortera observatörer", + "sortActivity": "Aktivitet", + "sortName": "Namn", + "deviceInfo": "Enhet", + "brokers": "Brokers", + "copyLinkShort": "Kopiera länk", + "advertsHeard": "Mottagna annonser", + "noAdverts": "Inga annonser mottagna", + "unknownNode": "okänd", + "hops": "Hopp" + }, + "observerCompare": { + "open": "Jämför med…", + "close": "Stäng jämförelse", + "title": "Jämför observatörer", + "partner": "Observatör B", + "choose": "Välj en observatör att jämföra med", + "invalidObserver": "Välj en annan observatör med en giltig identifierare.", + "invalidTime": "Jämförelsetiden är ogiltig eller för gammal. Uppdatera för att använda det senaste kompletta intervallet.", + "refresh": "Uppdatera", + "unavailable": "Jämförelse är inte tillgänglig på den här servern.", + "currentNote": "Totalerna omfattar detta intervall; batteri, drifttid och brusgolv är aktuella värden.", + "metrics": "Mätvärden för observatörsjämförelse", + "metric": "Mätvärde", + "activity": "Mottagna paket", + "overlap": "Mottagna av båda", + "retention": "Endast paket som servern fortfarande behåller jämförs.", + "total_one": "{{count}} flood-paket", + "total_other": "{{count}} flood-paket", + "empty": "Ingen av observatörerna tog emot något flood-paket under intervallet.", + "onlyA": "Endast A", + "both": "Båda", + "onlyB": "Endast B", + "definition": "Varje flood-paket räknas en gång. Detta är inte ett mått på paketförlust.", + "retainedWindow": "Paket sparas bara i några dagar, så äldre intervall kan vara ofullständiga.", + "overlapShortRanges": "Paketöverlappning är tillgänglig för 24 h och 7 d.", + "invalidPair": "Välj två olika observatörer.", + "invalidRange": "Välj en giltig starttid och en senare sluttid.", + "observerA": "Observatör A", + "chooseObserver": "Välj en observatör", + "start": "Start (lokal tid)", + "end": "Slut (lokal tid)", + "retentionWarning": "Endast senaste paket sparas, så början av intervallet kan vara tom.", + "compare": "Jämför", + "selection": "Val", + "invalidLink": "Jämförelselänken innehåller ogiltiga eller saknade värden. Välj observatörer och datum nedan.", + "floodHeard": "Mottagna flood-paket", + "pair": "A: {{a}} · B: {{b}}", + "allRegions": "Alla", + "localTimeNote": "Lokal tid; sluttiden är exkluderad.", + "comparing": "Jämför…", + "retryComparison": "Försök jämföra igen", + "packetsTotal_one": "{{value}} flood-paket", + "packetsTotal_other": "{{value}} flood-paket", + "percentNote": "Procenttalen avser alla flood-paket som någon av observatörerna tog emot; varje paket räknas en gång. Detta är inte ett mått på paketförlust.", + "emptyRegion": "Ingen av observatörerna tog emot något flood-paket under perioden och i regionen.", + "tableLabel": "Jämförelse av flood-paket", + "heardBy": "Mottaget av", + "packets": "Paket", + "percentUnion": "% av unionen" + }, + "investigation": { + "title": "Observationer", + "observations_one": "{{count}} observation", + "observations_other": "{{count}} observationer", + "heardBy_one": "Mottaget av {{count}} observatör", + "heardBy_other": "Mottaget av {{count}} observatörer", + "heardTimes_one": "Mottaget en gång", + "heardTimes_other": "Mottaget {{count}} gånger", + "byObservers_one": "av {{count}} observatör", + "byObservers_other": "av {{count}} observatörer", + "pathNote": "Grupperat efter repeatrarna som varje kopia passerade. Korta ID:n kan motsvara mer än en nod.", + "traceNote": "TRACE-poster visar den planerade rutten, inte vägen som paketet faktiskt tog.", + "empty": "Inga observationer för paketet.", + "path": "Väg {{number}}", + "tracePath": "Avsedd rutt {{number}}", + "noEntries": "Inga vägposter", + "unavailablePath": "Vägdata (byte) är inte tillgängliga", + "inspect": "Välj observation", + "observer": "Granska observatör", + "map": "Visa väg på karta", + "unmappable": "Kräver minst två repeatrar med kända positioner.", + "retention": "En post per observatör. Äldre paket försvinner enligt serverns lagringstid för paket.", + "unavailableReport": "Observationen är inte längre tillgänglig eller så är länken ogiltig. Välj en nedan.", + "copy": "Kopiera länk", + "copyPacket": "Kopiera paketlänk", + "viewAll": "Visa alla vägar på karta", + "mapDialog": "Karta över paketväg", + "mapTitle": "Paketväg", + "copyPath": "Kopiera väglänk", + "closeMap": "Stäng vägkarta", + "allPaths": "Alla vägar", + "traceRoute": "Trace-rutt", + "mapNote": "Linjerna förbinder repeatrar med kända positioner. De bevisar inte en direkt radiolänk.", + "unavailableMap": "Den här vägen kan inte visas på kartan. Välj en annan väg eller Alla vägar.", + "first": "Första", + "last": "Senaste", + "span": "Mottaget under", + "nodeDialog": "Noddetaljer", + "packetDialog": "Paketanalyserare", + "closeObserver": "Stäng observatörsdetaljer", + "loadMore": "Läs in fler ({{count}} kvar)" + }, + "routeEvidence": { + "recent": "Senaste observationer", + "loading": "Läser in observationer…", + "missing": "Senaste observationer är inte tillgängliga för den här rutten på servern.", + "error": "Kunde inte läsa in senaste observationer. Försök igen.", + "retry": "Försök igen", + "match": "Observationer längs exakt dessa hopp med {{width}} byte per hopp, nyaste först. TRACE-paket ingår inte.", + "caution": "Matchande korta ID:n bevisar inte att det är samma fysiska väg.", + "retention": "Äldre paket försvinner; antalet ”Mottaget” ovan omfattar ruttens hela livstid.", + "unavailable": "Den här rutten kan inte matchas mot paket.", + "empty": "Inga observationer på rutten finns kvar. Äldre observationer kan ha löpt ut.", + "more": "Läs in fler", + "cap": "Visar de 500 senaste observationerna.", + "inspect": "Granska paket" + }, + "channelMessages": { + "select": "Välj en kanal", + "back": "Tillbaka till kanaler", + "hash": "hash: {{hash}}", + "keyKnown": "känd nyckel", + "noKey": "ingen nyckel", + "hashtag": "hashtag", + "keyMissing": "Ingen dekrypteringsnyckel är konfigurerad för den här kanalen.", + "scope": "Scope", + "allScopes": "Alla scopes", + "unknownScope": "Okänd scope", + "inspect": "Granska paket från {{sender}}", + "loading": "Läser in meddelanden…", + "loadingOlder": "Läser in äldre meddelanden… ({{count}} visas)", + "loadOlder": "Läs in äldre meddelanden", + "empty": "Inga meddelanden för den här kanalen.", + "emptyScope": "Inga meddelanden matchar {{scope}}.", + "emptyNoKey": "Meddelanden kan inte dekrypteras utan kanalnyckeln.", + "error": "Kunde inte läsa in meddelanden.", + "retry": "Försök igen", + "viewPacket": "Visa paket", + "heardTimes_one": "Mottaget {{count}} gång", + "heardTimes_other": "Mottaget {{count}} gånger" + }, + "header": { + "settings": "Inställningar", + "github": "GitHub" + }, + "channels": { + "noMatches": "Inga matchande kanaler är inlästa.", + "loadError": "Kunde inte läsa in kanaler.", + "loadingChannels": "Läser in kanaler...", + "retryChannels": "Försök läsa in kanaler igen", + "loadOthers": "Läs in andra kanaler", + "loadMore": "Läs in fler kanaler", + "key": "nyckel", + "filters": "Kanalfilter", + "fieldName": "Namn", + "fieldHash": "Hash", + "keyFilter": "Nyckel", + "hashtagFilter": "Hashtag", + "keyKnownOption": "Känd", + "keyUnknownOption": "Okänd", + "any": "Valfri", + "yes": "Ja", + "no": "Nej" + }, + "map": { + "settings": "Kartinställningar", + "tiles": "Kartplattor", + "nodeType": "Nodtyp", + "nodeTypeLabel": "Nodtyp", + "clustering": "Klustring", + "neighborLines": "Grannlinjer", + "neighborLinesLabel": "Grannlinjer", + "areaBorders": "Områdesgränser", + "areaBordersLabel": "Områdesgränser", + "all": "Alla", + "on": "På", + "off": "Av", + "selected": "Vald", + "areaOutline": "Områdeskontur", + "observations": "Observationer", + "fainter": "svagare = mottaget längre tillbaka i tiden", + "copyLink": "Kopiera kartlänk", + "copyLinkLabel": "Kopiera en länk till den här kartvyn", + "liveMap": "Livekarta", + "playFlow": "Starta liveflöde av paket på kartan", + "stopFlow": "Stoppa liveflöde av paket på kartan", + "loadFailed": "Kartan kunde inte läsas in", + "loadFailedHint": "Kontrollera anslutningen och läs in sidan igen", + "style": "Kartstil", + "styles": { + "dark": "Mörk", + "liberty": "Liberty", + "positron": "Ljus" + }, + "controls": { + "toggleAttribution": "Visa/dölj källangivelse", + "mapFeedback": "Kartfeedback", + "map": "Karta", + "resetBearing": "Dra för att rotera kartan, klicka för att återställa norr", + "zoomIn": "Zooma in", + "zoomOut": "Zooma ut", + "closePopup": "Stäng popup" + } + }, + "nodeFilters": { + "label": "Nodfilter", + "type": "Typ", + "multibytePaths": "Flerbytevägar", + "multibyteTraces": "Flerbytespårningar", + "scope": "Scope", + "any": "Valfri", + "yes": "Ja", + "no": "Nej", + "fieldName": "Namn", + "fieldPubkey": "Publik nyckel", + "all": "Alla" + }, + "packetAnalyzer": { + "title": "Paketanalyserare", + "close": "Stäng analyseraren", + "empty": "Välj ett paket att analysera", + "summary": "Sammanfattning", + "rawPacket": "Råpaket", + "structure": "Paketstruktur", + "headerByte": "Headerbyte", + "ver": "Ver", + "type": "Typ", + "route": "Rutt", + "transportCodes": "Transportkoder", + "scopeCode": "Scope-kod", + "noKnownScope": "ingen känd scope", + "code2": "Kod 2", + "pathLength": "Väglängd", + "hashSize": "Hashstorlek", + "pathData": "Vägdata", + "originPubkey": "Ursprunglig publik nyckel", + "payloadBreakdown": "Nyttolastens uppbyggnad", + "payloadData": "Nyttolastdata", + "bytes_one": "{{count}} byte", + "bytes_other": "{{count}} byte", + "bits": { + "ver": "ver", + "type": "typ", + "route": "rutt", + "hash": "hash={{size}}B", + "hops": "hopp={{value}}", + "loc": "pos", + "name": "namn" + }, + "payload": { + "yes": "Ja", + "no": "Nej", + "encrypted": "Krypterad — nyckel saknas", + "to": "Till", + "from": "Från", + "ciphertext": "Chiffertext", + "decrypted": "Dekrypterad", + "channel": "Kanal", + "publicKey": "Publik nyckel", + "timestamp": "Tidsstämpel", + "signature": "Signatur", + "appFlags": "Appflaggor", + "role": "Roll", + "loc": "Pos", + "name": "Namn", + "location": "Position", + "traceTag": "Trace-tagg", + "authCode": "Autentiseringskod", + "flags": "Flaggor", + "tracePath": "Trace-väg", + "sender": "Avsändare", + "message": "Meddelande", + "attempt": "Försök {{value}}", + "flagsValue": "Flaggor {{value}}", + "data": "Data", + "time": "Tid", + "tag": "Tagg", + "checksum": "Kontrollsumma", + "bundledType": "Inbäddad typ", + "bundledData": "Inbäddade data", + "typeFilter": "Typfilter", + "typeN": "Typ {{value}}", + "any": "valfri", + "since": "Sedan", + "prefixOnly": "Endast prefix", + "nodeType": "Nodtyp", + "requestSnr": "Begär SNR", + "nodeToNode": "(nod-till-nod)", + "keyPrefix": "Nyckelprefix", + "raw": "Rå", + "destHash": "Destinationshash", + "ephemeralKey": "Tillfällig nyckel" + } + }, + "observation": { + "prop": "Prop", + "path": "Väg", + "observer": "Observatör", + "area": "Område", + "heard": "Mottaget", + "hops": "Hopp" + }, + "packetEndpoints": { + "na": "ej tillämpligt" + }, + "routes": { + "columns": { + "area": "Område", + "hops": "Hopp", + "route": "Rutt", + "obs": "Obs", + "firstSeen": "Först sedd", + "lastSeen": "Senast sedd" + }, + "hops_one": "{{count}} hopp", + "hops_other": "{{count}} hopp", + "obs_one": "{{value}} obs", + "obs_other": "{{value}} obs", + "first": "första", + "last": "senaste", + "findPath": "Hitta väg", + "fromPlaceholder": "från hash", + "fromLabel": "Från hash", + "toPlaceholder": "till hash", + "toLabel": "Till hash", + "areas": "Områden", + "search": "Sök", + "clear": "Rensa", + "searching": "Söker…", + "noCross": "Inga rutter mellan dessa områden", + "noMatches": "Inga matchande rutter", + "empty": "Inga rutter" + }, + "routeDetail": { + "title": "Ruttdetaljer", + "summary": "Sammanfattning", + "hops": "Hopp", + "heard": "Mottaget", + "route": "Rutt", + "timestamps": "Tidsstämplar", + "firstSeen": "Först sedd", + "lastSeen": "Senast sedd" + }, + "traces": { + "packets": "Paket", + "packetCount_one": "{{count}} paket", + "packetCount_other": "{{count}} paket", + "noPackets": "Inga paket", + "noPath": "ingen väg", + "unknown": "Okänd", + "analyze": "analysera →", + "first": "Första", + "last": "Senaste", + "tagCount_one": "{{count}} tagg", + "tagCount_other": "{{count}} taggar", + "pkt_one": "{{count}} pkt", + "pkt_other": "{{count}} pkt", + "iata_one": "{{count}} iata", + "iata_other": "{{count}} iata", + "typeLabel": "Spårningstyp", + "typeHint": "Filtrerar hela taggar: TRACE om något paket i taggen har flera hopp, annars PING. Scope- och tidsfilter matchar taggens första mottagning; antal och tider omfattar alltid hela taggen.", + "all": "Alla", + "trace": "Trace", + "ping": "Ping", + "empty": "Inga spårningar" + }, + "loadingPill": { + "nodes": { + "loading_one": "Läser in noder… ({{count}})", + "loading_other": "Läser in noder… ({{count}})", + "partial_one": "Vissa noder kunde inte läsas in ({{count}} visas)", + "partial_other": "Vissa noder kunde inte läsas in ({{count}} visas)", + "failed": "Kunde inte läsa in noder" + }, + "routes": { + "loading_one": "Läser in rutter… ({{count}})", + "loading_other": "Läser in rutter… ({{count}})", + "partial_one": "Vissa rutter kunde inte läsas in ({{count}} visas)", + "partial_other": "Vissa rutter kunde inte läsas in ({{count}} visas)", + "failed": "Kunde inte läsa in rutter" + }, + "packets": { + "loading_one": "Läser in paket… ({{count}})", + "loading_other": "Läser in paket… ({{count}})", + "partial_one": "Vissa paket kunde inte läsas in ({{count}} visas)", + "partial_other": "Vissa paket kunde inte läsas in ({{count}} visas)", + "failed": "Kunde inte läsa in paket" + }, + "messages": { + "loading_one": "Läser in meddelanden… ({{count}})", + "loading_other": "Läser in meddelanden… ({{count}})", + "partial_one": "Vissa meddelanden kunde inte läsas in ({{count}} visas)", + "partial_other": "Vissa meddelanden kunde inte läsas in ({{count}} visas)", + "failed": "Kunde inte läsa in meddelanden" + }, + "observers": { + "loading_one": "Läser in observatörer… ({{count}})", + "loading_other": "Läser in observatörer… ({{count}})", + "partial_one": "Vissa observatörer kunde inte läsas in ({{count}} visas)", + "partial_other": "Vissa observatörer kunde inte läsas in ({{count}} visas)", + "failed": "Kunde inte läsa in observatörer" + } + }, + "talkers": { + "node": "Nod", + "flood": "Flood", + "direct": "Direkt", + "topAdvertisers": "Mest aktiva annonsörer · {{range}}", + "floodDirect": "flood · direkt", + "noAdvertisers": "Inga annonsörer", + "topTalkers": "Mest aktiva sändare · {{range}}", + "byName": "efter namn" + }, + "neighbourGraph": { + "pickRegion": "Välj en region", + "allTooBig": "Alla regioner omfattar över 5 000 noder — välj en region i REGION-väljaren ovan eller begränsa till ett enda område för att visa dess mesh.", + "loadFailed": "Kunde inte läsa in noder", + "loadingMesh": "Läser in mesh…", + "nodes_one": "{{count}} nod", + "nodes_other": "{{count}} noder", + "noNodes": "Inga noder i den här regionen", + "neighborhoodOf": "Grannskap för", + "neighbors_one": "{{count}} granne", + "neighbors_other": "{{count}} grannar", + "clickEmpty": "Klicka på ett tomt område för att visa hela mesh-nätet.", + "showing": "Visar {{cap}} av {{total}} noder", + "narrow": "Begränsa till ett enda område för att visa resten.", + "searchName": "Namn", + "other": "Övriga", + "unknownType": "okänd", + "edgeToday": "{{obs}} obs · sedd idag", + "edgeAgo": "{{obs}} obs · sedd för {{days}} d sedan" + }, + "nodeTypes": { + "companion": "Companion", + "repeater": "Repeater", + "room_server": "Rumsserver", + "sensor": "Sensor" + }, + "observerFilters": { + "label": "Observatörsfilter", + "online": "Online", + "offline": "Offline", + "name": "Namn", + "status": "Status", + "type": "Typ", + "broker": "Broker", + "scope": "Scope" + }, + "charts": { + "uniquePackets": "Unika paket", + "busy": "Beläggning" + }, + "packetList": { + "pathSearchInvalid": "Ange fullständiga hopphashar med samma längd, separerade med blanksteg, kommatecken eller → (t.ex. 7f a4).", + "pathSearchHint": "Söker i den senaste relävägen i inlästa paket. Använd fullständiga hopphashar, t.ex. 7f a4 (blanksteg, kommatecken eller →). Trace-paket exkluderas.", + "selectedPacket": "Valt paket", + "invalidHash": "Ogiltig pakethash.", + "notFound": "Paketet hittades inte.", + "loadFailed": "Kunde inte läsa in det valda paketet.", + "retry": "Försök igen", + "retryLabel": "Försök läsa in valt paket igen", + "outsideResults": "Det valda paketet ligger utanför de inlästa resultaten.", + "openAnalyzer": "Öppna analyseraren", + "loadingSelected": "Läser in valt paket…", + "dismissSelected": "Stäng valt paket", + "dropped_one": "{{count}} paket tappades — data kan vara ofullständiga", + "dropped_other": "{{count}} paket tappades — data kan vara ofullständiga", + "dismiss": "stäng", + "newPackets_one": "{{count}} nytt paket", + "newPackets_other": "{{count}} nya paket", + "scrollToTop": "· rulla längst upp", + "live": "Livepaket", + "noMatching": "Inga matchande paket är inlästa.", + "loadingPackets": "Läser in paket...", + "loadOlder": "Läs in äldre paket" + }, + "packetTable": { + "hash": "Hash", + "obs": "Obs", + "hops": "Hopp", + "summary": "Sammanfattning / Källa → Mål", + "summaryTitle": "Sammanfattning och källa / mål", + "area": "Område", + "age": "Ålder", + "unknown": "Okänd" + }, + "filters": { + "types": "Typer", + "routes": "Rutter", + "observers": "Observatörer", + "scope": "Scope", + "packetFilters": "Paketfilter", + "field": { + "hash": "Hash", + "path": "Senaste väg", + "payload": "Nyttolast" + } + }, + "search": { + "placeholder": "Sök efter {{field}}..." + }, + "errorBoundary": { + "message": "Något gick fel när den här vyn skulle visas.", + "reload": "läs in igen", + "retry": "försök igen" + }, + "splash": { + "tagline": "MeshCore nätverksanalysator" + }, + "units": { + "perDay": "{{value}}/d" + } + } +}