From a899579a020a57cc5687ddb256e948ddf317f922 Mon Sep 17 00:00:00 2001 From: Nikolai Eidsheim Date: Thu, 6 Feb 2025 21:33:17 +0000 Subject: [PATCH 01/21] Started work on norwegian translations --- frontend/src/locales/no.json | 504 +++++++++++++++++++++++++++++++++++ 1 file changed, 504 insertions(+) create mode 100644 frontend/src/locales/no.json diff --git a/frontend/src/locales/no.json b/frontend/src/locales/no.json new file mode 100644 index 0000000..c5bcd5c --- /dev/null +++ b/frontend/src/locales/no.json @@ -0,0 +1,504 @@ +{ + "navbar": { + "adventures": "Eventyr", + "collections": "Samlinger", + "worldtravel": "Verdensreiser", + "map": "Kart", + "users": "Brukere", + "search": "Søk", + "profile": "Profil", + "greeting": "Hei", + "my_adventures": "Mine eventyr", + "my_tags": "Mine tagger", + "tag": "Tagg", + "shared_with_me": "Delt med meg", + "settings": "Innstillinger", + "logout": "Logg ut", + "about": "Om AdventureLog", + "documentation": "Dokumentasjon", + "discord": "Discord", + "language_selection": "Språk", + "support": "Støtte", + "calendar": "Kalender", + "theme_selection": "Temavalg", + "themes": { + "light": "Lys", + "dark": "Mørk", + "night": "Natt", + "forest": "Skog", + "aestheticLight": "Estetisk lys", + "aestheticDark": "Estetisk mørk", + "aqua": "Aqua", + "northernLights": "Nordlys" + } + }, + "about": { + "about": "Om", + "license": "Lisensiert under GPL-3.0-lisensen.", + "source_code": "Kildekode", + "message": "Laget med ❤️ i USA.", + "oss_attributions": "Open Source-bidrag", + "nominatim_1": "Stedsøk og geokoding tilbys av", + "nominatim_2": "Deres data er lisensiert under ODbL-lisensen.", + "other_attributions": "Ytterligere bidrag finnes i README-filen.", + "close": "Lukk" + }, + "home": { + "hero_1": "Oppdag verdens mest spennende eventyr", + "hero_2": "Oppdag og planlegg ditt neste eventyr med AdventureLog. Utforsk fantastiske destinasjoner, lag tilpassede reiseplaner og hold kontakten på farten.", + "go_to": "Gå til AdventureLog", + "key_features": "Nøkkelfunksjoner", + "desc_1": "Oppdag, planlegg og utforsk med letthet", + "desc_2": "AdventureLog er designet for å forenkle reisen din, og gir deg verktøyene og ressursene du trenger for å planlegge, pakke og navigere ditt neste uforglemmelige eventyr.", + "feature_1": "Reiselogg", + "feature_1_desc": "Før logg over dine eventyr med en personlig reiselogg og del opplevelsene dine med venner og familie.", + "feature_2": "Reiseplanlegging", + "feature_2_desc": "Lag enkelt tilpassede reiseplaner og få en dag-for-dag oversikt over turen din.", + "feature_3": "Reisekart", + "feature_3_desc": "Se dine reiser over hele verden med et interaktivt kart og utforsk nye destinasjoner." + }, + "adventures": { + "collection_remove_success": "Eventyr fjernet fra samlingen!", + "collection_remove_error": "Feil ved fjerning av eventyr fra samlingen", + "collection_link_success": "Eventyr lagt til samlingen!", + "no_image_found": "Ingen bilde funnet", + "collection_link_error": "Feil ved kobling av eventyr til samlingen", + "adventure_delete_confirm": "Er du sikker på at du vil slette dette eventyret? Denne handlingen kan ikke angres.", + "checklist_delete_confirm": "Er du sikker på at du vil slette denne sjekklisten? Denne handlingen kan ikke angres.", + "note_delete_confirm": "Er du sikker på at du vil slette denne notatet? Denne handlingen kan ikke angres.", + "transportation_delete_confirm": "Er du sikker på at du vil slette denne transporten? Denne handlingen kan ikke angres.", + "delete_checklist": "Slett sjekkliste", + "delete_note": "Slett notat", + "delete_transportation": "Slett transport", + "open_details": "Åpne detaljer", + "edit_adventure": "Rediger eventyr", + "remove_from_collection": "Fjern fra samling", + "add_to_collection": "Legg til i samling", + "delete": "Slett", + "not_found": "Eventyr ikke funnet", + "not_found_desc": "Eventyret du lette etter ble ikke funnet. Prøv et annet eventyr eller sjekk igjen senere.", + "homepage": "Hjemmeside", + "adventure_details": "Eventyrdetaljer", + "collection": "Samling", + "adventure_type": "Eventyrtype", + "longitude": "Lengdegrad", + "latitude": "Breddegrad", + "visit": "Besøk", + "visits": "Besøk", + "create_new": "Opprett nytt...", + "adventure": "Eventyr", + "count_txt": "resultater som matcher ditt søk", + "sort": "Sorter", + "order_by": "Sorter etter", + "order_direction": "Sorteringsretning", + "ascending": "Stigende", + "descending": "Synkende", + "updated": "Oppdatert", + "name": "Navn", + "date": "Dato", + "activity_types": "Aktivitetstyper", + "tags": "Tagger", + "add_a_tag": "Legg til en tag", + "date_constrain": "Begrens til samlingsdatoer", + "rating": "Vurdering", + "my_images": "Mine bilder", + "add_an_activity": "Legg til en aktivitet", + "show_region_labels": "Vis regionetiketter", + "no_images": "Ingen bilder", + "upload_images_here": "Last opp bilder her", + "share_adventure": "Del dette eventyret!", + "copy_link": "Kopier lenke", + "image": "Bilde", + "upload_image": "Last opp bilde", + "url": "URL", + "fetch_image": "Hent bilde", + "wikipedia": "Wikipedia", + "add_notes": "Legg til notater", + "warning": "Advarsel", + "my_adventures": "Mine eventyr", + "no_linkable_adventures": "Ingen eventyr funnet som kan kobles til denne samlingen.", + "add": "Legg til", + "save_next": "Lagre og neste", + "end_date": "Sluttdato", + "my_visits": "Mine besøk", + "start_date": "Startdato", + "remove": "Fjern", + "location": "Sted", + "search_for_location": "Søk etter et sted", + "clear_map": "Tøm kart", + "search_results": "Søkeresultater", + "no_results": "Ingen resultater funnet", + "wiki_desc": "Henter utdrag fra Wikipedia-artikkelen som matcher eventyrets navn.", + "generate_desc": "Generer beskrivelse", + "public_adventure": "Offentlig eventyr", + "location_information": "Stedsinformasjon", + "link": "Lenke", + "links": "Lenker", + "description": "Beskrivelse", + "sources": "Kilder", + "collection_adventures": "Inkluder eventyr fra samlingen", + "filter": "Filter", + "category_filter": "Kategorifilter", + "category": "Kategori", + "select_adventure_category": "Velg eventyrkategori", + "clear": "Tøm", + "my_collections": "Mine samlinger", + "open_filters": "Åpne filtre", + "close_filters": "Lukk filtre", + "archived_collections": "Arkiverte samlinger", + "share": "Del", + "private": "Privat", + "public": "Offentlig", + "archived": "Arkivert", + "edit_collection": "Rediger samling", + "unarchive": "Avarkiver", + "archive": "Arkiver", + "no_collections_found": "Ingen samlinger funnet å legge dette eventyret til.", + "not_visited": "Ikke besøkt", + "archived_collection_message": "Samling arkivert!", + "unarchived_collection_message": "Samling avarkivert!", + "delete_collection_success": "Samling slettet!", + "delete_collection_warning": "Er du sikker på at du vil slette denne samlingen? Dette vil også slette alle tilknyttede eventyr. Denne handlingen kan ikke angres.", + "cancel": "Avbryt", + "delete_collection": "Slett samling", + "delete_adventure": "Slett eventyr", + "adventure_delete_success": "Eventyr slettet!", + "visited": "Besøkt", + "planned": "Planlagt", + "duration": "Varighet", + "all": "Alle", + "image_removed_success": "Bilde fjernet!", + "image_removed_error": "Feil ved fjerning av bilde", + "no_image_url": "Ingen bilde funnet på den URL-en.", + "image_upload_success": "Bilde lastet opp!", + "image_upload_error": "Feil ved opplasting av bilde", + "dates": "Datoer", + "wiki_image_error": "Feil ved henting av bilde fra Wikipedia", + "start_before_end_error": "Startdato må være før sluttdato", + "activity": "Aktivitet", + "actions": "Handlinger", + "no_end_date": "Vennligst skriv inn en sluttdato", + "see_adventures": "Se eventyr", + "image_fetch_failed": "Kunne ikke hente bilde", + "no_location": "Vennligst skriv inn et sted", + "no_start_date": "Vennligst oppgi en startdato", + "no_description_found": "Ingen beskrivelse funnet", + "adventure_created": "Eventyr opprettet", + "adventure_create_error": "Kunne ikke opprette eventyr", + "adventure_updated": "Eventyr oppdatert", + "adventure_update_error": "Kunne ikke oppdatere eventyr", + "set_to_pin": "Sett til pin", + "category_fetch_error": "Feil ved henting av kategorier", + "new_adventure": "Nytt eventyr", + "basic_information": "Grunnleggende informasjon", + "adventure_not_found": "Det er ingen eventyr å vise. Legg til noen ved å bruke plussknappen nederst til høyre, eller prøv å endre filtrene!", + "no_adventures_found": "Ingen eventyr funnet", + "mark_region_as_visited": "Marker region {region}, {country} som besøkt?", + "mark_visited": "Marker som besøkt", + "error_updating_regions": "Feil ved oppdatering av regioner", + "regions_updated": "Regioner oppdatert", + "visited_region_check": "Sjekk besøkte regioner", + "visited_region_check_desc": "Ved å velge dette vil serveren sjekke alle dine besøkte eventyr og markere regionene de ligger i som besøkt i verdensreiser.", + "update_visited_regions": "Oppdater besøkte regioner", + "update_visited_regions_disclaimer": "Dette kan ta en stund, avhengig av hvor mange eventyr du har besøkt.", + "link_new": "Koble til ny...", + "add_new": "Legg til ny...", + "transportation": "Transport", + "note": "Notat", + "checklist": "Sjekkliste", + "collection_archived": "Denne samlingen har blitt arkivert.", + "visit_link": "Besøk lenke", + "collection_completed": "Du har fullført denne samlingen!", + "collection_stats": "Samlingstatistikk", + "keep_exploring": "Fortsett å utforske!", + "linked_adventures": "Koblede eventyr", + "notes": "Notater", + "checklists": "Sjekklister", + "transportations": "Transportmidler", + "adventure_calendar": "Eventyrkalender", + "day": "Dag", + "itineary_by_date": "Reiseplan etter dato", + "nothing_planned": "Ingenting planlagt for denne dagen. Nyt reisen!", + "copied_to_clipboard": "Kopiert til utklippstavlen!", + "copy_failed": "Kopiering mislyktes", + "show": "Vis", + "hide": "Skjul", + "clear_location": "Fjern plassering", + "starting_airport": "Startflyplass", + "ending_airport": "Sluttflyplass", + "no_location_found": "Ingen plassering funnet", + "from": "Fra", + "to": "Til", + "start": "Start", + "end": "Slutt", + "emoji_picker": "Emoji-velger", + "download_calendar": "Last ned kalender", + "date_information": "Dato informasjon", + "flight_information": "Flyinformasjon", + "out_of_range": "Ikke innenfor reiseplanens datoområde", + "preview": "Forhåndsvisning", + "md_instructions": "Skriv markdown her...", + "days": "dager", + "activities": { + "general": "Generelt 🌍", + "outdoor": "Utendørs 🏞️", + "lodging": "Overnatting 🛌", + "dining": "Spisesteder 🍽️", + "activity": "Aktivitet 🏄", + "attraction": "Attraksjon 🎢", + "shopping": "Shopping 🛍️", + "nightlife": "Natteliv 🌃", + "event": "Arrangement 🎉", + "transportation": "Transport 🚗", + "culture": "Kultur 🎭", + "water_sports": "Vannsport 🚤", + "hiking": "Fotturer 🥾", + "wildlife": "Dyreliv 🦒", + "historical_sites": "Historiske steder 🏛️", + "music_concerts": "Musikk & konserter 🎶", + "fitness": "Trening 🏋️", + "art_museums": "Kunst & museer 🎨", + "festivals": "Festivaler 🎪", + "spiritual_journeys": "Spirituelle reiser 🧘‍♀️", + "volunteer_work": "Frivillig arbeid 🤝", + "other": "Annet" + }, + "worldtravel": { + "country_list": "Landeliste", + "num_countries": "land funnet", + "all": "Alle", + "partially_visited": "Delvis besøkt", + "not_visited": "Ikke besøkt", + "completely_visited": "Fullstendig besøkt", + "all_subregions": "Alle underregioner", + "clear_search": "Fjern søk", + "no_countries_found": "Ingen land funnet" + }, + "auth": { + "username": "Brukernavn", + "password": "Passord", + "forgot_password": "Glemt passord?", + "signup": "Lag ny bruker", + "login_error": "Kunne ikke logge inn med kombinasjonen av brukernavn og passord.", + "login": "Logg inn", + "email": "Email", + "first_name": "Fornavn", + "last_name": "Etternavn", + "confirm_password": "Gjenta passord", + "registration_disabled": "Registrering er deaktivert.", + "profile_picture": "Profilbilde", + "public_profile": "Offentlig Profil", + "public_tooltip": "Med en offentlig profil kan brukere dele samlinger med deg og se profilen din.", + "email_required": "Email er påkrevet", + "new_password": "Nytt Passord (6+ tegn)", + "both_passwords_required": "Begge passord må skrives inn", + "reset_failed": "Kunne ikke resette passord" + }, + "users": { + "no_users_found": "Ingen brukere med offentlig profil funnet." + }, + "settings": { + "update_error": "Kunne ikke oppdatere innstillinger", + "update_success": "Innstillinger oppdatert!", + "settings_page": "Innstillinger", + "account_settings": "Brukerinnstillinger", + "update": "Oppdater", + "password_change": "Bytt passord", + "new_password": "Nytt passord", + "confirm_new_password": "Bekreft nytt passord", + "email_change": "Bytt email", + "current_email": "Nåværende email", + "no_email_set": "Ingen email satt", + "new_email": "Ny email", + "change_password": "Bytt passord", + "login_redir": "You will then be redirected to the login page.", + "token_required": "Token and UID are required for password reset.", + "reset_password": "Reset Password", + "possible_reset": "If the email address you provided is associated with an account, you will receive an email with instructions to reset your password!", + "missing_email": "Please enter an email address", + "submit": "Submit", + "password_does_not_match": "Passwords do not match", + "password_is_required": "Password is required", + "invalid_token": "Token is invalid or has expired", + "about_this_background": "About this background", + "photo_by": "Photo by", + "join_discord": "Join the Discord", + "join_discord_desc": "to share your own photos. Post them in the #travel-share channel.", + "current_password": "Current Password", + "change_password_error": "Unable to change password. Invalid current password or invalid new password.", + "password_change_lopout_warning": "You will be logged out after changing your password.", + "generic_error": "An error occurred while processing your request.", + "email_removed": "Email removed successfully!", + "email_removed_error": "Error removing email", + "verify_email_success": "Email verification sent successfully!", + "verify_email_error": "Error verifying email. Try again in a few minutes.", + "email_added": "Email added successfully!", + "email_added_error": "Error adding email", + "email_set_primary": "Email set as primary successfully!", + "email_set_primary_error": "Error setting email as primary", + "verified": "Verified", + "primary": "Primary", + "not_verified": "Not Verified", + "make_primary": "Make Primary", + "verify": "Verify", + "no_emai_set": "No email set", + "error_change_password": "Error changing password. Please check your current password and try again.", + "mfa_disabled": "Multi-factor authentication disabled successfully!", + "mfa_page_title": "Multi-factor Authentication", + "enable_mfa": "Enable MFA", + "disable_mfa": "Disable MFA", + "mfa_not_enabled": "MFA is not enabled", + "mfa_enabled": "Multi-factor authentication enabled successfully!", + "copy": "Copy", + "recovery_codes": "Recovery Codes", + "recovery_codes_desc": "These are your recovery codes. Keep them safe. You will not be able to see them again.", + "reset_session_error": "Please logout and back in to refresh your session and try again.", + "authenticator_code": "Authenticator Code", + "email_verified": "Email verified successfully!", + "email_verified_success": "Your email has been verified. You can now log in.", + "email_verified_error": "Error verifying email", + "email_verified_erorr_desc": "Your email could not be verified. Please try again.", + "invalid_code": "Invalid MFA code", + "invalid_credentials": "Invalid username or password", + "mfa_required": "Multi-factor authentication is required", + "required": "This field is required", + "add_email_blocked": "You cannot add an email address to an account protected by two-factor authentication.", + "duplicate_email": "This email address is already in use.", + "csrf_failed": "Failed to fetch CSRF token", + "email_taken": "This email address is already in use.", + "username_taken": "This username is already in use." + }, + "collection": { + "collection_created": "Collection created successfully!", + "error_creating_collection": "Error creating collection", + "new_collection": "New Collection", + "create": "Create", + "collection_edit_success": "Collection edited successfully!", + "error_editing_collection": "Error editing collection", + "edit_collection": "Edit Collection", + "public_collection": "Public Collection" + }, + "notes": { + "note_deleted": "Note deleted successfully!", + "note_delete_error": "Error deleting note", + "open": "Open", + "failed_to_save": "Failed to save note", + "note_editor": "Note Editor", + "note_viewer": "Note Viewer", + "editing_note": "Editing note", + "content": "Content", + "save": "Save", + "note_public": "This note is public because it is in a public collection.", + "add_a_link": "Add a link", + "invalid_url": "Invalid URL" + }, + "checklist": { + "checklist_deleted": "Checklist deleted successfully!", + "checklist_delete_error": "Error deleting checklist", + "failed_to_save": "Failed to save checklist", + "checklist_editor": "Checklist Editor", + "checklist_viewer": "Checklist Viewer", + "editing_checklist": "Editing checklist", + "new_checklist": "New Checklist", + "item": "Item", + "items": "Items", + "add_item": "Add Item", + "new_item": "New Item", + "save": "Save", + "checklist_public": "This checklist is public because it is in a public collection.", + "item_cannot_be_empty": "Item cannot be empty", + "item_already_exists": "Item already exists" + }, + "transportation": { + "transportation_deleted": "Transportation deleted successfully!", + "transportation_delete_error": "Error deleting transportation", + "provide_start_date": "Please provide a start date", + "transport_type": "Transport Type", + "type": "Type", + "transportation_added": "Transportation added successfully!", + "error_editing_transportation": "Error editing transportation", + "new_transportation": "New Transportation", + "date_time": "Start Date & Time", + "end_date_time": "End Date & Time", + "flight_number": "Flight Number", + "from_location": "From Location", + "to_location": "To Location", + "edit": "Edit", + "modes": { + "car": "Car", + "plane": "Plane", + "train": "Train", + "bus": "Bus", + "boat": "Boat", + "bike": "Bike", + "walking": "Walking", + "other": "Other" + }, + "transportation_edit_success": "Transportation edited successfully!", + "edit_transportation": "Edit Transportation", + "start": "Start", + "date_and_time": "Date & Time" + }, + "search": { + "adventurelog_results": "AdventureLog Results", + "public_adventures": "Public Adventures", + "online_results": "Online Results" + }, + "map": { + "view_details": "View Details", + "adventure_map": "Adventure Map", + "map_options": "Map Options", + "show_visited_regions": "Show Visited Regions", + "add_adventure_at_marker": "Add New Adventure at Marker", + "clear_marker": "Clear Marker", + "add_adventure": "Add New Adventure" + }, + "share": { + "shared": "Shared", + "with": "with", + "unshared": "Unshared", + "share_desc": "Share this collection with other users.", + "shared_with": "Shared With", + "no_users_shared": "No users shared with", + "not_shared_with": "Not Shared With", + "no_shared_found": "No collections found that are shared with you.", + "set_public": "In order to allow users to share with you, you need your profile set to public.", + "go_to_settings": "Go to settings" + }, + "languages": { + "en": "English", + "de": "German", + "es": "Spanish", + "fr": "French", + "it": "Italian", + "nl": "Dutch", + "sv": "Swedish", + "zh": "Chinese", + "pl": "Polish" + }, + "profile": { + "member_since": "Member since", + "user_stats": "User Stats", + "visited_countries": "Visited Countries", + "visited_regions": "Visited Regions" + }, + "categories": { + "manage_categories": "Manage Categories", + "no_categories_found": "No categories found.", + "edit_category": "Edit Category", + "icon": "Icon", + "update_after_refresh": "The adventure cards will be updated once you refresh the page.", + "select_category": "Select Category", + "category_name": "Category Name" + }, + "dashboard": { + "welcome_back": "Welcome back", + "countries_visited": "Countries Visited", + "total_adventures": "Total Adventures", + "total_visited_regions": "Total Visited Regions", + "recent_adventures": "Recent Adventures", + "no_recent_adventures": "No recent adventures?", + "add_some": "Why not start planning your next adventure? You can add a new adventure by clicking the button below." + } + } + From 47c219affd4a66b26fe9536de149cbac6b8d9d5c Mon Sep 17 00:00:00 2001 From: Nikolai Eidsheim Date: Tue, 1 Apr 2025 22:35:03 +0200 Subject: [PATCH 02/21] Added Norwegian translation --- frontend/src/lib/components/Navbar.svelte | 3 +- frontend/src/locales/no.json | 1081 ++++++++++++--------- frontend/src/routes/+layout.svelte | 3 +- 3 files changed, 608 insertions(+), 479 deletions(-) diff --git a/frontend/src/lib/components/Navbar.svelte b/frontend/src/lib/components/Navbar.svelte index 0e5e4f2..5de5971 100644 --- a/frontend/src/lib/components/Navbar.svelte +++ b/frontend/src/lib/components/Navbar.svelte @@ -54,7 +54,8 @@ sv: 'Svenska', zh: '中文', pl: 'Polski', - ko: '한국어' + ko: '한국어', + no: "Norsk" }; let query: string = ''; diff --git a/frontend/src/locales/no.json b/frontend/src/locales/no.json index c5bcd5c..8b49218 100644 --- a/frontend/src/locales/no.json +++ b/frontend/src/locales/no.json @@ -1,253 +1,283 @@ { "navbar": { - "adventures": "Eventyr", - "collections": "Samlinger", - "worldtravel": "Verdensreiser", - "map": "Kart", - "users": "Brukere", - "search": "Søk", - "profile": "Profil", - "greeting": "Hei", - "my_adventures": "Mine eventyr", - "my_tags": "Mine tagger", - "tag": "Tagg", - "shared_with_me": "Delt med meg", - "settings": "Innstillinger", - "logout": "Logg ut", - "about": "Om AdventureLog", - "documentation": "Dokumentasjon", - "discord": "Discord", - "language_selection": "Språk", - "support": "Støtte", - "calendar": "Kalender", - "theme_selection": "Temavalg", - "themes": { - "light": "Lys", - "dark": "Mørk", - "night": "Natt", - "forest": "Skog", - "aestheticLight": "Estetisk lys", - "aestheticDark": "Estetisk mørk", - "aqua": "Aqua", - "northernLights": "Nordlys" - } + "adventures": "Eventyr", + "collections": "Samlinger", + "worldtravel": "Verdensreiser", + "map": "Kart", + "users": "Brukere", + "search": "Søk", + "profile": "Profil", + "greeting": "Hei", + "my_adventures": "Mine Eventyr", + "my_tags": "Mine Tags", + "tag": "Tag", + "shared_with_me": "Delt med meg", + "settings": "Innstillinger", + "logout": "Logg ut", + "about": "Om AdventureLog", + "documentation": "Dokumentasjon", + "discord": "Discord", + "language_selection": "Språk", + "support": "Støtte", + "calendar": "Kalender", + "theme_selection": "Tema-valg", + "admin_panel": "Admin Panel", + "themes": { + "light": "Lyst", + "dark": "Mørkt", + "night": "Natt", + "forest": "Skog", + "aestheticLight": "Estetisk Lyst", + "aestheticDark": "Estetisk Mørkt", + "aqua": "Aqua", + "northernLights": "Nordlys" + } }, "about": { - "about": "Om", - "license": "Lisensiert under GPL-3.0-lisensen.", - "source_code": "Kildekode", - "message": "Laget med ❤️ i USA.", - "oss_attributions": "Open Source-bidrag", - "nominatim_1": "Stedsøk og geokoding tilbys av", - "nominatim_2": "Deres data er lisensiert under ODbL-lisensen.", - "other_attributions": "Ytterligere bidrag finnes i README-filen.", - "close": "Lukk" + "about": "Om", + "license": "Lisensiert under GPL-3.0-lisensen.", + "source_code": "Kildekode", + "message": "Laget med ❤️ i USA.", + "oss_attributions": "Open Source-attribusjoner", + "nominatim_1": "Stedsøk og geokoding leveres av", + "nominatim_2": "Deres data er lisensiert under ODbL-lisensen.", + "other_attributions": "Ytterligere attribusjoner finnes i README-filen.", + "close": "Lukk" }, "home": { - "hero_1": "Oppdag verdens mest spennende eventyr", - "hero_2": "Oppdag og planlegg ditt neste eventyr med AdventureLog. Utforsk fantastiske destinasjoner, lag tilpassede reiseplaner og hold kontakten på farten.", - "go_to": "Gå til AdventureLog", - "key_features": "Nøkkelfunksjoner", - "desc_1": "Oppdag, planlegg og utforsk med letthet", - "desc_2": "AdventureLog er designet for å forenkle reisen din, og gir deg verktøyene og ressursene du trenger for å planlegge, pakke og navigere ditt neste uforglemmelige eventyr.", - "feature_1": "Reiselogg", - "feature_1_desc": "Før logg over dine eventyr med en personlig reiselogg og del opplevelsene dine med venner og familie.", - "feature_2": "Reiseplanlegging", - "feature_2_desc": "Lag enkelt tilpassede reiseplaner og få en dag-for-dag oversikt over turen din.", - "feature_3": "Reisekart", - "feature_3_desc": "Se dine reiser over hele verden med et interaktivt kart og utforsk nye destinasjoner." + "hero_1": "Oppdag verdens mest spennende eventyr", + "hero_2": "Oppdag og planlegg ditt neste eventyr med AdventureLog. Utforsk fantastiske destinasjoner, lag tilpassede reiseplaner, og hold kontakten på farten.", + "go_to": "Gå til AdventureLog", + "key_features": "Nøkkelfunksjoner", + "desc_1": "Oppdag, planlegg og utforsk med letthet", + "desc_2": "AdventureLog er designet for å forenkle reisen din, og gir deg verktøy og ressurser til å planlegge, pakke og navigere ditt neste uforglemmelige eventyr.", + "feature_1": "Reiselogg", + "feature_1_desc": "Før en personlig reiselogg for eventyrene dine og del opplevelsene dine med venner og familie.", + "feature_2": "Reiseplanlegging", + "feature_2_desc": "Lag enkelt tilpassede reiseplaner og få en dag-for-dag oversikt over turen din.", + "feature_3": "Reisekart", + "feature_3_desc": "Se reisene dine over hele verden med et interaktivt kart og utforsk nye destinasjoner." }, "adventures": { - "collection_remove_success": "Eventyr fjernet fra samlingen!", - "collection_remove_error": "Feil ved fjerning av eventyr fra samlingen", - "collection_link_success": "Eventyr lagt til samlingen!", - "no_image_found": "Ingen bilde funnet", - "collection_link_error": "Feil ved kobling av eventyr til samlingen", - "adventure_delete_confirm": "Er du sikker på at du vil slette dette eventyret? Denne handlingen kan ikke angres.", - "checklist_delete_confirm": "Er du sikker på at du vil slette denne sjekklisten? Denne handlingen kan ikke angres.", - "note_delete_confirm": "Er du sikker på at du vil slette denne notatet? Denne handlingen kan ikke angres.", - "transportation_delete_confirm": "Er du sikker på at du vil slette denne transporten? Denne handlingen kan ikke angres.", - "delete_checklist": "Slett sjekkliste", - "delete_note": "Slett notat", - "delete_transportation": "Slett transport", - "open_details": "Åpne detaljer", - "edit_adventure": "Rediger eventyr", - "remove_from_collection": "Fjern fra samling", - "add_to_collection": "Legg til i samling", - "delete": "Slett", - "not_found": "Eventyr ikke funnet", - "not_found_desc": "Eventyret du lette etter ble ikke funnet. Prøv et annet eventyr eller sjekk igjen senere.", - "homepage": "Hjemmeside", - "adventure_details": "Eventyrdetaljer", - "collection": "Samling", - "adventure_type": "Eventyrtype", - "longitude": "Lengdegrad", - "latitude": "Breddegrad", - "visit": "Besøk", - "visits": "Besøk", - "create_new": "Opprett nytt...", - "adventure": "Eventyr", - "count_txt": "resultater som matcher ditt søk", - "sort": "Sorter", - "order_by": "Sorter etter", - "order_direction": "Sorteringsretning", - "ascending": "Stigende", - "descending": "Synkende", - "updated": "Oppdatert", - "name": "Navn", - "date": "Dato", - "activity_types": "Aktivitetstyper", - "tags": "Tagger", - "add_a_tag": "Legg til en tag", - "date_constrain": "Begrens til samlingsdatoer", - "rating": "Vurdering", - "my_images": "Mine bilder", - "add_an_activity": "Legg til en aktivitet", - "show_region_labels": "Vis regionetiketter", - "no_images": "Ingen bilder", - "upload_images_here": "Last opp bilder her", - "share_adventure": "Del dette eventyret!", - "copy_link": "Kopier lenke", - "image": "Bilde", - "upload_image": "Last opp bilde", - "url": "URL", - "fetch_image": "Hent bilde", - "wikipedia": "Wikipedia", - "add_notes": "Legg til notater", - "warning": "Advarsel", - "my_adventures": "Mine eventyr", - "no_linkable_adventures": "Ingen eventyr funnet som kan kobles til denne samlingen.", - "add": "Legg til", - "save_next": "Lagre og neste", - "end_date": "Sluttdato", - "my_visits": "Mine besøk", - "start_date": "Startdato", - "remove": "Fjern", - "location": "Sted", - "search_for_location": "Søk etter et sted", - "clear_map": "Tøm kart", - "search_results": "Søkeresultater", - "no_results": "Ingen resultater funnet", - "wiki_desc": "Henter utdrag fra Wikipedia-artikkelen som matcher eventyrets navn.", - "generate_desc": "Generer beskrivelse", - "public_adventure": "Offentlig eventyr", - "location_information": "Stedsinformasjon", - "link": "Lenke", - "links": "Lenker", - "description": "Beskrivelse", - "sources": "Kilder", - "collection_adventures": "Inkluder eventyr fra samlingen", - "filter": "Filter", - "category_filter": "Kategorifilter", - "category": "Kategori", - "select_adventure_category": "Velg eventyrkategori", - "clear": "Tøm", - "my_collections": "Mine samlinger", - "open_filters": "Åpne filtre", - "close_filters": "Lukk filtre", - "archived_collections": "Arkiverte samlinger", - "share": "Del", - "private": "Privat", - "public": "Offentlig", - "archived": "Arkivert", - "edit_collection": "Rediger samling", - "unarchive": "Avarkiver", - "archive": "Arkiver", - "no_collections_found": "Ingen samlinger funnet å legge dette eventyret til.", - "not_visited": "Ikke besøkt", - "archived_collection_message": "Samling arkivert!", - "unarchived_collection_message": "Samling avarkivert!", - "delete_collection_success": "Samling slettet!", - "delete_collection_warning": "Er du sikker på at du vil slette denne samlingen? Dette vil også slette alle tilknyttede eventyr. Denne handlingen kan ikke angres.", - "cancel": "Avbryt", - "delete_collection": "Slett samling", - "delete_adventure": "Slett eventyr", - "adventure_delete_success": "Eventyr slettet!", - "visited": "Besøkt", - "planned": "Planlagt", - "duration": "Varighet", - "all": "Alle", - "image_removed_success": "Bilde fjernet!", - "image_removed_error": "Feil ved fjerning av bilde", - "no_image_url": "Ingen bilde funnet på den URL-en.", - "image_upload_success": "Bilde lastet opp!", - "image_upload_error": "Feil ved opplasting av bilde", - "dates": "Datoer", - "wiki_image_error": "Feil ved henting av bilde fra Wikipedia", - "start_before_end_error": "Startdato må være før sluttdato", - "activity": "Aktivitet", - "actions": "Handlinger", - "no_end_date": "Vennligst skriv inn en sluttdato", - "see_adventures": "Se eventyr", - "image_fetch_failed": "Kunne ikke hente bilde", - "no_location": "Vennligst skriv inn et sted", - "no_start_date": "Vennligst oppgi en startdato", - "no_description_found": "Ingen beskrivelse funnet", - "adventure_created": "Eventyr opprettet", - "adventure_create_error": "Kunne ikke opprette eventyr", - "adventure_updated": "Eventyr oppdatert", - "adventure_update_error": "Kunne ikke oppdatere eventyr", - "set_to_pin": "Sett til pin", - "category_fetch_error": "Feil ved henting av kategorier", - "new_adventure": "Nytt eventyr", - "basic_information": "Grunnleggende informasjon", - "adventure_not_found": "Det er ingen eventyr å vise. Legg til noen ved å bruke plussknappen nederst til høyre, eller prøv å endre filtrene!", - "no_adventures_found": "Ingen eventyr funnet", - "mark_region_as_visited": "Marker region {region}, {country} som besøkt?", - "mark_visited": "Marker som besøkt", - "error_updating_regions": "Feil ved oppdatering av regioner", - "regions_updated": "Regioner oppdatert", - "visited_region_check": "Sjekk besøkte regioner", - "visited_region_check_desc": "Ved å velge dette vil serveren sjekke alle dine besøkte eventyr og markere regionene de ligger i som besøkt i verdensreiser.", - "update_visited_regions": "Oppdater besøkte regioner", - "update_visited_regions_disclaimer": "Dette kan ta en stund, avhengig av hvor mange eventyr du har besøkt.", - "link_new": "Koble til ny...", - "add_new": "Legg til ny...", - "transportation": "Transport", - "note": "Notat", - "checklist": "Sjekkliste", - "collection_archived": "Denne samlingen har blitt arkivert.", - "visit_link": "Besøk lenke", - "collection_completed": "Du har fullført denne samlingen!", - "collection_stats": "Samlingstatistikk", - "keep_exploring": "Fortsett å utforske!", - "linked_adventures": "Koblede eventyr", - "notes": "Notater", - "checklists": "Sjekklister", - "transportations": "Transportmidler", - "adventure_calendar": "Eventyrkalender", - "day": "Dag", - "itineary_by_date": "Reiseplan etter dato", - "nothing_planned": "Ingenting planlagt for denne dagen. Nyt reisen!", - "copied_to_clipboard": "Kopiert til utklippstavlen!", - "copy_failed": "Kopiering mislyktes", - "show": "Vis", - "hide": "Skjul", - "clear_location": "Fjern plassering", - "starting_airport": "Startflyplass", - "ending_airport": "Sluttflyplass", - "no_location_found": "Ingen plassering funnet", - "from": "Fra", - "to": "Til", - "start": "Start", - "end": "Slutt", - "emoji_picker": "Emoji-velger", - "download_calendar": "Last ned kalender", - "date_information": "Dato informasjon", - "flight_information": "Flyinformasjon", - "out_of_range": "Ikke innenfor reiseplanens datoområde", - "preview": "Forhåndsvisning", - "md_instructions": "Skriv markdown her...", - "days": "dager", - "activities": { + "collection_remove_success": "Eventyret ble fjernet fra samlingen!", + "collection_remove_error": "Feil ved fjerning av eventyr fra samling", + "collection_link_success": "Eventyret ble lagt til samlingen!", + "no_image_found": "Ingen bilde funnet", + "collection_link_error": "Feil ved lenking av eventyr til samling", + "adventure_delete_confirm": "Er du sikker på at du vil slette dette eventyret? Denne handlingen kan ikke angres.", + "checklist_delete_confirm": "Er du sikker på at du vil slette denne sjekklisten? Denne handlingen kan ikke angres.", + "note_delete_confirm": "Er du sikker på at du vil slette dette notatet? Denne handlingen kan ikke angres.", + "transportation_delete_confirm": "Er du sikker på at du vil slette dette transportmiddelet? Denne handlingen kan ikke angres.", + "lodging_delete_confirm": "Er du sikker på at du vil slette dette overnattingsstedet? Denne handlingen kan ikke angres.", + "delete_checklist": "Slett sjekkliste", + "delete_note": "Slett notat", + "delete_transportation": "Slett transport", + "delete_lodging": "Slett overnatting", + "open_details": "Åpne detaljer", + "edit_adventure": "Rediger eventyr", + "remove_from_collection": "Fjern fra samling", + "add_to_collection": "Legg til i samling", + "delete": "Slett", + "not_found": "Fant ikke eventyret", + "not_found_desc": "Eventyret du leter etter, ble ikke funnet. Vennligst prøv et annet eventyr eller kom tilbake senere.", + "homepage": "Hjemmeside", + "adventure_details": "Eventyrdetaljer", + "collection": "Samling", + "adventure_type": "Eventyrtype", + "longitude": "Lengdegrad", + "latitude": "Breddegrad", + "visit": "Besøk", + "visits": "Besøk", + "create_new": "Opprett nytt...", + "adventure": "Eventyr", + "count_txt": "resultater som samsvarer med søket ditt", + "sort": "Sorter", + "order_by": "Sorter etter", + "order_direction": "Sorteringsretning", + "ascending": "Stigende", + "descending": "Synkende", + "updated": "Oppdatert", + "name": "Navn", + "date": "Dato", + "activity_types": "Aktivitetstyper", + "tags": "Tags", + "add_a_tag": "Legg til en tag", + "date_constrain": "Begrens til samlingsdatoer", + "rating": "Vurdering", + "my_images": "Mine bilder", + "add_an_activity": "Legg til en aktivitet", + "show_region_labels": "Vis regionetiketter", + "no_images": "Ingen bilder", + "upload_images_here": "Last opp bilder her", + "share_adventure": "Del dette eventyret!", + "copy_link": "Kopier lenke", + "image": "Bilde", + "upload_image": "Last opp bilde", + "open_in_maps": "Åpne i kart", + "url": "URL", + "fetch_image": "Hent bilde", + "wikipedia": "Wikipedia", + "add_notes": "Legg til notater", + "warning": "Advarsel", + "my_adventures": "Mine eventyr", + "no_linkable_adventures": "Ingen eventyr funnet som kan legges til denne samlingen.", + "add": "Legg til", + "save_next": "Lagre og fortsett", + "end_date": "Sluttdato", + "my_visits": "Mine besøk", + "start_date": "Startdato", + "remove": "Fjern", + "location": "Plassering", + "search_for_location": "Søk etter sted", + "clear_map": "Tøm kart", + "search_results": "Søkeresultater", + "no_results": "Ingen resultater funnet", + "wiki_desc": "Henter utdrag fra Wikipedia-artikkelen som samsvarer med navnet på eventyret.", + "attachments": "Vedlegg", + "attachment": "Vedlegg", + "images": "Bilder", + "primary": "Primær", + "view_attachment": "Vis vedlegg", + "generate_desc": "Generer beskrivelse", + "public_adventure": "Offentlig eventyr", + "location_information": "Plasseringsinformasjon", + "link": "Lenke", + "links": "Lenker", + "description": "Beskrivelse", + "sources": "Kilder", + "collection_adventures": "Inkluder eventyr i samlinger", + "filter": "Filter", + "category_filter": "Kategorifilter", + "category": "Kategori", + "select_adventure_category": "Velg eventyrkategori", + "clear": "Tøm", + "my_collections": "Mine samlinger", + "open_filters": "Åpne filtre", + "close_filters": "Lukk filtre", + "archived_collections": "Arkiverte samlinger", + "share": "Del", + "private": "Privat", + "public": "Offentlig", + "archived": "Arkivert", + "edit_collection": "Rediger samling", + "unarchive": "Fjern fra arkiv", + "archive": "Arkiver", + "no_collections_found": "Ingen samlinger funnet for å legge dette eventyret til.", + "not_visited": "Ikke besøkt", + "archived_collection_message": "Samlingen ble arkivert!", + "unarchived_collection_message": "Samlingen ble fjernet fra arkivet!", + "delete_collection_success": "Samlingen ble slettet!", + "delete_collection_warning": "Er du sikker på at du vil slette denne samlingen? Dette vil også slette alle lenkede eventyr. Denne handlingen kan ikke angres.", + "cancel": "Avbryt", + "of": "av", + "delete_collection": "Slett samling", + "delete_adventure": "Slett eventyr", + "adventure_delete_success": "Eventyret ble slettet!", + "visited": "Besøkt", + "planned": "Planlagt", + "duration": "Varighet", + "all": "Alle", + "image_removed_success": "Bilde ble fjernet!", + "image_removed_error": "Feil ved fjerning av bilde", + "no_image_url": "Finner ikke bilde på den oppgitte URL-en.", + "image_upload_success": "Bilde opplastet!", + "image_upload_error": "Feil ved opplasting av bilde", + "dates": "Datoer", + "wiki_image_error": "Feil ved henting av bilde fra Wikipedia", + "start_before_end_error": "Startdato må være før sluttdato", + "activity": "Aktivitet", + "actions": "Handlinger", + "no_end_date": "Vennligst angi en sluttdato", + "see_adventures": "Se eventyr", + "image_fetch_failed": "Kunne ikke hente bilde", + "no_location": "Vennligst angi et sted", + "no_start_date": "Vennligst angi en startdato", + "no_description_found": "Fant ingen beskrivelse", + "adventure_created": "Eventyr opprettet", + "adventure_create_error": "Kunne ikke opprette eventyr", + "lodging": "Overnatting", + "create_adventure": "Opprett eventyr", + "adventure_updated": "Eventyr oppdatert", + "adventure_update_error": "Kunne ikke oppdatere eventyr", + "set_to_pin": "Fest", + "category_fetch_error": "Feil ved henting av kategorier", + "new_adventure": "Nytt eventyr", + "basic_information": "Grunnleggende informasjon", + "no_adventures_to_recommendations": "Ingen eventyr funnet. Legg til minst ett eventyr for å få anbefalinger.", + "display_name": "Visningsnavn", + "adventure_not_found": "Det finnes ingen eventyr å vise. Legg til noen ved å trykke på plusstegnet nederst til høyre, eller prøv å endre filtre!", + "no_adventures_found": "Ingen eventyr funnet", + "mark_region_as_visited": "Merk regionen {region}, {country} som besøkt?", + "mark_visited": "Merk som besøkt", + "error_updating_regions": "Feil ved oppdatering av regioner", + "regions_updated": "regioner oppdatert", + "cities_updated": "byer oppdatert", + "visited_region_check": "Sjekk besøkte regioner", + "visited_region_check_desc": "Ved å markere denne, vil serveren sjekke alle dine besøkte eventyr og markere regionene de befinner seg i som besøkt i verdensreiser.", + "update_visited_regions": "Oppdater besøkte regioner", + "update_visited_regions_disclaimer": "Dette kan ta litt tid avhengig av hvor mange eventyr du har besøkt.", + "link_new": "Lenk ny...", + "add_new": "Legg til ny...", + "transportation": "Transport", + "note": "Notat", + "checklist": "Sjekkliste", + "collection_archived": "Denne samlingen er arkivert.", + "visit_link": "Besøk lenke", + "collection_completed": "Du har fullført denne samlingen!", + "collection_stats": "Samlingsstatistikk", + "keep_exploring": "Fortsett å utforske!", + "linked_adventures": "Lenkede eventyr", + "notes": "Notater", + "checklists": "Sjekklister", + "transportations": "Transportmidler", + "adventure_calendar": "Eventyrkalender", + "day": "Dag", + "itineary_by_date": "Reiseplan etter dato", + "nothing_planned": "Ingenting planlagt denne dagen. Nyt reisen!", + "copied_to_clipboard": "Kopiert til utklippstavlen!", + "copy_failed": "Kopiering mislyktes", + "show": "Vis", + "hide": "Skjul", + "clear_location": "Fjern sted", + "starting_airport": "Avreiseflyplass", + "ending_airport": "Ankomsflyplass", + "no_location_found": "Ingen sted funnet", + "from": "Fra", + "to": "Til", + "will_be_marked": "vil bli markert som besøkt når eventyret er lagret.", + "start": "Start", + "end": "Slutt", + "show_map": "Vis kart", + "emoji_picker": "Emoji-velger", + "download_calendar": "Last ned kalender", + "date_information": "Dato-informasjon", + "flight_information": "Flyinformasjon", + "out_of_range": "Ikke i reiseplandatoer", + "preview": "Forhåndsvisning", + "finding_recommendations": "Oppdager skjulte perler for ditt neste eventyr", + "location_details": "Stedsdetaljer", + "city": "By", + "region": "Region", + "md_instructions": "Skriv markdown her...", + "days": "dager", + "attachment_upload_success": "Vedlegg lastet opp!", + "attachment_upload_error": "Feil ved opplasting av vedlegg", + "upload": "Last opp", + "attachment_delete_success": "Vedlegg slettet!", + "attachment_update_success": "Vedlegg oppdatert!", + "attachment_name": "Vedleggsnavn", + "gpx_tip": "Last opp GPX-filer i vedlegg for å se dem på kartet!", + "welcome_map_info": "Offentlige eventyr på denne serveren", + "attachment_update_error": "Feil ved oppdatering av vedlegg", + "activities": { "general": "Generelt 🌍", "outdoor": "Utendørs 🏞️", "lodging": "Overnatting 🛌", - "dining": "Spisesteder 🍽️", + "dining": "Servering 🍽️", "activity": "Aktivitet 🏄", "attraction": "Attraksjon 🎢", "shopping": "Shopping 🛍️", - "nightlife": "Natteliv 🌃", + "nightlife": "Uteliv 🌃", "event": "Arrangement 🎉", "transportation": "Transport 🚗", "culture": "Kultur 🎭", @@ -255,250 +285,347 @@ "hiking": "Fotturer 🥾", "wildlife": "Dyreliv 🦒", "historical_sites": "Historiske steder 🏛️", - "music_concerts": "Musikk & konserter 🎶", + "music_concerts": "Musikk og konserter 🎶", "fitness": "Trening 🏋️", - "art_museums": "Kunst & museer 🎨", + "art_museums": "Kunst og museer 🎨", "festivals": "Festivaler 🎪", "spiritual_journeys": "Spirituelle reiser 🧘‍♀️", "volunteer_work": "Frivillig arbeid 🤝", "other": "Annet" - }, - "worldtravel": { - "country_list": "Landeliste", - "num_countries": "land funnet", - "all": "Alle", - "partially_visited": "Delvis besøkt", - "not_visited": "Ikke besøkt", - "completely_visited": "Fullstendig besøkt", - "all_subregions": "Alle underregioner", - "clear_search": "Fjern søk", - "no_countries_found": "Ingen land funnet" - }, - "auth": { - "username": "Brukernavn", - "password": "Passord", - "forgot_password": "Glemt passord?", - "signup": "Lag ny bruker", - "login_error": "Kunne ikke logge inn med kombinasjonen av brukernavn og passord.", - "login": "Logg inn", - "email": "Email", - "first_name": "Fornavn", - "last_name": "Etternavn", - "confirm_password": "Gjenta passord", - "registration_disabled": "Registrering er deaktivert.", - "profile_picture": "Profilbilde", - "public_profile": "Offentlig Profil", - "public_tooltip": "Med en offentlig profil kan brukere dele samlinger med deg og se profilen din.", - "email_required": "Email er påkrevet", - "new_password": "Nytt Passord (6+ tegn)", - "both_passwords_required": "Begge passord må skrives inn", - "reset_failed": "Kunne ikke resette passord" - }, - "users": { - "no_users_found": "Ingen brukere med offentlig profil funnet." - }, - "settings": { - "update_error": "Kunne ikke oppdatere innstillinger", - "update_success": "Innstillinger oppdatert!", - "settings_page": "Innstillinger", - "account_settings": "Brukerinnstillinger", - "update": "Oppdater", - "password_change": "Bytt passord", - "new_password": "Nytt passord", - "confirm_new_password": "Bekreft nytt passord", - "email_change": "Bytt email", - "current_email": "Nåværende email", - "no_email_set": "Ingen email satt", - "new_email": "Ny email", - "change_password": "Bytt passord", - "login_redir": "You will then be redirected to the login page.", - "token_required": "Token and UID are required for password reset.", - "reset_password": "Reset Password", - "possible_reset": "If the email address you provided is associated with an account, you will receive an email with instructions to reset your password!", - "missing_email": "Please enter an email address", - "submit": "Submit", - "password_does_not_match": "Passwords do not match", - "password_is_required": "Password is required", - "invalid_token": "Token is invalid or has expired", - "about_this_background": "About this background", - "photo_by": "Photo by", - "join_discord": "Join the Discord", - "join_discord_desc": "to share your own photos. Post them in the #travel-share channel.", - "current_password": "Current Password", - "change_password_error": "Unable to change password. Invalid current password or invalid new password.", - "password_change_lopout_warning": "You will be logged out after changing your password.", - "generic_error": "An error occurred while processing your request.", - "email_removed": "Email removed successfully!", - "email_removed_error": "Error removing email", - "verify_email_success": "Email verification sent successfully!", - "verify_email_error": "Error verifying email. Try again in a few minutes.", - "email_added": "Email added successfully!", - "email_added_error": "Error adding email", - "email_set_primary": "Email set as primary successfully!", - "email_set_primary_error": "Error setting email as primary", - "verified": "Verified", - "primary": "Primary", - "not_verified": "Not Verified", - "make_primary": "Make Primary", - "verify": "Verify", - "no_emai_set": "No email set", - "error_change_password": "Error changing password. Please check your current password and try again.", - "mfa_disabled": "Multi-factor authentication disabled successfully!", - "mfa_page_title": "Multi-factor Authentication", - "enable_mfa": "Enable MFA", - "disable_mfa": "Disable MFA", - "mfa_not_enabled": "MFA is not enabled", - "mfa_enabled": "Multi-factor authentication enabled successfully!", - "copy": "Copy", - "recovery_codes": "Recovery Codes", - "recovery_codes_desc": "These are your recovery codes. Keep them safe. You will not be able to see them again.", - "reset_session_error": "Please logout and back in to refresh your session and try again.", - "authenticator_code": "Authenticator Code", - "email_verified": "Email verified successfully!", - "email_verified_success": "Your email has been verified. You can now log in.", - "email_verified_error": "Error verifying email", - "email_verified_erorr_desc": "Your email could not be verified. Please try again.", - "invalid_code": "Invalid MFA code", - "invalid_credentials": "Invalid username or password", - "mfa_required": "Multi-factor authentication is required", - "required": "This field is required", - "add_email_blocked": "You cannot add an email address to an account protected by two-factor authentication.", - "duplicate_email": "This email address is already in use.", - "csrf_failed": "Failed to fetch CSRF token", - "email_taken": "This email address is already in use.", - "username_taken": "This username is already in use." - }, - "collection": { - "collection_created": "Collection created successfully!", - "error_creating_collection": "Error creating collection", - "new_collection": "New Collection", - "create": "Create", - "collection_edit_success": "Collection edited successfully!", - "error_editing_collection": "Error editing collection", - "edit_collection": "Edit Collection", - "public_collection": "Public Collection" - }, - "notes": { - "note_deleted": "Note deleted successfully!", - "note_delete_error": "Error deleting note", - "open": "Open", - "failed_to_save": "Failed to save note", - "note_editor": "Note Editor", - "note_viewer": "Note Viewer", - "editing_note": "Editing note", - "content": "Content", - "save": "Save", - "note_public": "This note is public because it is in a public collection.", - "add_a_link": "Add a link", - "invalid_url": "Invalid URL" - }, - "checklist": { - "checklist_deleted": "Checklist deleted successfully!", - "checklist_delete_error": "Error deleting checklist", - "failed_to_save": "Failed to save checklist", - "checklist_editor": "Checklist Editor", - "checklist_viewer": "Checklist Viewer", - "editing_checklist": "Editing checklist", - "new_checklist": "New Checklist", - "item": "Item", - "items": "Items", - "add_item": "Add Item", - "new_item": "New Item", - "save": "Save", - "checklist_public": "This checklist is public because it is in a public collection.", - "item_cannot_be_empty": "Item cannot be empty", - "item_already_exists": "Item already exists" - }, - "transportation": { - "transportation_deleted": "Transportation deleted successfully!", - "transportation_delete_error": "Error deleting transportation", - "provide_start_date": "Please provide a start date", - "transport_type": "Transport Type", - "type": "Type", - "transportation_added": "Transportation added successfully!", - "error_editing_transportation": "Error editing transportation", - "new_transportation": "New Transportation", - "date_time": "Start Date & Time", - "end_date_time": "End Date & Time", - "flight_number": "Flight Number", - "from_location": "From Location", - "to_location": "To Location", - "edit": "Edit", - "modes": { - "car": "Car", - "plane": "Plane", - "train": "Train", - "bus": "Bus", - "boat": "Boat", - "bike": "Bike", - "walking": "Walking", - "other": "Other" - }, - "transportation_edit_success": "Transportation edited successfully!", - "edit_transportation": "Edit Transportation", - "start": "Start", - "date_and_time": "Date & Time" - }, - "search": { - "adventurelog_results": "AdventureLog Results", - "public_adventures": "Public Adventures", - "online_results": "Online Results" - }, - "map": { - "view_details": "View Details", - "adventure_map": "Adventure Map", - "map_options": "Map Options", - "show_visited_regions": "Show Visited Regions", - "add_adventure_at_marker": "Add New Adventure at Marker", - "clear_marker": "Clear Marker", - "add_adventure": "Add New Adventure" - }, - "share": { - "shared": "Shared", - "with": "with", - "unshared": "Unshared", - "share_desc": "Share this collection with other users.", - "shared_with": "Shared With", - "no_users_shared": "No users shared with", - "not_shared_with": "Not Shared With", - "no_shared_found": "No collections found that are shared with you.", - "set_public": "In order to allow users to share with you, you need your profile set to public.", - "go_to_settings": "Go to settings" - }, - "languages": { - "en": "English", - "de": "German", - "es": "Spanish", - "fr": "French", - "it": "Italian", - "nl": "Dutch", - "sv": "Swedish", - "zh": "Chinese", - "pl": "Polish" - }, - "profile": { - "member_since": "Member since", - "user_stats": "User Stats", - "visited_countries": "Visited Countries", - "visited_regions": "Visited Regions" - }, - "categories": { - "manage_categories": "Manage Categories", - "no_categories_found": "No categories found.", - "edit_category": "Edit Category", - "icon": "Icon", - "update_after_refresh": "The adventure cards will be updated once you refresh the page.", - "select_category": "Select Category", - "category_name": "Category Name" - }, - "dashboard": { - "welcome_back": "Welcome back", - "countries_visited": "Countries Visited", - "total_adventures": "Total Adventures", - "total_visited_regions": "Total Visited Regions", - "recent_adventures": "Recent Adventures", - "no_recent_adventures": "No recent adventures?", - "add_some": "Why not start planning your next adventure? You can add a new adventure by clicking the button below." - } + }, + "lodging_information": "Overnattingsinformasjon", + "price": "Pris", + "reservation_number": "Reservasjonsnummer" + }, + "worldtravel": { + "country_list": "Liste over land", + "num_countries": "land funnet", + "all": "Alle", + "partially_visited": "Delvis besøkt", + "not_visited": "Ikke besøkt", + "completely_visited": "Fullstendig besøkt", + "all_subregions": "Alle underregioner", + "clear_search": "Tøm søk", + "no_countries_found": "Ingen land funnet", + "view_cities": "Vis byer", + "no_cities_found": "Ingen byer funnet", + "visit_to": "Besøk i", + "region_failed_visited": "Kunne ikke markere region som besøkt", + "failed_to_mark_visit": "Kunne ikke markere besøk i", + "visit_remove_failed": "Kunne ikke fjerne besøk", + "removed": "fjernet", + "failed_to_remove_visit": "Kunne ikke fjerne besøk i", + "marked_visited": "markert som besøkt", + "regions_in": "Regioner i", + "region_stats": "Regionstatistikk", + "all_visited": "Du har besøkt alle regionene i", + "cities": "byer" + }, + "auth": { + "username": "Brukernavn", + "password": "Passord", + "forgot_password": "Glemt passord?", + "signup": "Registrer deg", + "login_error": "Kan ikke logge inn med oppgitte legitimasjon.", + "login": "Logg inn", + "email": "E-post", + "first_name": "Fornavn", + "last_name": "Etternavn", + "confirm_password": "Bekreft passord", + "registration_disabled": "Registrering er for øyeblikket deaktivert.", + "profile_picture": "Profilbilde", + "public_profile": "Offentlig profil", + "public_tooltip": "Med en offentlig profil kan brukere dele samlinger med deg og se profilen din på brukersiden.", + "email_required": "E-post kreves", + "new_password": "Nytt passord (6+ tegn)", + "both_passwords_required": "Begge passord er påkrevd", + "reset_failed": "Kunne ikke tilbakestille passord", + "or_3rd_party": "Eller logg inn med en tredjepartstjeneste", + "no_public_adventures": "Ingen offentlige eventyr funnet", + "no_public_collections": "Ingen offentlige samlinger funnet", + "user_adventures": "Brukerens eventyr", + "user_collections": "Brukerens samlinger" + }, + "users": { + "no_users_found": "Ingen brukere med offentlig profil funnet." + }, + "settings": { + "update_error": "Feil ved oppdatering av innstillinger", + "update_success": "Innstillinger oppdatert!", + "settings_page": "Innstillingsside", + "account_settings": "Brukerkontoinnstillinger", + "update": "Oppdater", + "no_verified_email_warning": "Du må ha en verifisert e-postadresse for å aktivere tofaktorautentisering.", + "password_change": "Bytt passord", + "new_password": "Nytt passord", + "confirm_new_password": "Bekreft nytt passord", + "email_change": "Bytt e-post", + "current_email": "Nåværende e-post", + "no_email_set": "Ingen e-post angitt", + "new_email": "Ny e-post", + "change_password": "Bytt passord", + "login_redir": "Du blir da omdirigert til innloggingssiden.", + "token_required": "Token og UID kreves for tilbakestilling av passord.", + "reset_password": "Tilbakestill passord", + "possible_reset": "Hvis e-postadressen du oppga er knyttet til en konto, vil du motta en e-post med instruksjoner om å tilbakestille passordet ditt!", + "missing_email": "Vennligst skriv inn en e-postadresse", + "submit": "Send inn", + "password_does_not_match": "Passordene samsvarer ikke", + "password_is_required": "Passord er påkrevd", + "invalid_token": "Token er ugyldig eller utløpt", + "about_this_background": "Om denne bakgrunnen", + "photo_by": "Foto av", + "join_discord": "Bli med på Discord", + "join_discord_desc": "for å dele dine egne bilder. Legg dem ut i #travel-share-kanalen.", + "current_password": "Nåværende passord", + "change_password_error": "Kan ikke endre passord. Ugyldig nåværende passord eller ugyldig nytt passord.", + "password_change_lopout_warning": "Du vil bli logget ut etter å ha endret passordet.", + "generic_error": "En feil oppsto under behandlingen av forespørselen din.", + "email_removed": "E-post fjernet!", + "email_removed_error": "Feil ved fjerning av e-post", + "verify_email_success": "E-postbekreftelse sendt!", + "verify_email_error": "Feil ved e-postbekreftelse. Prøv igjen om noen minutter.", + "email_added": "E-post lagt til!", + "email_added_error": "Feil ved legging til e-post", + "email_set_primary": "E-post satt som primær!", + "email_set_primary_error": "Feil ved innstilling av primær e-post", + "verified": "Verifisert", + "primary": "Primær", + "not_verified": "Ikke verifisert", + "make_primary": "Gjør til primær", + "verify": "Verifiser", + "no_emai_set": "Ingen e-post angitt", + "error_change_password": "Feil ved endring av passord. Sjekk ditt nåværende passord og prøv igjen.", + "mfa_disabled": "Tofaktorautentisering er deaktivert!", + "mfa_page_title": "Tofaktorautentisering", + "enable_mfa": "Aktiver MFA", + "disable_mfa": "Deaktiver MFA", + "mfa_not_enabled": "MFA er ikke aktivert", + "mfa_enabled": "Tofaktorautentisering er aktivert!", + "copy": "Kopier", + "recovery_codes": "Gjenopprettingskoder", + "recovery_codes_desc": "Dette er dine gjenopprettingskoder. Oppbevar dem trygt. Du vil ikke kunne se dem igjen.", + "reset_session_error": "Logg ut og logg inn igjen for å oppdatere økten din, og prøv igjen.", + "authenticator_code": "Autentiseringskode", + "email_verified": "E-post verifisert!", + "email_verified_success": "E-posten din er verifisert. Du kan nå logge inn.", + "email_verified_error": "Feil ved verifisering av e-post", + "email_verified_erorr_desc": "E-posten din kunne ikke verifiseres. Vennligst prøv igjen.", + "invalid_code": "Ugyldig MFA-kode", + "invalid_credentials": "Ugyldig brukernavn eller passord", + "mfa_required": "Tofaktorautentisering er påkrevd", + "required": "Dette feltet er påkrevd", + "add_email_blocked": "Du kan ikke legge til en e-postadresse på en konto som er beskyttet av tofaktorautentisering.", + "duplicate_email": "Denne e-postadressen er allerede i bruk.", + "csrf_failed": "Kunne ikke hente CSRF-token", + "email_taken": "Denne e-postadressen er allerede i bruk.", + "username_taken": "Dette brukernavnet er allerede i bruk.", + "administration_settings": "Administrasjonsinnstillinger", + "launch_administration_panel": "Åpne administrasjonspanelet", + "social_oidc_auth": "Social og OIDC-autentisering", + "social_auth_desc": "Aktiver eller deaktiver sosiale og OIDC-autentiseringsleverandører for kontoen din. Disse koblingene lar deg logge inn med selvhostede autentiseringstjenester som Authentik eller tredjepartsleverandører som GitHub.", + "social_auth_desc_2": "Disse innstillingene administreres på AdventureLog-serveren og må aktiveres manuelt av administratoren.", + "documentation_link": "Dokumentasjonslenke", + "launch_account_connections": "Åpne kontotilkoblinger", + "password_too_short": "Passordet må være minst 6 tegn", + "add_email": "Legg til e-post", + "password_disable": "Deaktiver passordautentisering", + "password_disable_desc": "Å deaktivere passordautentisering vil hindre deg fra å logge inn med et passord. Du må bruke en sosial eller OIDC-leverandør for å logge inn. Skulle leverandøren din fjernes, vil passordautentisering automatisk bli gjenaktivert, selv om denne innstillingen er deaktivert.", + "disable_password": "Deaktiver passord", + "password_enabled": "Passordautentisering er aktivert", + "password_disabled": "Passordautentisering er deaktivert", + "password_disable_warning": "Akkurat nå er passordautentisering deaktivert. Innlogging via en sosial eller OIDC-leverandør er påkrevd.", + "password_disabled_error": "Feil ved deaktivering av passordautentisering. Sørg for at en sosial eller OIDC-leverandør er koblet til kontoen din.", + "password_enabled_error": "Feil ved aktivering av passordautentisering." + }, + "collection": { + "collection_created": "Samling opprettet!", + "error_creating_collection": "Feil ved oppretting av samling", + "new_collection": "Ny samling", + "create": "Opprett", + "collection_edit_success": "Samling redigert!", + "error_editing_collection": "Feil ved redigering av samling", + "edit_collection": "Rediger samling", + "public_collection": "Offentlig samling" + }, + "notes": { + "note_deleted": "Notat slettet!", + "note_delete_error": "Feil ved sletting av notat", + "open": "Åpne", + "failed_to_save": "Kunne ikke lagre notat", + "note_editor": "Notatredigerer", + "note_viewer": "Notatviser", + "editing_note": "Redigerer notat", + "content": "Innhold", + "save": "Lagre", + "note_public": "Dette notatet er offentlig fordi det er i en offentlig samling.", + "add_a_link": "Legg til en lenke", + "invalid_url": "Ugyldig URL" + }, + "checklist": { + "checklist_deleted": "Sjekkliste slettet!", + "checklist_delete_error": "Feil ved sletting av sjekkliste", + "failed_to_save": "Kunne ikke lagre sjekkliste", + "checklist_editor": "Sjekklisteredigerer", + "checklist_viewer": "Sjekklisteviser", + "editing_checklist": "Redigerer sjekkliste", + "new_checklist": "Ny sjekkliste", + "item": "Punkt", + "items": "Punkter", + "add_item": "Legg til punkt", + "new_item": "Nytt punkt", + "save": "Lagre", + "checklist_public": "Denne sjekklisten er offentlig fordi den er i en offentlig samling.", + "item_cannot_be_empty": "Punktet kan ikke være tomt", + "item_already_exists": "Punktet finnes allerede" + }, + "transportation": { + "transportation_deleted": "Transport slettet!", + "transportation_delete_error": "Feil ved sletting av transport", + "provide_start_date": "Vennligst angi en startdato", + "transport_type": "Transporttype", + "type": "Type", + "transportation_added": "Transport lagt til!", + "error_editing_transportation": "Feil ved redigering av transport", + "new_transportation": "Ny transport", + "date_time": "Startdato og -tid", + "end_date_time": "Sluttdato og -tid", + "flight_number": "Flynummer", + "from_location": "Fra sted", + "to_location": "Til sted", + "fetch_location_information": "Hent stedsinformasjon", + "starting_airport_desc": "Skriv inn avreiseflyplasskode (f.eks. JFK)", + "ending_airport_desc": "Skriv inn ankomsflyplasskode (f.eks. LAX)", + "edit": "Rediger", + "modes": { + "car": "Bil", + "plane": "Fly", + "train": "Tog", + "bus": "Buss", + "boat": "Båt", + "bike": "Sykkel", + "walking": "Går", + "other": "Annet" + }, + "transportation_edit_success": "Transport redigert!", + "edit_transportation": "Rediger transport", + "start": "Start", + "date_and_time": "Dato og tid" + }, + "lodging": { + "lodging_deleted": "Overnatting slettet!", + "lodging_delete_error": "Feil ved sletting av overnatting", + "provide_start_date": "Vennligst angi en startdato", + "lodging_type": "Overnattingstype", + "type": "Type", + "lodging_added": "Overnatting lagt til!", + "error_editing_lodging": "Feil ved redigering av overnatting", + "new_lodging": "Ny overnatting", + "check_in": "Innsjekking", + "check_out": "Utsjekking", + "edit": "Rediger", + "lodging_edit_success": "Overnatting redigert!", + "edit_lodging": "Rediger overnatting", + "start": "Start", + "date_and_time": "Dato og tid", + "hotel": "Hotell", + "hostel": "Hostell", + "resort": "Resort", + "bnb": "Bed & Breakfast", + "campground": "Campingplass", + "cabin": "Hytte", + "apartment": "Leilighet", + "house": "Hus", + "villa": "Villa", + "motel": "Motell", + "other": "Annet", + "reservation_number": "Reservasjonsnummer", + "current_timezone": "Gjeldende tidssone" + }, + "search": { + "adventurelog_results": "AdventureLog-resultater", + "public_adventures": "Offentlige eventyr", + "online_results": "Nettresultater" + }, + "map": { + "view_details": "Vis detaljer", + "adventure_map": "Eventyrkart", + "map_options": "Kartalternativer", + "show_visited_regions": "Vis besøkte regioner", + "add_adventure_at_marker": "Legg til nytt eventyr ved markøren", + "clear_marker": "Fjern markør", + "add_adventure": "Legg til nytt eventyr" + }, + "share": { + "shared": "Delt", + "with": "med", + "unshared": "Udelt", + "share_desc": "Del denne samlingen med andre brukere.", + "shared_with": "Delt med", + "no_users_shared": "Ingen brukere delt med", + "not_shared_with": "Ikke delt med", + "no_shared_found": "Ingen samlinger funnet som er delt med deg.", + "set_public": "For å la brukere dele med deg, må profilen din være offentlig.", + "go_to_settings": "Gå til innstillinger" + }, + "languages": {}, + "profile": { + "member_since": "Medlem siden", + "user_stats": "Brukerstatistikk", + "visited_countries": "Besøkte land", + "visited_regions": "Besøkte regioner", + "visited_cities": "Besøkte byer" + }, + "categories": { + "manage_categories": "Administrer kategorier", + "no_categories_found": "Ingen kategorier funnet.", + "edit_category": "Rediger kategori", + "icon": "Ikon", + "update_after_refresh": "Eventyrkortene vil oppdateres når du oppdaterer siden.", + "select_category": "Velg kategori", + "category_name": "Kategorinavn" + }, + "dashboard": { + "welcome_back": "Velkommen tilbake", + "countries_visited": "Land besøkt", + "total_adventures": "Totalt antall eventyr", + "total_visited_regions": "Totalt antall besøkte regioner", + "total_visited_cities": "Totalt antall besøkte byer", + "recent_adventures": "Nylige eventyr", + "no_recent_adventures": "Ingen nylige eventyr?", + "add_some": "Hvorfor ikke begynne å planlegge ditt neste eventyr? Du kan legge til et nytt eventyr ved å klikke på knappen nedenfor." + }, + "immich": { + "immich": "Immich", + "integration_fetch_error": "Feil ved henting av data fra Immich-integrasjonen", + "integration_missing": "Immich-integrasjonen mangler på backend", + "query_required": "Forespørsel er påkrevd", + "server_down": "Immich-serveren er nede eller utilgjengelig", + "no_items_found": "Ingen elementer funnet", + "imageid_required": "Bilde-ID er påkrevd", + "load_more": "Last mer", + "immich_updated": "Immich-innstillinger oppdatert!", + "immich_enabled": "Immich-integrasjon aktivert!", + "immich_error": "Feil ved oppdatering av Immich-integrasjon", + "immich_disabled": "Immich-integrasjon deaktivert!", + "immich_desc": "Integrer Immich-kontoen din med AdventureLog for å søke i bildebiblioteket ditt og importere bilder til eventyrene dine.", + "integration_enabled": "Integrasjon aktivert", + "disable": "Deaktiver", + "server_url": "Immich-server-URL", + "api_note": "Merk: dette må være URL-en til Immich API-serveren, så den slutter sannsynligvis med /api, med mindre du har en tilpasset konfig.", + "api_key": "Immich API-nøkkel", + "enable_immich": "Aktiver Immich", + "update_integration": "Oppdater integrasjon", + "immich_integration": "Immich-integrasjon", + "localhost_note": "Merk: localhost vil sannsynligvis ikke fungere med mindre du har satt opp docker-nettverk. Det anbefales å bruke serverens IP-adresse eller domenenavn.", + "documentation": "Immich-integrasjonsdokumentasjon" + }, + "recomendations": { + "address": "Adresse", + "phone": "Telefon", + "contact": "Kontakt", + "website": "Nettsted", + "recommendation": "Anbefaling" } - + } + \ No newline at end of file diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte index dc904ea..27dbca4 100644 --- a/frontend/src/routes/+layout.svelte +++ b/frontend/src/routes/+layout.svelte @@ -15,8 +15,9 @@ register('sv', () => import('../locales/sv.json')); register('pl', () => import('../locales/pl.json')); register('ko', () => import('../locales/ko.json')); + register('no', () => import('../locales/no.json')); - let locales = ['en', 'es', 'fr', 'de', 'it', 'zh', 'nl', 'sv', 'pl', 'ko']; + let locales = ['en', 'es', 'fr', 'de', 'it', 'zh', 'nl', 'sv', 'pl', 'ko', 'no']; if (browser) { init({ From 8041f67ba15dce0c5c01ea88165f1e4d9f1e79a8 Mon Sep 17 00:00:00 2001 From: Lars Kiesow Date: Sun, 6 Apr 2025 12:30:59 +0200 Subject: [PATCH 03/21] Document deployment using Caddy This patch adds documentation on how to run AdventureLog with Caddy as a reverse proxy. Signed-off-by: Lars Kiesow --- documentation/.vitepress/config.mts | 1 + documentation/docs/install/caddy.md | 67 +++++++++++++++++++ documentation/docs/install/getting_started.md | 1 + 3 files changed, 69 insertions(+) create mode 100644 documentation/docs/install/caddy.md diff --git a/documentation/.vitepress/config.mts b/documentation/.vitepress/config.mts index ef5cd99..529ecbd 100644 --- a/documentation/.vitepress/config.mts +++ b/documentation/.vitepress/config.mts @@ -80,6 +80,7 @@ export default defineConfig({ link: "/docs/install/nginx_proxy_manager", }, { text: "Traefik", link: "/docs/install/traefik" }, + { text: "Caddy", link: "/docs/install/caddy" }, ], }, ], diff --git a/documentation/docs/install/caddy.md b/documentation/docs/install/caddy.md new file mode 100644 index 0000000..2f99db8 --- /dev/null +++ b/documentation/docs/install/caddy.md @@ -0,0 +1,67 @@ +# Installation with Caddy + +Caddy is a modern HTTP reverse proxy. It automatically integrates with Let's Encrypt (or other certificate providers) to generate TLS certificates for your site. + +As an example, if you want to add Caddy to your Docker compose configuration, add the following service to your `docker-compose-ymö`: + +```yaml +services: + caddy: + image: docker.io/library/caddy:2 + container_name: adventurelog-caddy + restart: unless-stopped + cap_add: + - NET_ADMIN + ports: + - "80:80" + - "443:443" + - "443:443/udp" + volumes: + - ./caddy:/etc/caddy + - caddy_data:/data + - caddy_config:/config + + web: ... + server: ... + db: ... + +volumes: + caddy_data: + caddy_config: +``` + +Since all ingress traffic to the AdventureLog containsers now travels through Caddy, we can also remove the external ports configuration from those containsers in the `docker-compose.yml`. Just delete this configuration: + +```yaml + web: + ports: + - "8016:80" +… + server: + ports: + - "8015:3000" +``` + +That's it for the Docker compose changes. Of course, there are other methods to run Caddy which are equally valid. + +However, we also need to configure Caddy. For this, create a file `./caddy/Caddyfile` in which you configure the requests which are proxied to the frontend and backend respectively and what domain Caddy should request a certificate for: + +``` +adventurelog.example.com { + + @frontend { + not path /media* /admin* /static* /accounts* + } + reverse_proxy @frontend web:3000 + + reverse_proxy server:80 +} +``` + +Once configured, you can start up the containsers: + +```bash +docker compose up +``` + +Your AdventureLog should now be up and running. diff --git a/documentation/docs/install/getting_started.md b/documentation/docs/install/getting_started.md index aa5187c..a74d6a6 100644 --- a/documentation/docs/install/getting_started.md +++ b/documentation/docs/install/getting_started.md @@ -12,3 +12,4 @@ AdventureLog can be installed in a variety of ways. The following are the most c - [Nginx Proxy Manager](nginx_proxy_manager.md) 🛡 - [Traefik](traefik.md) 🚀 +- [Caddy](caddy.md) 🔒 From af8a9acbae4ae6a08659350e4f299b2aa73e3fec Mon Sep 17 00:00:00 2001 From: Lars Kiesow Date: Sun, 6 Apr 2025 14:32:19 +0200 Subject: [PATCH 04/21] Prevent unnecessary redirect when requesting users Opening the share dialog, the frontend is requesting `/auth/users/` which is always redirected to `/auth/users`. That's an unnecessary extra step. This patch makes the front-end request `/auth/users` in the first place. --- frontend/src/lib/components/ShareModal.svelte | 2 +- frontend/src/routes/users/+page.server.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/lib/components/ShareModal.svelte b/frontend/src/lib/components/ShareModal.svelte index 0f4fcec..e3dbc6a 100644 --- a/frontend/src/lib/components/ShareModal.svelte +++ b/frontend/src/lib/components/ShareModal.svelte @@ -62,7 +62,7 @@ if (modal) { modal.showModal(); } - let res = await fetch(`/auth/users/`); + let res = await fetch(`/auth/users`); if (res.ok) { let data = await res.json(); allUsers = data; diff --git a/frontend/src/routes/users/+page.server.ts b/frontend/src/routes/users/+page.server.ts index 3fe2574..3ff1157 100644 --- a/frontend/src/routes/users/+page.server.ts +++ b/frontend/src/routes/users/+page.server.ts @@ -9,7 +9,7 @@ export const load = (async (event) => { return redirect(302, '/login'); } - const res = await fetch(`${serverEndpoint}/auth/users/`, { + const res = await fetch(`${serverEndpoint}/auth/users`, { headers: { Cookie: `sessionid=${sessionId}` } From 8531855f465c7f9eb8f2072c87bd40aa0a7caee7 Mon Sep 17 00:00:00 2001 From: Lars Kiesow Date: Sun, 6 Apr 2025 21:09:27 +0200 Subject: [PATCH 05/21] Enable Browser Navigation in Collections MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If you are in a collection – e.g on “All Linked Items” – and go into an adventure, going back will cause you to end up on the itinerary. This is quite annoying if you have a number of options for a trip linked already but whenever you go back, you have to scroll up again, click on “All Linked Items”, and scroll down again to get to the next adventure in line. This patch makes AdventureLog remember the tab you were in and going back and forth in the browser history will actually work. --- .../src/routes/collections/[id]/+page.svelte | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/frontend/src/routes/collections/[id]/+page.svelte b/frontend/src/routes/collections/[id]/+page.svelte index 56f613a..0e32acb 100644 --- a/frontend/src/routes/collections/[id]/+page.svelte +++ b/frontend/src/routes/collections/[id]/+page.svelte @@ -1,6 +1,6 @@