feat: show travel day count badge on logbook dashboard

This commit is contained in:
2026-06-07 14:22:17 +02:00
parent 97c5173e63
commit 81d3e3b777
10 changed files with 232 additions and 175 deletions
+42 -39
View File
@@ -66,7 +66,7 @@
"copy_phrase": "Kopiere nøkkel",
"enter_recovery": "Skriv inn gjenopprettingsnøkkelen",
"recovery_fallback_warning": "Din Passkey er godkjent, men enheten din støtter ikke maskinvarebasert nøkkelgenerering. Skriv inn gjenopprettingsnøkkelen på 12 ord for å dekryptere loggboken din.",
"recovery_placeholder": "Skriv inn gjenopprettingsnøkkelen din, som består av 12 ord, atskilt med mellomrom...",
"recovery_placeholder": "Skriv inn gjenopprettingskoden din, som består av 12 ord, atskilt med mellomrom...",
"back": "Tilbake",
"decrypting": "Dekryptering...",
"decrypt_logbook": "Dechiffrere loggboken",
@@ -78,7 +78,7 @@
"processing": "Behandler...",
"help": "Hjelp",
"setup_pin_title": "Konfigurere lokal PIN-kode (valgfritt)",
"setup_pin_warning": "Siden enheten din ikke støtter direkte Passkey-nøkkelgenerering, må du ellers oppgi din 12-ords nøkkel hver gang du logger inn på denne enheten. Opprett en lokal PIN-kode for å unngå dette.",
"setup_pin_warning": "Siden enheten din ikke støtter direkte Passkey-nøkkelgenerering, må du ellers oppgi 12-ordsnøkkelen din hver gang du logger inn på denne enheten. Opprett en lokal PIN-kode for å unngå dette.",
"pin_placeholder": "F.eks. 123456",
"pin_label": "Lokal PIN-kode (48 siffer)",
"save_pin": "Lagre PIN-kode og fortsett",
@@ -92,7 +92,7 @@
"error_invalid_host": "Passkey fungerer ikke via 127.0.0.1. Vennligst åpne appen via localhost.",
"use_localhost_link": "Bytt til localhost",
"error_passkey_cancelled": "Passkey-påloggingen ble avbrutt eller har utløpt. Prøv på nytt.",
"error_invalid_rp_id": "Passkey-domenet stemmer ikke (RP-ID). Bruk kun http://localhost:5173 lokalt med RP_ID=localhost i .env.",
"error_invalid_rp_id": "Passkey-domenet passer ikke (RP-ID). Bruk kun http://localhost:5173 lokalt med RP_ID=localhost i .env.",
"error_session_incomplete": "Påloggingen er ufullstendig. Vennligst logg inn på nytt med Passkey.",
"restore_checking": "Økten blir sjekket…",
"restore_title": "Gjenopprett økt",
@@ -143,7 +143,7 @@
"length_m": "Lengde (m)",
"draft_m": "Dypgang (m)",
"air_draft_m": "Høyde (m)",
"invalid_metric": "Ugyldig tallverdi — vennligst skriv inn måleenheten som et desimaltall (f.eks. 12,5).",
"invalid_metric": "Ugyldig tallverdi — vennligst skriv inn lengden som et desimaltall (f.eks. 12,5).",
"port": "Hjemmehavn",
"owner": "Eier",
"charter": "Charterfirma",
@@ -164,7 +164,7 @@
"photo_change": "Bytt bilde",
"photo_delete": "Slett bilde",
"tanks_section": "Tanker (kapasitet)",
"tanks_help": "Valgfritt i liter — muliggjør glidebryter i journalen ved kjente tankstørrelser.",
"tanks_help": "Valgfritt i liter — muliggjør glidebryter i loggboken ved kjente tankstørrelser.",
"freshwater_capacity_l": "Drikkevann (liter)",
"fuel_capacity_l": "Drivstoff (liter)",
"greywater_capacity_l": "Gråvann (liter)",
@@ -189,7 +189,7 @@
"destination": "Ankomsthavn (til)",
"route": "Reise fra/til",
"tanks": "Tanker",
"customize_columns": "Juster kolonner",
"customize_columns": "Tilpass kolonner",
"column_selector_title": "Kolonner som skal vises",
"freshwater": "Ferskvann (liter)",
"fuel": "Drivstoff (liter)",
@@ -208,7 +208,7 @@
"sign_clear": "Slett",
"sign_export_image": "[Signatur]",
"sign_with_passkey": "Del med Passkey",
"sign_passkey_signing": "Passkey blir hentet…",
"sign_passkey_signing": "Passkey blir forespurt…",
"sign_passkey_signed": "Godkjent av {{username}}",
"sign_passkey_export": "Passkey: {{username}} ({{date}})",
"sign_attribution_export": "{{username}} ({{date}})",
@@ -223,7 +223,7 @@
"sign_badge_skipper_title_valid": "Skipper har godkjent",
"sign_badge_skipper_title_invalid": "Skipper-signaturen er ugyldig — innholdet er endret",
"sign_classic_or_passkey": "Valgfritt: klassisk signatur eller Passkey-godkjenning øverst",
"sign_crew_passkey_hint": "Medarbeidere med skriveadgang kan dele via Passkey",
"sign_crew_passkey_hint": "Medlemmer av teamet med skriveadgang kan dele via Passkey",
"sign_offline_hint": "Passkey-godkjenning krever internett — klassisk signatur er mulig uten nett",
"sign_lock_notice": "Etter at loggbokoppføringen er signert, kan den ikke endres (med unntak av bilder) uten at skipperen og mannskapet må signere på nytt.",
"sign_lock_active": "Denne oppføringen er signert. Endringer i loggboken (unntatt bilder) fjerner automatisk skipperens og mannskapets signaturer.",
@@ -251,7 +251,7 @@
"live_actions_label": "Hurtigkampanjer",
"live_stream_label": "Hendelseslogg",
"live_stream_title": "Tidsskrift",
"live_no_events": "Ingen oppføringer ennå — trykk på en aktivitet.",
"live_no_events": "Ingen oppføringer ennå — trykk på en handling.",
"live_motor_start": "Motorstart",
"live_motor_stop": "Motorstopp",
"live_cast_off": "Legge fra land",
@@ -276,9 +276,9 @@
"live_photo_retake_btn": "Ta opp på nytt",
"live_photo_capture_failed": "Opptaket mislyktes. Prøv på nytt.",
"live_photo_open_camera_btn": "Åpne kameraet",
"live_photo_native_hint": "Ta et bilde med enhetens kamera og lagre det deretter her.",
"live_photo_camera_starting": "Kameraet startes…",
"live_photo_camera_denied": "Kameratilgang nektet eller utilgjengelig.",
"live_photo_native_hint": "Ta et bilde med kameraet på enheten og lagre det deretter her.",
"live_photo_camera_starting": "Kameraet starter…",
"live_photo_camera_denied": "Kameraet har ikke tilgang eller er ikke tilgjengelig.",
"live_photo_camera_unavailable": "Denne nettleseren støtter ikke kameraet.",
"live_photo_no_camera": "Denne enheten har ikke kamera.",
"live_photo_error": "Bildet kunne ikke lagres.",
@@ -304,7 +304,7 @@
"live_voice_caption_placeholder": "f.eks. radiokommunikasjon med havnesjefen",
"live_voice_transcribe_action": "Transkribere",
"live_voice_transcribing": "Transkriber...",
"live_voice_transcribe_failed": "Talememoet er lagret, men transkripsjonen mislyktes.",
"live_voice_transcribe_failed": "Talememo lagret, men transkripsjonen mislyktes.",
"live_undo_voice_hint": "Talemelding lagret",
"live_comment_btn": "Kommentar",
"live_comment_placeholder": "Skriv inn fri tekst…",
@@ -353,11 +353,11 @@
"live_stw_entry": "STW {{speed}} kn",
"live_sog_placeholder": "f.eks. 5,2",
"live_stw_placeholder": "f.eks. 4,8",
"live_sog_hint": "Fart over grunn (kn) — GPS-verdien fylles inn automatisk hvis den er tilgjengelig.",
"live_sog_hint": "Fart over grunn (kn) — GPS-verdien fylles ut automatisk hvis den er tilgjengelig.",
"delete_entry": "Slett dag",
"delete_confirm": "Er du sikker på at du vil slette denne reisedagen uten mulighet for å angre?",
"carry_over_tanks_title": "Skal data fra i går overføres?",
"carry_over_tanks_confirm": "Skal starthavn, ferskvann, drivstoff og gråvann ved avreise overføres fra den siste reisedagen?\n\nStarthavn: {{departure}}\nFerskvann: {{fw}} l\nDrivstoff: {{fuel}} l\nGråvann: {{greywater}} l",
"carry_over_tanks_confirm": "Skal starthavn, startnivåer for ferskvann, drivstoff og gråvann overføres fra den siste reisedagen?\n\nStarthavn: {{departure}}\nFerskvann: {{fw}} l\nDrivstoff: {{fuel}} l\nGråvann: {{greywater}} l",
"carry_over_tanks_yes": "Bruk",
"carry_over_tanks_no": "Starte fra 0",
"event_title": "Kronologisk hendelseslogg",
@@ -410,7 +410,7 @@
"gps_quality_excellent": "Sterk GPS-mottak (±{{accuracy}} m)",
"gps_quality_good": "God GPS-mottak (±{{accuracy}} m)",
"gps_quality_fair": "Middels GPS-mottak (±{{accuracy}} m) gå utendørs for bedre mottak.",
"gps_quality_poor": "Svakt GPS-signal (±{{accuracy}} m) sannsynligvis få satellitter. Prøv på nytt utendørs eller sjekk posisjonen.",
"gps_quality_poor": "Svakt GPS-signal (±{{accuracy}} m) antakelig få satellitter. Prøv på nytt utendørs eller sjekk posisjonen.",
"gps_quality_unknown": "GPS-posisjon hentet (nøyaktighet ikke oppgitt av enheten).",
"gps_live_intro_title": "Plassering for Live-Log",
"gps_live_intro_body": "For automatiske posisjonsoppføringer og GPS-knappen trenger appen tilgang til posisjonen din.\n\nTrykk på «Tillat posisjon» bekreft tillatelsen i den neste dialogboksen. Du kan når som helst legge inn posisjonen manuelt under «Posisjon».",
@@ -446,7 +446,7 @@
"ai_summary_offline": "AI-sammendraget krever en internettforbindelse. Du er for øyeblikket frakoblet.",
"photos_title": "Bildevedlegg",
"photo_caption_label": "Bildetekst / Etikett (valgfritt)",
"photo_caption_placeholder": "f.eks. sette seil nær havneinnseilingen",
"photo_caption_placeholder": "f.eks. sette seil nær havneinnløpet",
"photo_btn": "Ta bilde / Last opp",
"photo_camera_btn": "Ta et bilde",
"photo_gallery_btn": "Velg fra galleriet",
@@ -471,12 +471,12 @@
"track_map_speed_slow": "sakte",
"track_map_speed_fast": "raskt",
"nmea_import_title": "Importer NMEA-protokoll",
"nmea_import_intro": "Last inn en .nmea-fil fra loggeren om bord. Appen foreslår loggoppføringer du bestemmer selv hva som skal importeres.",
"nmea_import_intro": "Last inn en .nmea-fil fra loggeren om bord. Appen foreslår loggoppføringer du bestemmer selv hva som skal overføres.",
"nmea_import_btn": "Importer NMEA",
"nmea_file_label": "NMEA-fil",
"nmea_stats": "{{lines}} setninger gjenkjent · Typer: {{types}}",
"nmea_warn_no_position": "Ingen posisjonssetter funnet — spor- og GPS-feltene kan stå tomme.",
"nmea_warn_duplicate_file": "Denne NMEA-filen er allerede importert. Hvis du importerer den samme filen på nytt, vil det føre til dupliserte loggoppføringer.",
"nmea_warn_no_position": "Ingen posisjonssetninger funnet — spor- og GPS-feltene kan stå tomme.",
"nmea_warn_duplicate_file": "Denne NMEA-filen er allerede importert. Hvis du importerer den samme filen på nytt, vil det føre til doble loggoppføringer.",
"nmea_mode_label": "Opprette journaloppføringer",
"nmea_mode_interval": "Etter tidsintervall",
"nmea_mode_change": "Ved vesentlige endringer",
@@ -541,7 +541,10 @@
"logged_in_as": "Logg inn som {{name}}",
"delete_confirm": "Er du sikker på at du vil slette denne loggboken permanent? Alle lokale data og serverkopier vil bli slettet.\n\nTips: Lag først en sikkerhetskopi (.daagbok) under Innstillinger → Sikkerhetskopiering og gjenoppretting, hvis du ønsker å beholde dataene senere.",
"no_logbooks": "Ingen loggbøker funnet. Opprett din første loggbok for å komme i gang!",
"loading": "Loggbøkene lastes inn...",
"loading": "Loggbøker lastes inn...",
"travel_days_count_zero": "Ingen reisedager",
"travel_days_count_one": "1. reisedag",
"travel_days_count_other": "{{count}} Reisedager",
"status_synced": "Synkronisert",
"status_local": "Kun lokal cache",
"delete_btn": "Slett loggboken",
@@ -551,14 +554,14 @@
"role_owner": "Egen loggbok",
"role_owner_hint": "Du er eier og skipper av denne loggboken",
"role_crew": "Tilgang for mannskapet",
"role_crew_hint": "Inviterte loggbok — du kan bidra som besetningsmedlem og skrive under",
"role_crew_hint": "Inviterte loggbok — du kan bidra som besetningsmedlem og signere",
"role_read": "Bare lesing",
"role_read_hint": "Delt loggbok — kun visning, ingen redigering",
"open_profile": "Åpne profilen til {{name}}",
"open_logbook": "Åpne loggboken «{{title}}»",
"edit_title": "Endre navn på loggboken",
"edit_placeholder": "Nytt navn på loggboken",
"edit_success": "Loggboken er omdøpt",
"edit_success": "Loggboken er omdøpt",
"edit_btn": "Endre navn",
"filter_label": "Filtrer loggbøker",
"filter_placeholder": "Navn, år, dato, mannskap eller skip …",
@@ -601,7 +604,7 @@
"add_passkey_failed": "Passkey kunne ikke legges til.",
"remove_passkey_btn": "Fjern Passkey",
"remove_passkey_last_title": "Siste Passkey",
"remove_passkey_last_desc": "Den eneste Passkey kan ikke fjernes uten at du mister tilgangen til kontoen din. For å slette kontoen fullstendig, bruk sikkerhetssonen nederst på denne siden.",
"remove_passkey_last_desc": "Den eneste Passkey kan ikke fjernes uten at du mister tilgangen til kontoen din. For å slette kontoen fullstendig, bruk skjemaet nederst på denne siden.",
"remove_passkey_failed": "Passkey kunne ikke fjernes.",
"remove_passkey_confirm_title": "Passkey fjerne?",
"remove_passkey_confirm_desc": "Denne enheten kan ikke lenger logge seg på med denne Passkey etter dette.",
@@ -646,12 +649,12 @@
"device_title": "Denne enheten",
"device_desc": "Lokal cache, synkroniseringsstatus og hurtiginnlogging i denne nettleseren.",
"device_sync_pending": "{{count}} utestående synkroniseringsoppføringer",
"device_sync_ok": "Alle lokale endringer er synkronisert",
"device_sync_ok": "Alle lokale endringer synkroniseres",
"device_remembered": "Kontoen er lagret på denne enheten for hurtiginnlogging",
"device_not_remembered": "Kontoen er ikke på listen over hurtiginnlogginger",
"device_forget_btn": "Glemt kontoen på denne enheten",
"device_forget_confirm_title": "Fjerne hurtiginnlogging?",
"device_forget_confirm_desc": "Kontoen fjernes fra listen over hurtiginnlogginger på denne enheten. Sesjonen din og de lokale loggene dine beholdes.",
"device_forget_confirm_desc": "Kontoen fjernes fra listen over hurtiginnlogginger på denne enheten. Din økt og lokale logger beholdes.",
"device_forget_confirm_yes": "Fjern",
"device_forget_confirm_no": "Avbryt",
"passkey_label": "Navn på ny Passkey (valgfritt)",
@@ -680,7 +683,7 @@
"owm_key": "OpenWeatherMap API-nøkkel",
"owm_help": "Valgfritt: egen OpenWeatherMap-API-nøkkel. Hvis dette feltet ikke fylles ut, brukes nøkkelen på serversiden fra operatørkonfigurasjonen.",
"ai_title": "AI-funksjoner og personvern",
"ai_desc": "Godkjenn bruk av kunstig intelligens (lokale/skybaserte integrasjoner) for loggbøkene dine.",
"ai_desc": "Godkjenn bruk av kunstig intelligens (lokale/skyintegrasjoner) for loggbøkene dine.",
"ai_help": "Aktivering gjør det mulig å oppsummere reiserapporter automatisk og transkribere talemeldinger. For behandling overføres lydopptak og loggbokoppføringer i kryptert form til OpenRouter. Dataene lagres ikke permanent der.\n\nSiden driften av disse skyressursene medfører kostnader, setter vi pris på frivillig støtte via Ko-fi-donasjonslenken i bunnteksten, slik at vi kan tilby disse funksjonene gratis for alle på lang sikt.",
"ai_enable_label": "Aktiver transkripsjon og daglige sammendrag",
"ai_unauthorized_alert_title": "AI-funksjoner ikke godkjent",
@@ -720,7 +723,7 @@
},
"logbook_vessel": {
"title": "Fartøy for denne loggboken",
"subtitle": "Velg skipet for denne loggboken. Reisedagene bruker seil- og drivstoffdataene for det valgte skipet.",
"subtitle": "Velg skipet for denne loggboken. Reisedagene bruker seil- og drivstoffdataene til det valgte skipet.",
"active_vessel": "Fartøy for denne loggboken",
"no_vessels_in_pool": "Ingen skip i flåten opprett først i brukerprofilen.",
"no_vessel": "Ingen båt valgt",
@@ -734,7 +737,7 @@
"title": "Fast mannskap og skipper",
"subtitle": "Opprett din personellpool her skippere og mannskap for alle loggbøker. Fra denne poolen velger du det aktive mannskapet for hver loggbok og hver reisedag.",
"loading": "Brukerpoolen lastes inn…",
"skippers_section": "Faste skippere",
"skippers_section": "Faste skipper",
"crew_section": "Fast mannskap",
"add_skipper": "Legg til skipper",
"add_crew": "Legg til et besetningsmedlem",
@@ -755,11 +758,11 @@
"unnamed": "Uten navn",
"save": "Lagre mannskap",
"saved": "Mannskapet er lagret i loggboken.",
"selection_only_hint": "Du ser besetningen som eieren har fastsatt (delt loggbok)."
"selection_only_hint": "Du ser besetningen som eieren har angitt (delt loggbok)."
},
"entry_crew": {
"title": "Mannskapet på denne reisedagen",
"subtitle": "Kan avvike fra standarden i loggboken. De påfølgende reisedagene overtar dataene fra dagen før.",
"subtitle": "Kan avvike fra standarden i loggboken. De påfølgende reisedagene overtar opplysningene fra dagen før.",
"day_skipper": "Skipper denne dagen",
"day_crew": "Mannskapet denne dagen",
"no_skipper": "Ingen skipper er valgt",
@@ -823,7 +826,7 @@
"danger_zone_desc": "Når du sletter kontoen din, blir alle dine Passkey-er, loggbøker, skipdata, mannskapsprofiler, reiseoppføringer og E2E-nøkler slettet permanent. Denne handlingen kan ikke angres.",
"delete_account_btn": "Slette kontoen permanent",
"delete_account_confirm_title": "Slette kontoen?",
"delete_account_confirm_desc": "Er du helt sikker på at du vil slette kontoen din og alle tilhørende loggbøker og E2E-krypterte data permanent?",
"delete_account_confirm_desc": "Er du helt sikker på at du ønsker å slette kontoen din og alle tilhørende logger samt E2E-krypterte data permanent?",
"delete_account_confirm_yes": "Ja, slett kontoen og alle opplysningene",
"delete_account_confirm_no": "Avbryt",
"delete_account_failed": "Kontoen kunne ikke slettes. Prøv på nytt.",
@@ -882,9 +885,9 @@
"e2e_title": "End-til-ende-kryptering",
"e2e_body": "Loggboksdataene dine krypteres fra ende til ende. Bare du eller personer som har nøkkelen din kan lese innholdet. Det lagres utelukkende krypterte data på serveren.",
"pwa_title": "Progressiv nettapp (PWA)",
"pwa_body": "Kapteins Daagbok kjører som en progressiv nettapp i nettleseren din og kan installeres på enheten din på samme måte som en innfødt app, men uten appbutikk.",
"pwa_body": "Kapteins Daagbok kjører som en progressiv nettapp i nettleseren din og kan installeres på enheten din på samme måte som en innfødt app, men uten å gå via en app-butikk.",
"storage_title": "Lokal lagring og synkronisering",
"storage_body": "Dataene dine lagres midlertidig lokalt på enheten din (IndexedDB). Når du har en aktiv internettforbindelse, synkroniseres endringene med serveren. Du kan fortsette å jobbe uten nettilgang; synkroniseringen skjer senere.",
"storage_body": "Dataene dine lagres midlertidig lokalt på enheten din (IndexedDB). Når du har en aktiv internettforbindelse, synkroniseres endringene med serveren. Du kan fortsette å jobbe uten nettforbindelse; synkroniseringen skjer senere.",
"free_title": "Gratis og uten reklame",
"free_body": "Kapteins Daagbok er gratis og inneholder ingen reklame.",
"liability_title": "Ansvarsfraskrivelse",
@@ -958,7 +961,7 @@
},
"stats": {
"title": "Statistikk",
"subtitle": "Rangering, forbruk og drivtype på et øyeblikk",
"subtitle": "Rangering, drivstoffforbruk og drivtype på et øyeblikk",
"scope_label": "Analyseområde",
"scope_logbook": "Denne loggboken",
"scope_account": "Alle loggbøker",
@@ -983,7 +986,7 @@
"avg_distance": "Gjennomsnitt per reisedag",
"avg_fuel": "Ø Drivstoff",
"avg_water": "Ø Vann",
"fuel_per_nm": "Drivstoff per nautisk mil",
"fuel_per_nm": "Drivstoff per sjømil",
"fuel_per_motor_hour": "Drivstoff per driftstime",
"daily_fuel_per_motor_hour": "Drivstoffforbruk per maskintime per reisedag",
"fuel_legend": "Drivstoff",
@@ -1004,7 +1007,7 @@
"tour": {
"skip": "Hopp over omvisningen",
"back": "Tilbake",
"next": "Videre",
"next": "Les videre",
"finish": "Ferdig",
"progress": "Trinn {{current}} av {{total}}",
"steps": {
@@ -1054,7 +1057,7 @@
},
"nav_feedback": {
"title": "Send tilbakemelding",
"body": "Gjennom dette skjemaet kan du sende feilmeldinger, forslag eller generell tilbakemelding direkte til prosjektteamet også etter turen, når som helst via ikonet øverst til høyre."
"body": "Gjennom dette skjemaet kan du sende inn feilmeldinger, forslag eller generelle tilbakemeldinger direkte til prosjektteamet også etter turen, når som helst via ikonet øverst til høyre."
},
"nav_profile": {
"title": "Brukerprofilen din",
@@ -1072,7 +1075,7 @@
},
"seo": {
"title": "Kapteins Daagbok Gratis digitalt loggbok for yachter (uten reklame)",
"description": "Gratis, reklamefritt digitalt båtlogg med ende-til-ende-kryptering og Passkey-pålogging. Dokumenter reisedager, GPS-spor, mannskap og båtdata på en sikker måte også offline som PWA.",
"description": "Gratis, reklamefritt digitalt båtloggbok med ende-til-ende-kryptering og Passkey-pålogging. Dokumenter reisedager, GPS-spor, mannskap og båtdata på en sikker måte også offline som PWA.",
"keywords": "Yachtlogg, skipslogg, bordlogg, seiling, Passkey, E2E-kryptering, GPS-spor, maritim logg, gratis, uten reklame, gratis, uten annonser",
"ogImageAlt": "Kapteins Daagbok Logo"
}