diff --git a/src/i18n.ts b/src/i18n.ts index 6c9f5d67..72a68400 100644 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -341,6 +341,7 @@ const enTranslation = { languageFr: 'French', languageNl: 'Dutch', languageZh: 'Chinese', + languageNb: 'Norwegian', font: 'Font', theme: 'Theme', appearance: 'Appearance', @@ -1119,6 +1120,7 @@ const deTranslation = { languageFr: 'Französisch', languageNl: 'Niederländisch', languageZh: 'Chinesisch', + languageNb: 'Norwegisch', font: 'Schriftart', theme: 'Design', appearance: 'Darstellung', @@ -1897,6 +1899,7 @@ const frTranslation = { languageFr: 'Français', languageNl: 'Néerlandais', languageZh: 'Chinois', + languageNb: 'Norvégien', font: 'Police', theme: 'Thème', appearance: 'Apparence', @@ -2675,6 +2678,7 @@ const nlTranslation = { languageFr: 'Frans', languageNl: 'Nederlands', languageZh: 'Chinees', + languageNb: 'Noors', font: 'Lettertype', theme: 'Thema', appearance: 'Weergave', @@ -3449,6 +3453,7 @@ const zhTranslation = { languageFr: '法语', languageNl: '荷兰语', languageZh: '中文', + languageNb: '挪威', font: '字体', theme: '主题', appearance: '外观', @@ -3887,6 +3892,786 @@ const zhTranslation = { } }; +// Norwegian Translations +const nbTranslation = { + sidebar: { + library: 'Bibliotek', + mainstage: 'Hovedscene', + newReleases: 'Nye utgivelser', + allAlbums: 'Alle album', + randomAlbums: 'Tilfeldige album', + artists: 'Artister', + randomMix: 'Tilfeldig miks', + favorites: 'Favoritter', + nowPlaying: 'Spilles nå', + system: 'System', + statistics: 'Statistikk', + settings: 'Innstillinger', + help: 'Hjelp', + expand: 'Utvid sidefelt', + collapse: 'Skjul sidefelt', + updateAvailable: 'Ny versjon er tilgjengelig', + updateReady: '{{version}} er klar', + updateLink: 'Hent nyeste versjon →', + downloadingTracks: 'Bufre {{n}} spor…', + offlineLibrary: 'Frakoblet bibliotek', + genres: 'Sjangere', + playlists: 'Spillelister', + radio: 'Internettradio', + }, + home: { + hero: 'Utvalgt', + starred: 'Personlige favoritter', + recent: 'Nylig lagt til', + mostPlayed: 'Mest spilt', + recentlyPlayed: 'Nylig spilt', + discover: 'Oppdag', + loadMore: 'Last inn flere', + discoverMore: 'Oppdag flere', + discoverArtists: 'Oppdag artister', + discoverArtistsMore: 'Alle artister' + }, + hero: { + eyebrow: 'Utvalgt album', + playAlbum: 'Spill av album', + enqueue: 'Legg til i kø', + enqueueTooltip: 'Legg til hele albumet i køen', + }, + search: { + placeholder: 'Søk etter artist, album eller sang…', + noResults: 'Ingen resultater funnet for "{{query}}"', + artists: 'Artister', + albums: 'Album', + songs: 'Sanger', + clearLabel: 'Fjern søk', + title: 'Søk', + resultsFor: 'Resultater for "{{query}}"', + album: 'Album', + advanced: 'Avansert søk', + advancedSearchTerm: 'Søkeord', + advancedSearchPlaceholder: 'Tittel, album, artist…', + advancedGenre: 'Sjanger', + advancedAllGenres: 'Alle sjangre', + advancedYear: 'År', + advancedYearFrom: 'fra', + advancedYearTo: 'til', + advancedAll: 'Alle', + advancedSearch: 'Søk', + advancedEmpty: 'Skriv inn et søkeord eller velg ett filter for å begynne.', + advancedNoResults: 'Ingen resultater funnet.', + advancedGenreNote: 'Sanger er tilfeldig valgt fra denne sjangeren.', + }, + nowPlaying: { + tooltip: 'Hvem lytter?', + title: 'Hvem lytter?', + loading: 'Laster…', + nobody: 'Ingen lyttere for øyeblikket.', + minutesAgo: '{{n}}m siden', + nothingPlaying: 'Ingenting spiller akkurat å. Start et spor!', + aboutArtist: 'Om artisten', + fromAlbum: 'Fra dette albumet', + viewAlbum: 'Se album', + goToArtist: 'Gå til artist', + readMore: 'Les mer', + showLess: 'Vis mindre', + genreInfo: 'Sjanger', + trackInfo: 'Sporinfo', + }, + contextMenu: { + playNow: 'Spill nå', + playNext: 'Spill neste', + addToQueue: 'Legg til i kø', + enqueueAlbum: 'Legg albumet i kø', + startRadio: 'Start radio', + lfmLove: 'Lik på Last.fm', + lfmUnlove: 'Fjern fra likte på Last.fm', + favorite: 'Favoritt', + favoriteArtist: 'Favorittartist', + favoriteAlbum: 'Favorittalbum', + unfavorite: 'Fjern fra favoritter', + unfavoriteArtist: 'Fjern artist fra favoritter', + unfavoriteAlbum: 'Fjern album fra favoritter', + removeFromQueue: 'Fjern fra kø', + openAlbum: 'Åpne album', + goToArtist: 'Gå til artist', + download: 'Last ned (ZIP)', + addToPlaylist: 'Legg til i spilleliste', + songInfo: 'Sanginfo', + }, + albumDetail: { + back: 'Tilbake', + playAll: 'Spill alt', + enqueue: 'Legg i kø', + enqueueTooltip: 'Legg hele albumet i kø', + artistBio: 'Artistbiografi', + download: 'Last ned (ZIP)', + downloading: 'Laster…', + cacheOffline: 'Gjør tilgjengelig som frakoblet', + offlineCached: 'Tilgjengelig frakoblet', + offlineDownloading: 'Bufrer… ({{n}}/{{total}})', + removeOffline: 'Fjern frakoblet hurtigbuffer', + offlineStorageFull: 'Frakoblet lagring er full (lagringsgrense: {{mb}} MB). Frigjør plass, ved å slette et album fra ditt frakoblede bibliotek, eller øk lagringsgrensen i Innstillinger.', + offlineStorageGoToLibrary: 'Frakoblet bibliotek', + offlineStorageGoToSettings: 'Innstillinger', + favoriteAdd: 'Legg til i favoritter', + favoriteRemove: 'Fjern fra favoritter', + favorite: 'Favoritt', + noBio: 'Ingen biografi er tilgjengelig.', + moreByArtist: 'Mer av {{artist}}', + tracksCount: '{{n}} spor', + goToArtist: 'Gå til {{artist}}', + moreLabelAlbums: 'Flere album på {{label}}', + trackTitle: 'Tittel', + trackArtist: 'Artist', + trackGenre: 'Sjanger', + trackFormat: 'Format', + trackFavorite: 'Favoritt', + trackRating: 'Vurdering', + trackDuration: 'Varighet', + trackTotal: 'Totalt', + columns: 'Kolonner', + notFound: 'Album ble ikke funnet.', + bioModal: 'Artistbiografi', + bioClose: 'Lukk', + ratingLabel: 'Vurdering', + enlargeCover: 'Forstørr', + }, + artistDetail: { + back: 'Tilbake', + albums: 'Album', + album: 'Album', + playAll: 'Spill alt', + shuffle: 'Tilfeldig rekkefølge', + radio: 'Radio', + loading: 'Laster…', + noRadio: 'Ingen lignende spor funnet for denne artisten.', + notFound: 'Artisten ble ikke funnet.', + albumsBy: 'Album fra {{name}}', + topTracks: 'Toppspor', + noAlbums: 'Ingen album funnet.', + trackTitle: 'Tittel', + trackAlbum: 'Album', + trackDuration: 'Varighet', + favoriteAdd: 'Legg til i favoritter', + favoriteRemove: 'Fjern fra favoritter', + favorite: 'Favoritt', + albumCount_one: '{{count}} album', + albumCount_other: '{{count}} album', + openedInBrowser: 'Åpnet i nettleser', + featuredOn: 'Også en del av', + similarArtists: 'Lignende artister', + cacheOffline: 'Lagre diskografi som frakoblet', + offlineCached: 'Diskografi bufret', + offlineDownloading: 'Bufrer… ({{done}}/{{total}} album)', + }, + favorites: { + title: 'Favoritter', + empty: "Du har ikke lagret noen favoritter ennå.", + artists: 'Artister', + albums: 'Album', + songs: 'Sanger', + enqueueAll: 'Legg alle i kø', + playAll: 'Spill alle', + removeSong: 'Fjern fra favoritter', + stations: 'Radiostasjoner', + }, + randomAlbums: { + title: 'Tilfeldige album', + refresh: 'Oppdater', + }, + genres: { + title: 'Sjangre', + genreCount: 'Sjangre', + albumCount_one: '{{count}} album', + albumCount_other: '{{count}} album', + loading: 'Laster sjangre…', + empty: 'Ingen sjangre funnet.', + albumsLoading: 'Laster album…', + albumsEmpty: 'Ingen album funnet for denne sjangeren.', + loadMore: 'Last mer', + back: 'Tilbake', + }, + randomMix: { + title: 'Tilfeldig miks', + remix: 'Remiks', + remixTooltip: 'Last inn nye tilfeldige sanger', + playAll: 'Spill alt', + trackTitle: 'Tittel', + trackArtist: 'Artist', + trackAlbum: 'Album', + trackFavorite: 'Favoritt', + trackDuration: 'Varighet', + favoriteAdd: 'Legg til i favoritter', + favoriteRemove: 'Fjern fra favoritter', + play: 'Spill', + trackGenre: 'Sjanger', + excludeAudiobooks: 'Ekskluder lydbøker og hørespill', + excludeAudiobooksDesc: 'Samsvarer nøkkelord mot sjanger, tittel, album og artist - f.eks. Hørespill, Lydbok, Spoken Word, …', + genreBlocked: 'Nøkkelord blokkert', + genreAddedToBlacklist: 'Lagt til i filterliste', + genreAlreadyBlocked: 'Allerede blokkert', + artistBlocked: 'Artisten er blokkert', + artistAddedToBlacklist: 'Artist er lagt til i filterliste', + artistClickHint: 'Klikk for å blokkere denne artisten', + blacklistToggle: 'Nøkkelordfilter', + genreMixTitle: 'Sjangermiks', + genreMixDesc: 'Topp 20 sjangre etter antall sanger - klikk for å laste en tilfeldig miks', + genreMixLoadMore: 'Last 10 til', + genreMixNoGenres: 'Ingen sjangre funnet på tjeneren.', + shuffleGenres: 'Vis andre sjangre', + filterPanelTitle: 'Filtre', + filterPanelDesc: 'Klikk på en sjanger-tag eller på artistnavnet i sporlisten nedenfor, for å blokkere den fra fremtidige mikser.', + genreClickHint: 'Klikk på en sjanger-tag for å legge den til\nsom et filternøkkelord.\nSamsvarer med sjanger, tittel, album og artist.', + }, + albums: { + title: 'Alle album', + sortByName: 'A–Å (Album)', + sortByArtist: 'A–Å (Artist)', + sortNewest: 'Vis nyeste først', + sortRandom: 'Tilfeldig', + yearFrom: 'Fra', + yearTo: 'Til', + yearFilterClear: 'Tøm år filteret', + yearFilterLabel: 'År', + }, + artists: { + title: 'Artister', + search: 'Søk…', + all: 'Alle', + gridView: 'Rutenettvisning', + listView: 'Listevisning', + imagesOn: 'Artistbilder på - kan øke belastningen på nettverket og applikasjonen', + imagesOff: 'Artistbilder av - viser kun initialer', + loadMore: 'Last flere', + notFound: 'Ingen artister funnet.', + albumCount_one: '{{count}} album', + albumCount_other: '{{count}} album', + }, + login: { + subtitle: 'Din Navidrome-mediaspiller', + serverName: 'Tjenernavn (valgfritt)', + serverNamePlaceholder: 'Mitt mediabibliotek', + serverUrl: 'Tjener-URL', + serverUrlPlaceholder: '192.168.1.100:4533 eller feks. musikk.eksempel.com', + username: 'Brukernavn', + usernamePlaceholder: 'admin', + password: 'Passord', + showPassword: 'Vis passord', + hidePassword: 'Skjul passord', + connect: 'Koble til', + connecting: 'Kobler til…', + connected: 'Tilkoblet!', + error: 'Tilkoblingen mislyktes – vennligst sjekk instillingene.', + urlRequired: 'Vennligst skriv inn en tjeneer-URL.', + savedServers: 'Lagrede servere', + addNew: 'Eller legg til en ny tjener', + }, + connection: { + connected: 'Tilkoblet', + connectedTo: 'Tilkoblet til {{server}}', + disconnected: 'Frakoblet', + disconnectedFrom: 'Kan ikke nå {{server}} - klikk for å sjekke innstillinger', + checking: 'Kobler til…', + extern: 'Ekstern', + offlineTitle: 'Ingen tjenertilkobling', + offlineSubtitle: 'Kan ikke nå {{server}}. Sjekk nettverket eller tjeneren din.', + offlineModeBanner: 'Frakoblet modus - spiller fra lokal hurtigbuffer', + offlineLibraryTitle: 'Frakoblet bibliotek', + offlineLibraryEmpty: 'Ingen album bufret ennå. Kobl deg til nettverket, åpne et album og klikk "Gjør tilgjengelig frakoblet".', + offlineAlbumCount: '{{n}} album', + offlineAlbumCount_plural: '{{n}} album', + offlineFilterAll: 'Alle', + offlineFilterAlbums: 'Album', + offlineFilterPlaylists: 'Spillelister', + offlineFilterArtists: 'Diskografier', + retry: 'Prøv igjen', + lastfmConnected: 'Last.fm tilkoblet som bruker @{{user}}', + lastfmSessionInvalid: 'Sesjonen er ugyldig - klikk her for å koble til på nytt', + }, + common: { + albums: 'Album', + album: 'Album', + loading: 'Laster…', + loadingMore: 'Laster…', + loadingPlaylists: 'Laster spillelister…', + noAlbums: 'Ingen album funnet.', + downloading: 'Laster ned…', + downloadZip: 'Last ned (ZIP)', + back: 'Tilbake', + cancel: 'Avbryt', + save: 'Lagre', + delete: 'Slett', + use: 'Bruk', + add: 'Legg til', + active: 'Aktiv', + download: 'Last ned', + chooseDownloadFolder: 'Velg nedlastingsmappe', + noFolderSelected: 'Ingen mappe valgt', + rememberDownloadFolder: 'Husk denne mappen', + filterGenre: 'Sjangerfilter', + filterSearchGenres: 'Søk i sjangre…', + filterNoGenres: 'Ingen sjangre samsvarer', + filterClear: 'Tøm', + bulkSelected: '{{count}} valgt', + bulkAddToPlaylist: 'Legg til i spilleliste', + bulkRemoveFromPlaylist: 'Fjern fra spilleliste', + bulkClear: 'Tøm utvalg', + updaterAvailable: 'Ny versjon er tilgjengelig', + updaterVersion: 'v{{version}} er lansert', + updaterInstall: 'Installer og start applikasjonen på nytt', + updaterDownloading: 'Laster ned…', + updaterInstalling: 'Installerer…', + updaterDownload: 'Last ned fra GitHub', + updaterExperimentalHint: 'Auto-oppdatering er fortsatt under utvikling', + }, + settings: { + title: 'Innstillinger', + language: 'Språk', + languageEn: 'Engelsk', + languageDe: 'Tysk', + languageFr: 'Fransk', + languageNl: 'Nederlandsk', + languageZh: 'Kinesisk', + languageNb: 'Norsk', + font: 'Skrifttype', + theme: 'Tema', + appearance: 'Utseende', + servers: 'Tjenere', + serverName: 'Tjenernavn', + serverUrl: 'Tjener-URL', + serverUsername: 'Brukernavn', + serverPassword: 'Passord', + addServer: 'Legg til tjener', + addServerTitle: 'Legg til ny tjener', + useServer: 'Bruk', + deleteServer: 'Slett', + noServers: 'Ingen tjenere lagret.', + serverActive: 'Aktiv', + confirmDeleteServer: 'Slett tjener "{{name}}"?', + serverConnecting: 'Kobler til…', + serverConnected: 'Tilkoblet!', + serverFailed: 'Tilkobling mislyktes.', + testBtn: 'Test tilkobling', + testingBtn: 'Tester…', + serverCompatible: 'Kompatibel med: Navidrome · Gonic · Airsonic · Subsonic', + connected: 'Tilkoblet', + failed: 'Mislyktes', + eqTitle: 'Jevnstiller', + eqEnabled: 'Aktiver jevnstiller', + eqPreset: 'Forhåndsinnstilling', + eqPresetCustom: 'Egendefinert', + eqPresetBuiltin: 'Innebygde forhåndsinnstillinger', + eqPresetCustomGroup: 'Mine forhåndsinnstillinger', + eqSavePreset: 'Lagre som forhåndsinnstilling', + eqPresetName: 'Navn på forhåndsinnstilling…', + eqDeletePreset: 'Slett forhåndsinnstilling', + eqResetBands: 'Tilbakestill til standard', + eqPreGain: 'Forforsterkning', + eqResetPreGain: 'Tilbakestill forforsterkning', + eqAutoEqTitle: 'AutoEQ hodetelefonoppslag', + eqAutoEqPlaceholder: 'Søk etter hodetelefon- / IEM-modell…', + eqAutoEqSearching: 'Søker…', + eqAutoEqNoResults: 'Ingen resultater funnet', + eqAutoEqError: 'Søk mislyktes', + eqAutoEqRateLimit: 'GitHub-hastighetsgrense nådd - prøv igjen om ett minutt', + eqAutoEqFetchError: 'Kunne ikke hente EQ-profil', + lfmTitle: 'Last.fm', + lfmConnect: 'Koble til med Last.fm', + lfmConnecting: 'Venter på autorisasjon…', + lfmConfirm: 'Jeg har autorisert appen', + lfmConnected: 'Tilkoblet som', + lfmDisconnect: 'Koble fra', + lfmConnectDesc: 'Koble til din Last.fm-konto for å aktivere scrobbling og få "Nå spiller"-oppdateringer direkte fra Psysonic - ingen Navidrome-konfigurasjon kreves.', + lfmOpenBrowser: 'Et nettleservindu vil åpne seg. Autoriser Psysonic via Last.fm, og klikk deretter på knappen nedenfor.', + lfmScrobbles: '{{n}} scrobbles', + lfmMemberSince: 'Medlem siden {{year}}', + scrobbleEnabled: 'Scrobbling er aktivert', + scrobbleDesc: 'Send sanger til Last.fm etter 50 % avspilling', + behavior: 'App-oppførsel', + cacheTitle: 'Maks. lagringsstørrelse', + cacheDesc: 'Plateomslag og artistbilder. Når den er full, fjernes de eldste oppføringene automatisk. Frakoblede album fjernes ikke automatisk, men slettes når hurtigbufferen tømmes manuelt.', + cacheUsed: 'Brukt: {{images}} bilder · {{offline}} frakoblede spor', + cacheUsedImages: 'Bilder:', + cacheUsedOffline: 'Frakoblede spor:', + cacheMaxLabel: 'Maks størrelse', + cacheClearBtn: 'Tøm hurtigbuffer', + cacheClearWarning: 'Dette vil også fjerne alle frakoblede album fra biblioteket.', + cacheClearConfirm: 'Tøm alt', + cacheClearCancel: 'Avbryt', + offlineDirTitle: 'Frakoblet bibliotek (In-App)', + offlineDirDesc: 'Lagringsplassering for spor som du gjør tilgjengelige som frakoblet i Psysonic.', + offlineDirDefault: 'Standard (App-data)', + offlineDirChange: 'Endre katalog', + offlineDirClear: 'Tilbakestill til standard', + offlineDirHint: 'Nye nedlastinger vil bruke denne plasseringen. Eksisterende nedlastinger forblir på sin opprinnelige lokasjon.', + showArtistImages: 'Vis artistbilder', + showArtistImagesDesc: 'Last inn og vis artistbilder i artistoversikten. Denne er deaktivert som standard, for å redusere disk-I/O og nettverksbelastningen på store biblioteker.', + minimizeToTray: 'Minimer til oppgavelinjen', + minimizeToTrayDesc: 'Når vinduet lukkes, vil Psysonic bli kjørende i oppgavelinjen fremfor å bli avsluttet.', + discordRichPresence: 'Discord Rich Presence', + discordRichPresenceDesc: 'Vis sporet som spilles i din Discord-profil. Krever at Discord kjører.', + nowPlayingEnabled: 'Vis i "Nå spiller"', + nowPlayingEnabledDesc: 'Send sporet som spilles av til tjenerens live-lyttervisning. Deaktiver for å stoppe sending av avspillingsdata.', + downloadsTitle: 'ZIP Eksport & Arkivering', + downloadsFolderDesc: 'Målmappe for album du laster ned som en ZIP-fil til datamaskinen din.', + downloadsDefault: 'Standard nedlastingsmappe', + pickFolder: 'Velg', + pickFolderTitle: 'Velg nedlastingsmappe', + clearFolder: 'Tøm nedlastingsmappe', + logout: 'Logg ut', + aboutTitle: 'Om Psysonic', + aboutDesc: 'En moderne musikkspiller for Subsonic-kompatible tjenere (Navidrome, Gonic og andre). Bygget på Tauri v2 med en innebygd Rust-lydmotor - lett og rask, men fullpakket med funksjoner: bølgeform-søkelinje, synkroniserte sangtekster, Last.fm-integrasjon, 10-bånds jevnstiller, crossfade, gapless-avspilling, Replay Gain, sjangerlesing og et stort bibliotek med temaer.', + aboutFeatures: 'Multi-tjener · Last.fm scrobbling og liker · Fullskjerm Ambient Stage · Bølgeformsøk · Synkroniserte tekster · 10-bånds jevnstiller · Crossfade og gapless · Replay Gain · Sjangre · 63 temaer · 6 språk', + aboutLicense: 'Lisens', + aboutLicenseText: 'GNU GPL v3 - gratis å bruke, endre og distribuere under samme lisens.', + aboutRepo: 'Kildekode på GitHub', + aboutVersion: 'Versjon', + aboutBuiltWith: 'Bygget med Tauri · React · TypeScript · Rust/rodio', + aboutAiCredit: 'Utviklet med støtte fra Claude Code laget av Anthropic', + aboutContributorsLabel: 'Bidragsytere', + aboutSpecialThanksLabel: 'Spesiell takk', + changelog: 'Endringslogg', + showChangelogOnUpdate: "Vis 'Hva er nytt' ved oppdatering til ny versjon", + showChangelogOnUpdateDesc: "Vis automatisk hva som er nytt når en ny versjon lanseres for første gang.", + randomMixTitle: 'Tilfeldig miks', + randomMixBlacklistTitle: 'Egendefinerte filternøkkelord', + randomMixBlacklistDesc: 'Sanger ekskluderes når et nøkkelord samsvarer med sjanger, tittel, album eller artist (aktiv når avkrysningsboksen ovenfor er på).', + randomMixBlacklistPlaceholder: 'Legg til nøkkelord…', + randomMixBlacklistAdd: 'Legg til', + randomMixBlacklistEmpty: 'Ingen egendefinerte nøkkelord lagt til ennå.', + randomMixHardcodedTitle: 'Innebygde nøkkelord (aktiv når avkrysningsboksen er på)', + tabPlayback: 'Avspilling', + tabLibrary: 'Bibliotek', + tabAppearance: 'Utseende', + homeCustomizerTitle: 'Hjemmeside', + sidebarTitle: 'Sidefelt', + sidebarReset: 'Tilbakestill til standard', + sidebarDrag: 'Dra for å endre rekkefølge', + sidebarFixed: 'Alltid synlig', + tabShortcuts: 'Snarveier', + tabServer: 'Tjener', + tabSystem: 'System', + tabGeneral: 'Generelt', + backupTitle: 'Sikkerhetskopiering og gjenoppretting', + backupExport: 'Eksporter innstillinger', + backupExportDesc: 'Lagrer alle innstillinger, tjenerprofiler, Last.fm-konfigurasjon, tema, jevnstiller og tastebindinger til en .psybkp-fil. Passordet lagres i klartekst – hold filen sikker.', + backupImport: 'Importer innstillinger', + backupImportDesc: 'Gjenoppretter innstillinger fra en .psybkp-fil. Applikasjonen starter på nytt etter import.', + backupImportConfirm: 'Dette vil overskrive alle gjeldende innstillinger. Vil du fortsette?', + backupSuccess: 'Sikkerhetskopiering lagret', + backupImportSuccess: 'Innstillinger gjenopprettet – laster inn data på nytt…', + backupImportError: 'Ugyldig eller ødelagt fil for sikkerhetskopi.', + shortcutsReset: 'Tilbakestill til standardinnstillinger', + shortcutListening: 'Trykk på en tast…', + shortcutUnbound: '-', + globalShortcutsTitle: 'Globale snarveier', + globalShortcutsNote: 'Arbeid systemomfattende selv når Psysonic er i bakgrunnen. Krever Ctrl, Alt eller Super som modifikator.', + shortcutClear: 'Fjern', + shortcutPlayPause: 'Spill av / Pause', + shortcutNext: 'Neste spor', + shortcutPrev: 'Forrige spor', + shortcutVolumeUp: 'Volum opp', + shortcutVolumeDown: 'Volum ned', + shortcutSeekForward: 'Søk fremover 10 sekunder', + shortcutSeekBackward: 'Søk bakover 10 sekunder', + shortcutToggleQueue: 'Veksle kø', + shortcutFullscreenPlayer: 'Fullskjermsspiller', + shortcutNativeFullscreen: 'Naturlig fullskjerm', + playbackTitle: 'Avspilling', + replayGain: 'Replay Gain', + replayGainDesc: 'Normaliser sporvolumet ved hjelp av ReplayGain-metadata', + replayGainMode: 'Modus', + replayGainTrack: 'Spor', + replayGainAlbum: 'Album', + crossfade: 'Crossfade', + crossfadeDesc: 'Tone mellom spor', + crossfadeSecs: '{{n}}s', + notWithGapless: 'Ikke tilgjengelig mens Gapless er aktiv', + notWithCrossfade: 'Ikke tilgjengelig mens Crossfade er aktiv', + gapless: 'Gapless avspilling', + gaplessDesc: 'Forhåndsbuffer neste spor for å eliminere mellomrom mellom sanger', + infiniteQueue: 'Uendelig kø', + infiniteQueueDesc: 'Legg automatisk til tilfeldige spor når køen går tom', + experimental: 'Eksperimentell', + }, + changelog: { + modalTitle: "Nyheter", + dontShowAgain: "Ikke vis igjen", + close: 'Forstått', + }, + help: { + title: 'Hjelp', + s1: 'Komme i gang', + q1: 'Hvilke servere er kompatible?', + a1: 'Psysonic fungerer med alle Subsonic-kompatible servere: Navidrome, Gonic, Subsonic, Airsonic og andre. Navidrome er det anbefalte valget.', + q2: 'Hvordan kobler jeg til serveren min?', + a2: 'Åpne Innstillinger og klikk på "Legg til server". Skriv inn server-URL-en (f.eks. 192.168.1.100:4533), brukernavn og passord. Psysonic tester tilkoblingen før den lagrer – ingenting lagres hvis tilkoblingen mislykkes.', + q3: 'Kan jeg bruke flere servere?', + a3: 'Ja. Du kan legge til så mange servere du vil i Innstillinger og bytte mellom dem når som helst. Bare én server er aktiv om gangen.', + s2: 'Avspilling', + q4: 'Hvordan spiller jeg musikk?', + a4: 'Dobbeltklikk på et spor for å spille det av. På album- og artistsider bruker du "Spill av alle" for å starte hele albumet. Du kan også dra spor inn i køpanelet.', + q5: 'Hvilke hurtigtaster er tilgjengelige?', + a5: 'Mellomrom = Spill av / Pause · Escape = Lukk fullskjermsspiller. Medietaster (Spill av / Pause, Neste, Forrige) fungerer på alle plattformer. På Linux bruker du knappene i spillerlinjen for medietaster. Snarveier i appen og systemomfattende globale snarveier kan tilpasses i Innstillinger → Tastatursnarveier / Globale snarveier.', + q6: 'Hva er køen?', + a6: 'Køen viser alle kommende spor. Åpne den med panelikonet øverst til høyre (ved siden av Spilles nå-indikatoren). Du kan endre rekkefølgen på sporene ved å dra, spille av i tilfeldig rekkefølge med tilfeldig-knappen og lagre køen som en spilleliste.', + q7: 'Hvordan åpner jeg fullskjermsspilleren?', + a7: 'Klikk på miniatyrbildet av albumcoveret i spillerlinjen nederst, eller på utvid-ikonet ved siden av. Trykk på Escape for å lukke det igjen.', + q8: 'Hvordan fungerer gjentakelse?', + a8: 'Klikk på gjentakelsesknappen i spillerlinjen for å bla gjennom: Av → Gjenta alle → Gjenta én.', + s3: 'Bibliotek', + q9: 'Hvordan laster jeg ned et album?', + a9: 'Åpne detaljsiden for et album og klikk på "Last ned (ZIP)". Serveren komprimerer albumet til en ZIP-fil først – for store album eller filer uten tap (FLAC/WAV) kan dette ta et øyeblikk før nedlastingen faktisk starter. Dette er normalt: fremdriftslinjen vises når serveren er ferdig med å zippe og overføringen starter.', + q10: 'Hvordan stjernemerker/favoritterer jeg spor og album?', + a10: 'Klikk på stjerneikonet på en hvilken som helst sporrad eller i albumoverskriften. Stjernemerkede elementer vises i Favoritter-delen i sidefeltet.', + q11: 'Hva er hovedkarusellen på hjemmesiden?', + a11: 'Banneret øverst på hjemmesiden velger tilfeldig album fra biblioteket ditt og roterer gjennom dem hvert 10. sekund. Klikk på prikkene for å hoppe til et bestemt album, eller klikk på banneret for å åpne albumet.', + s4: 'Innstillinger', + q12: 'Hvordan endrer jeg temaet?', + a12: 'Innstillinger → Tema. Velg fra et stort utvalg av temaer på tvers av 8 grupper: Psysonic-temaer, mediaspiller, operativsystemer, spill, filmer, serier, sosiale medier og åpen kildekode-klassikere (Catppuccin, Nord, Gruvbox).', + q13: 'Hvordan endrer jeg språket?', + a13: 'Innstillinger → Språk. Engelsk, tysk, fransk, nederlandsk og kinesisk støttes.', + q15: 'Hvordan angir jeg en nedlastingsmappe?', + a15: 'Innstillinger → App-oppførsel → Nedlastingsmappe. Velg en hvilken som helst mappe – nedlastede album lagres der som ZIP-filer. Uten en tilpasset mappe brukes nettleserens standard nedlastingsplassering.', + s5: 'Scrobbling', + q16: 'Hvordan fungerer scrobbling?', + a16: 'Psysonic scrobbler direkte til Last.fm - ingen Navidrome-konfigurasjon nødvendig. Koble til Last.fm-kontoen din i Innstillinger → Last.fm og aktiver scrobbling der.', + q17: 'Når sendes en scrobble?', + a17: 'En scrobble sendes etter at du har lyttet til 50 % av et spor.', + q22: 'Hva er bølgeformen i avspillerlinjen?', + a22: 'Bølgeformsøkelinjen erstatter den klassiske fremdriftsglidebryteren. Klikk hvor som helst på den for å hoppe til den posisjonen, eller dra for å skrubbe. Den avspilte delen lyser med en blå-til-lilla gradient, det bufrede området vises litt lysere, og den uavspilte delen er falmet.', + q24: 'Kan jeg blande køen?', + a24: 'Ja. Åpne køpanelet og klikk på blandeikonet i køoverskriften. Sporet som spilles av for øyeblikket forblir på posisjon 1 – alle gjenværende spor blir tilfeldig omorganisert.', + q25: 'Åpnes Last.fm- og Wikipedia-lenker på artistsider i en nettleser?', + a25: 'Ja – de åpnes i standardnettleseren din. Knappen viser kort en bekreftelsesetikett når du klikker på den.', + s7: 'Tilfeldig miks', + q26: 'Hva er tilfeldig miks?', + a26: 'Tilfeldig miks bygger en spilleliste med tilfeldige spor fra hele biblioteket ditt. Åpne den via "Tilfeldig miks" i sidefeltet og klikk på "Ny miks". Du kan justere antall spor før generering.', + q27: 'Hva er nøkkelordfilteret?', + a27: 'Nøkkelordfilteret ekskluderer spor der sjanger, tittel eller albumnavn inneholder spesifikke ord. Lydbøker filtreres automatisk. Legg til egendefinerte nøkkelord i Innstillinger → Tilfeldig miks, eller klikk på en hvilken som helst sjangertagg i sporlisten for å legge den til umiddelbart.', + q28: 'Hva er Super Genre Mix?', + a28: 'Super Genre Mix grupperer biblioteket ditt i brede kategorier (rock, metal, elektronisk, jazz, klassisk osv.) og bygger en fokusert miks fra den stilen. Velg en kategoribrikke under sporlisten. Resultatene vises gradvis etter hvert som hver undersjanger hentes.', + s6: 'Feilsøking', + q18: 'Omslagsbilder og artistbilder lastes sakte.', + a18: 'Bilder hentes fra serverens disk ved første innlasting og bufres deretter lokalt i 30 dager. Hvis serverens lagring er treg, kan det ta et øyeblikk før det første besøket på en side. Senere besøk vil være umiddelbare.', + q19: 'Tilkoblingstesten mislykkes.', + a19: 'Sjekk URL-en inkludert porten (f.eks. http://192.168.1.100:4533). Sørg for at ingen brannmur blokkerer tilkoblingen. Prøv http:// i stedet for https:// på et lokalt nettverk. Bekreft også at brukernavnet og passordet ditt er riktig.', + q20: 'Ingen lyd på Linux.', + a20: 'Psysonic er tilgjengelig som .deb (Ubuntu/Debian), .rpm (Fedora/RHEL), og via AUR på Arch/CachyOS (yay -S psysonic). Det finnes ingen AppImage. Hvis lyd mangler, sørg for at PipeWire eller PulseAudio kjører.', + q21: 'Appen viser en svart skjerm på Linux.', + a21: 'Dette er vanligvis et GPU/EGL-driverproblem i WebKitGTK. Start med GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1. AUR-pakken og offisielle .deb/.rpm-installasjonsprogrammer setter disse automatisk.', + q29: 'Hva er Crossfade og Gapless Playback?', + a29: 'Begge er eksperimentelle lydfunksjoner i Innstillinger → Lyd. Gapless forhåndsbuffer neste spor for å eliminere stillhet mellom sanger. Crossfade fader ut gjeldende spor mens det fader inn det neste – juster varigheten (1–10 s) etter smak.', + q30: 'Viser Psysonic sangtekst?', + a30: 'Ja. Klikk på mikrofonikonet i spillerlinjen, for å åpne Sangtekst-fanen i køpanelet. Psysonic henter tekst automatisk fra LRCLIB. Hvis synkroniserte tekster er tilgjengelige, utheves den aktive linjen og ruller i sanntid mens sangen spilles av. Hvis bare ren tekst er tilgjengelig, vises fullteksten statisk.', + q31: 'Kan jeg tilpasse hurtigtaster?', + a31: 'Ja. Innstillinger → Tastatursnarveier lar deg tilordne handlinger i appen (Spill av/pause, Neste, Forrige, Volum opp/ned, Fullskjerm og mer) til en hvilken som helst tast. Innstillinger → Globale snarveier lar deg tilordne systemomfattende snarveier som utløses selv når Psysonic er i bakgrunnen.', + q32: 'Kan jeg endre skrifttypen?', + a32: 'Ja. Innstillinger → Skrifttype lar deg velge mellom 10 skrifttyper, inkludert IBM Plex Mono, Fira Code, JetBrains Mono, Courier Prime og andre. Den valgte skrifttypen gjelder for hele brukergrensesnittet.', + s8: 'Frakoblet modus', + q34: 'Hva er frakoblet modus?', + a34: 'Frakoblet modus (beta) lar deg mellomlagre album til enheten din, slik at du kan lytte uten en aktiv servertilkobling. Bufrede spor lagres lokalt og spilles av direkte fra harddisken – ingen nettverksforespørsel gjøres under avspilling.', + q35: 'Hvordan bufrer jeg et album for å bruke det offline?', + a35: 'Åpne et hvilket som helst album og klikk på nedlastingsikonet i albumoverskriften. Psysonic laster ned alle spor i bakgrunnen. Fremdrift vises på knappen. Når bufren er lagret, blir ikonet grønt. Du kan vise og fjerne bufrede album på siden Offline bibliotek (sidefelt).', + q36: 'Hvor mye lagringsplass kan frakoblet mellomlagring bruke?', + a36: 'Du kan angi en maksimal mellomlagringsstørrelse i Innstillinger → Bibliotek. Når grensen er nådd, vises et advarselsbanner på albumsiden. Du kan slette individuelle album fra frakoblet bibliotek for å frigjøre plass.', + }, + queue: { + title: 'Kø', + savePlaylist: 'Lagre spilleliste', + updatePlaylist: 'Oppdater spilleliste', + filterPlaylists: 'Filtrer spillelister…', + playlistName: 'Spillelistenavn', + cancel: 'Avbryt', + save: 'Lagre', + loadPlaylist: 'Last inn spilleliste', + loading: 'Laster…', + noPlaylists: 'Ingen spillelister funnet.', + load: 'Erstatt kø og spill av', + appendToQueue: 'Legg til i kø', + delete: 'Slett', + deleteConfirm: 'Slett spillelisten "{{name}}"?', + clear: 'Fjern', + shuffle: 'Bland kø', + gapless: 'Uten mellomrom', + crossfade: 'Crossfade', + infiniteQueue: 'Uendelig kø', + autoAdded: '- Lagt til automatisk -', + radioAdded: '- Radio -', + hide: 'Skjul', + close: 'Lukk', + nextTracks: 'Neste spor', + emptyQueue: 'Køen er tom.', + trackSingular: 'spor', + trackPlural: 'spor', + showRemaining: 'Vis gjenværende tid', + showTotal: 'Vis total tid', + }, + statistics: { + title: 'Statistikk', + recentlyPlayed: 'Nylig spilt', + mostPlayed: 'Mest spilte album', + highestRated: 'Høyest rangerte album', + genreDistribution: 'Sjangerfordeling (Topp 20)', + loadMore: 'Last inn mer', + statArtists: 'Artister', + statAlbums: 'Album', + statSongs: 'Sanger', + statGenres: 'Sjangere', + statPlaytime: 'Total spilletid', + genreInsights: 'Sjangerinnsikt', + formatDistribution: 'Formatdistribusjon', + formatSample: 'Utvalg av {{n}} spor', + computing: 'Utregner…', + genreSongs: '{{count}} Sanger', + genreAlbums: '{{count}} Album', + recentlyAdded: 'Nylig lagt til', + decadeDistribution: 'Album etter tiår', + decadeAlbums_one: '{{count}} Album', + decadeAlbums_other: '{{count}} Album', + decadeUnknown: 'Ukjent', + lfmTitle: 'Last.fm Statistikk', + lfmTopArtists: 'Toppartister', + lfmTopAlbums: 'Toppalbum', + lfmTopTracks: 'Toppspor', + lfmPlays: '{{count}} avspillinger', + lfmPeriodOverall: 'Alltid', + lfmPeriod7day: '7 dager', + lfmPeriod1month: '1 måned', + lfmPeriod3month: '3 måneder', + lfmPeriod6month: '6 måneder', + lfmPeriod12month: '12 måneder', + lfmNotConnected: 'Koble til Last.fm i Innstillinger for å se statistikken din.', + lfmRecentTracks: 'Siste Scrobble-innslag', + lfmNowPlaying: 'Spilles nå', + lfmJustNow: 'akkurat nå', + lfmMinutesAgo: 'For {{n}}m siden', + lfmHoursAgo: 'For {{n}}t siden', + lfmDaysAgo: 'For {{n}}d siden', + }, + player: { + regionLabel: 'Musikkspiller', + openFullscreen: 'Åpne fullskjermsspiller', + fullscreen: 'Fullskjermsspiller', + closeFullscreen: 'Lukk fullskjerm', + closeTooltip: 'Lukk (Esc)', + noTitle: 'Ingen tittel', + stop: 'Stopp', + prev: 'Forrige spor', + play: 'Spill av', + pause: 'Pause', + next: 'Neste spor', + repeat: 'Gjenta', + repeatOff: 'Av', + repeatAll: 'Alle', + repeatOne: 'Én', + progress: 'Sangfremdrift', + volume: 'Volum', + toggleQueue: 'Veksle kø', + lyrics: 'Sangtekst', + lyricsLoading: 'Laster sangtekst…', + lyricsNotFound: 'Ingen sangtekst funnet for dette sporet', + }, + songInfo: { + title: 'Sanginfo', + songTitle: 'Tittel', + artist: 'Artist', + album: 'Album', + albumArtist: 'Albumartist', + year: 'År', + genre: 'Sjanger', + duration: 'Varighet', + track: 'Spor', + format: 'Format', + bitrate: 'Bitrate', + sampleRate: 'Samplingfrekvens', + bitDepth: 'Bitdybde', + channels: 'Kanaler', + fileSize: 'Filstørrelse', + path: 'Sti', + replayGainTrack: 'RG-sporforsterkning', + replayGainAlbum: 'RG-albumforsterkning', + replayGainPeak: 'RG-sportopp', + mono: 'Mono', + stereo: 'Stereo', + }, + playlists: { + title: 'Spillelister', + newPlaylist: 'Ny spilleliste', + unnamed: 'Navnløs spilleliste', + createName: 'Spillelistenavn…', + create: 'Opprett', + cancel: 'Avbryt', + empty: 'Ingen spillelister ennå.', + emptyPlaylist: 'Denne spillelisten er tom.', + addFirstSong: 'Legg til din første sang', + notFound: 'Spillelisten ble ikke funnet.', + songs: '{{n}} sanger', + playAll: 'Spill alle', + shuffle: 'Bland', + addToQueue: 'Legg til i kø', + back: 'Tilbake til spillelister', + deletePlaylist: 'Slett', + confirmDelete: 'Klikk igjen for å bekrefte', + removeSong: 'Fjern fra spilleliste', + addSongs: 'Legg til sanger', + searchPlaceholder: 'Søk i biblioteket ditt…', + noResults: 'Ingen resultater.', + suggestions: 'Foreslåtte sanger', + noSuggestions: 'Ingen forslag tilgjengelig.', + titleBadge: 'Spilleliste', + refreshSuggestions: 'Nye forslag', + addSong: 'Legg til i spilleliste', + cacheOffline: 'Bufre spilleliste offline', + offlineCached: 'Spilleliste bufret', + offlineDownloading: 'Bufre… ({{done}}/{{total}} album)', + publicLabel: 'Offentlig', + privateLabel: 'Privat', + editMeta: 'Rediger spilleliste', + editNamePlaceholder: 'Spillelistenavn…', + editCommentPlaceholder: 'Legg til en beskrivelse…', + editPublic: 'Offentlig spilleliste', + editSave: 'Lagre', + editCancel: 'Avbryt', + changeCover: 'Endre omslagsbilde', + changeCoverLabel: 'Endre bilde', + removeCover: 'Fjern bilde', + coverUpdated: 'Omslag oppdatert', + metaSaved: 'Spillelisten er oppdatert', + }, + radio: { + title: 'Internettradio', + empty: 'Ingen radiostasjoner konfigurert.', + addStation: 'Legg til radio stasjon', + editStation: 'Rediger', + deleteStation: 'Slett stasjon', + confirmDelete: 'Klikk igjen for å bekrefte', + stationName: 'Stasjonsnavn…', + streamUrl: 'Strøm-URL…', + homepageUrl: 'Hjemmeside-URL (valgfritt)', + save: 'Lagre', + cancel: 'Avbryt', + live: 'LIVE', + liveStream: 'Internettradio', + openHomepage: 'Åpne hjemmesiden', + changeCoverLabel: 'Endre omslag', + removeCover: 'Fjern omslag', + browseDirectory: 'Søk i katalogen', + directoryPlaceholder: 'Søk i stasjoner…', + noResults: 'Ingen stasjoner funnet.', + stationAdded: 'Stasjon lagt til', + filterAll: 'Alle', + filterFavorites: 'Favoritter', + sortManual: 'Manuell', + sortAZ: 'A → Å', + sortZA: 'Å → A', + sortNewest: 'Nyeste', + favorite: 'Legg til i favoritter', + unfavorite: 'Fjern fra favoritter', + noFavorites: 'Ingen favorittstasjoner.', + } +}; + // Retrieve language from local storage or default to 'en' const savedLanguage = localStorage.getItem('psysonic_language') || 'en'; @@ -3898,7 +4683,8 @@ i18n de: { translation: deTranslation }, fr: { translation: frTranslation }, nl: { translation: nlTranslation }, - zh: { translation: zhTranslation } + zh: { translation: zhTranslation }, + nb: { translation: nbTranslation } }, lng: savedLanguage, fallbackLng: 'en', diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx index 52fcb1f4..8d11ab38 100644 --- a/src/pages/Settings.tsx +++ b/src/pages/Settings.tsx @@ -757,6 +757,7 @@ export default function Settings() { { value: 'fr', label: t('settings.languageFr') }, { value: 'de', label: t('settings.languageDe') }, { value: 'zh', label: t('settings.languageZh') }, + { value: 'nb', label: t('settings.languageNb') }, ]} />