* feat: add shared ImageUploadService for entity image management * feat: add UploadedImage field and methods to Artist model * feat: add uploaded_image column to artist table * feat: add ArtistImageFolder config option * refactor: wire ImageUploadService and delegate playlist file ops to it Wire ImageUploadService into the DI container and refactor the playlist service to delegate image file operations (SetImage/RemoveImage) to the shared ImageUploadService, removing duplicated file I/O logic. A local ImageUploadService interface is defined in core/playlists to avoid an import cycle between core and core/playlists. * feat: artist artwork reader checks uploaded image first * feat: add image-folder priority source for artist artwork * feat: cache key invalidation for image-folder and uploaded images * refactor: extract shared image upload HTTP helpers * feat: add artist image upload/delete API endpoints * refactor: playlist handlers use shared image upload helpers * feat: add shared ImageUploadOverlay component * feat: add i18n keys for artist image upload * feat: add image upload overlay to artist detail pages * refactor: playlist details uses shared ImageUploadOverlay component * fix: add gosec nolint directive for ParseMultipartForm * refactor: deduplicate image upload code and optimize dir scanning - Remove dead ImageFilename methods from Artist and Playlist models (production code uses core.imageFilename exclusively) - Extract shared uploadedImagePath helper in model/image.go - Extract findImageInArtistFolder to deduplicate dir-scanning logic between fromArtistImageFolder and getArtistImageFolderModTime - Fix fileInputRef in useCallback dependency array * fix: include artist UpdatedAt in artwork cache key Without this, uploading or deleting an artist image would not invalidate the cached artwork because the cache key was only based on album folder timestamps, not the artist's own UpdatedAt field. * feat: add Portuguese translations for artist image upload * refactor: use shared i18n keys for cover art upload messages Move cover art upload/remove translations from per-entity sections (artist, playlist) to a shared top-level "message" section, avoiding duplication across entity types and translation files. * refactor: move cover art i18n keys to shared message section for all languages * refactor: simplify image upload code and eliminate redundancies Extracted duplicate image loading/lightbox state logic from DesktopArtistDetails and MobileArtistDetails into a shared useArtistImageState hook. Moved entity type constants to the consts package and replaced raw string literals throughout model, core, and nativeapi packages. Exported model.UploadedImagePath and reused it in core/image_upload.go to consolidate path construction. Cached the ArtistImageFolder lookup result in artistReader to eliminate a redundant os.ReadDir call on every artwork request. Signed-off-by: Deluan <deluan@navidrome.org> * style: fix prettier formatting in ImageUploadOverlay * fix: address code review feedback on image upload error handling - RemoveImage now returns errors instead of swallowing them - Artist handlers distinguish not-found from other DB errors - Defer multipart temp file cleanup after parsing * fix: enforce hard request size limit with MaxBytesReader for image uploads Signed-off-by: Deluan <deluan@navidrome.org> --------- Signed-off-by: Deluan <deluan@navidrome.org>
715 lines
27 KiB
JSON
715 lines
27 KiB
JSON
{
|
||
"languageName": "Svenska",
|
||
"resources": {
|
||
"song": {
|
||
"name": "Låt |||| Låtar",
|
||
"fields": {
|
||
"albumArtist": "Albumartist",
|
||
"duration": "Längd",
|
||
"trackNumber": "#",
|
||
"playCount": "Spelningar",
|
||
"title": "Titel",
|
||
"artist": "Artist",
|
||
"album": "Album",
|
||
"path": "Sökväg",
|
||
"genre": "Genre",
|
||
"compilation": "Samling",
|
||
"year": "År",
|
||
"size": "Filstorlek",
|
||
"updatedAt": "Uppdaterad",
|
||
"bitRate": "Bitrate",
|
||
"discSubtitle": "Underrubrik",
|
||
"starred": "Favorit",
|
||
"comment": "Kommentar",
|
||
"rating": "Betyg",
|
||
"quality": "Kvalitet",
|
||
"bpm": "BPM",
|
||
"playDate": "Senast spelad",
|
||
"channels": "Channels",
|
||
"createdAt": "Skapad",
|
||
"grouping": "Gruppering",
|
||
"mood": "Stämning",
|
||
"participants": "Ytterligare medverkande",
|
||
"tags": "Ytterligare taggar",
|
||
"mappedTags": "Mappade taggar",
|
||
"rawTags": "Omodifierade taggar",
|
||
"bitDepth": "Bitdjup",
|
||
"sampleRate": "Samplingsfrekvens",
|
||
"missing": "Saknade",
|
||
"libraryName": "Bibliotek",
|
||
"composer": "Kompositör",
|
||
"disc": ""
|
||
},
|
||
"actions": {
|
||
"addToQueue": "Lägg till i kön",
|
||
"playNow": "Spela nu",
|
||
"addToPlaylist": "Lägg till i spellista",
|
||
"shuffleAll": "Shuffle",
|
||
"download": "Ladda ner",
|
||
"playNext": "Spela nästa",
|
||
"info": "Mer information",
|
||
"showInPlaylist": "Visa i spellista",
|
||
"instantMix": "Direktmix"
|
||
}
|
||
},
|
||
"album": {
|
||
"name": "Album |||| Album",
|
||
"fields": {
|
||
"albumArtist": "Albumartist",
|
||
"artist": "Artist",
|
||
"duration": "Längd",
|
||
"songCount": "Antal låtar",
|
||
"playCount": "Spelningar",
|
||
"name": "Namn",
|
||
"genre": "Genre",
|
||
"compilation": "Samling",
|
||
"year": "År",
|
||
"updatedAt": "Uppdaterad",
|
||
"comment": "Kommentar",
|
||
"rating": "Betyg",
|
||
"createdAt": "Skapad",
|
||
"size": "Storlek",
|
||
"originalDate": "Originaldatum",
|
||
"releaseDate": "Utgivningsdatum",
|
||
"releases": "Utgåva |||| Utgåvor",
|
||
"released": "Utgiven",
|
||
"recordLabel": "Skivbolag",
|
||
"catalogNum": "Katalognummer",
|
||
"releaseType": "Typ",
|
||
"grouping": "Gruppering",
|
||
"media": "Media",
|
||
"mood": "Stämning",
|
||
"date": "Inspelningsdatum",
|
||
"missing": "Saknade",
|
||
"libraryName": "Bibliotek"
|
||
},
|
||
"actions": {
|
||
"playAll": "Spela",
|
||
"playNext": "Spela härnäst",
|
||
"addToQueue": "Lägg till i kön",
|
||
"shuffle": "Shuffle",
|
||
"addToPlaylist": "Lägg till i spellista",
|
||
"download": "Ladda ner",
|
||
"info": "Mer information",
|
||
"share": "Dela"
|
||
},
|
||
"lists": {
|
||
"all": "Alla",
|
||
"random": "Blanda",
|
||
"recentlyAdded": "Senast tillagda",
|
||
"recentlyPlayed": "Senast spelade",
|
||
"mostPlayed": "Mest spelade",
|
||
"starred": "Favoriter",
|
||
"topRated": "Bästa betyg"
|
||
}
|
||
},
|
||
"artist": {
|
||
"name": "Artist |||| Artister",
|
||
"fields": {
|
||
"name": "Namn",
|
||
"albumCount": "Antal album",
|
||
"songCount": "Antal låtar",
|
||
"playCount": "Spelningar",
|
||
"rating": "Betyg",
|
||
"genre": "Genre",
|
||
"size": "Storlek",
|
||
"role": "Roll",
|
||
"missing": "Saknade"
|
||
},
|
||
"roles": {
|
||
"albumartist": "Albumartist |||| Albumartister",
|
||
"artist": "Artist |||| Artister",
|
||
"composer": "Kompositör |||| Kompositörer",
|
||
"conductor": "Dirigent |||| Dirigenter",
|
||
"lyricist": "Textförfattare |||| Textförfattare",
|
||
"arranger": "Arrangör |||| Arrangörer",
|
||
"producer": "Producent |||| Producenter",
|
||
"director": "Inspelningsledare |||| Inspelningsledare",
|
||
"engineer": "Ljudtekniker |||| Ljudtekniker",
|
||
"mixer": "Mixare |||| Mixare",
|
||
"remixer": "Remixare |||| Remixare",
|
||
"djmixer": "DJ-mixare |||| DJ-mixare",
|
||
"performer": "Utövande artist |||| Utövande artister",
|
||
"maincredit": "Albumartister eller Artist |||| Albumartister eller Artister"
|
||
},
|
||
"actions": {
|
||
"shuffle": "Shuffle",
|
||
"radio": "Radio",
|
||
"topSongs": "Topplåtar"
|
||
}
|
||
},
|
||
"user": {
|
||
"name": "Användare |||| Användare",
|
||
"fields": {
|
||
"userName": "Användarnamn",
|
||
"isAdmin": "Är admin",
|
||
"lastLoginAt": "Senaste inloggning",
|
||
"updatedAt": "Uppdaterad",
|
||
"name": "Namn",
|
||
"password": "Lösenord",
|
||
"createdAt": "Skapad",
|
||
"changePassword": "Byt lösenord?",
|
||
"currentPassword": "Nuvarande lösenord",
|
||
"newPassword": "Nytt lösenord",
|
||
"token": "Token",
|
||
"lastAccessAt": "Senaste åtkomst",
|
||
"libraries": "Bibliotek"
|
||
},
|
||
"helperTexts": {
|
||
"name": "Ändringar av ditt namn syns först vid nästa inloggning",
|
||
"libraries": "Välj ett bibliotek för denna användare eller lämna blankt för standardbibliotek"
|
||
},
|
||
"notifications": {
|
||
"created": "Användare skapad",
|
||
"updated": "Användare uppdaterad",
|
||
"deleted": "Användare borttagen"
|
||
},
|
||
"message": {
|
||
"listenBrainzToken": "Ange din ListenBrainz användar-token.",
|
||
"clickHereForToken": "Klicka här för att hämta din token",
|
||
"selectAllLibraries": "Välj alla bibliotek",
|
||
"adminAutoLibraries": "Administratörer har automatiskt tillgång till alla bibliotek"
|
||
},
|
||
"validation": {
|
||
"librariesRequired": "Minst ett bibliotek måste väljas för icke-administratörer"
|
||
}
|
||
},
|
||
"player": {
|
||
"name": "Spelare |||| Spelare",
|
||
"fields": {
|
||
"name": "Namn",
|
||
"transcodingId": "Omkodning",
|
||
"maxBitRate": "Max. bitrate",
|
||
"client": "Klient",
|
||
"userName": "Användarnamn",
|
||
"lastSeen": "Senast sedd",
|
||
"reportRealPath": "Visa hela sökvägen",
|
||
"scrobbleEnabled": "Scrobbla till extern tjänst"
|
||
}
|
||
},
|
||
"transcoding": {
|
||
"name": "Omkodning |||| Omkodningar",
|
||
"fields": {
|
||
"name": "Namn",
|
||
"targetFormat": "Målformat",
|
||
"defaultBitRate": "Standardbitrate",
|
||
"command": "Kommando"
|
||
}
|
||
},
|
||
"playlist": {
|
||
"name": "Spellista |||| Spellistor",
|
||
"fields": {
|
||
"name": "Namn",
|
||
"duration": "Längd",
|
||
"ownerName": "Ägare",
|
||
"public": "Offentlig",
|
||
"updatedAt": "Uppdaterad",
|
||
"createdAt": "Skapad",
|
||
"songCount": "Låtar",
|
||
"comment": "Kommentar",
|
||
"sync": "Auto-import",
|
||
"path": "Importera från"
|
||
},
|
||
"actions": {
|
||
"selectPlaylist": "Välj en spellista:",
|
||
"addNewPlaylist": "Skapa \"%{name}\"",
|
||
"export": "Exportera",
|
||
"makePublic": "Gör offentlig",
|
||
"makePrivate": "Gör privat",
|
||
"saveQueue": "Spara kö till spellista",
|
||
"searchOrCreate": "Sök spellista eller skapa ny...",
|
||
"pressEnterToCreate": "Tryck Enter för att skapa ny spellista",
|
||
"removeFromSelection": "Ta bort från urval"
|
||
},
|
||
"message": {
|
||
"duplicate_song": "Lägg till dubletter",
|
||
"song_exist": "Vissa låtar finns redan i spellistan. Vill du lägga till dubbletterna eller hoppa över dem?",
|
||
"noPlaylistsFound": "Hittade inga spellistor",
|
||
"noPlaylists": "Inga spellistor tillgängliga"
|
||
}
|
||
},
|
||
"radio": {
|
||
"name": "Radio |||| Radior",
|
||
"fields": {
|
||
"name": "Namn",
|
||
"streamUrl": "Stream-URL",
|
||
"homePageUrl": "Hemside-URL",
|
||
"updatedAt": "Uppdaterad",
|
||
"createdAt": "Skapad"
|
||
},
|
||
"actions": {
|
||
"playNow": "Spela nu"
|
||
}
|
||
},
|
||
"share": {
|
||
"name": "Dela |||| Delningar",
|
||
"fields": {
|
||
"username": "Delad av",
|
||
"url": "URL",
|
||
"description": "Beskrivning",
|
||
"contents": "Innehåll",
|
||
"expiresAt": "Giltig till",
|
||
"lastVisitedAt": "Senast besökt",
|
||
"visitCount": "Besök",
|
||
"format": "Format",
|
||
"maxBitRate": "Max. bitrate",
|
||
"updatedAt": "Uppdaterad",
|
||
"createdAt": "Skapad",
|
||
"downloadable": "Tillåt nedladdning?"
|
||
}
|
||
},
|
||
"missing": {
|
||
"name": "Saknad fil |||| Saknade filer",
|
||
"fields": {
|
||
"path": "Sökväg",
|
||
"size": "Storlek",
|
||
"updatedAt": "Försvann",
|
||
"libraryName": "Bibliotek"
|
||
},
|
||
"actions": {
|
||
"remove": "Radera",
|
||
"remove_all": "Radera alla"
|
||
},
|
||
"notifications": {
|
||
"removed": "Saknade fil(er) borttagna"
|
||
},
|
||
"empty": "Inga saknade filer"
|
||
},
|
||
"library": {
|
||
"name": "Bibliotek |||| Bibliotek",
|
||
"fields": {
|
||
"name": "Namn",
|
||
"path": "Sökväg",
|
||
"remotePath": "Ta bort sökväg",
|
||
"lastScanAt": "Senaste scan",
|
||
"songCount": "Låtar",
|
||
"albumCount": "Album",
|
||
"artistCount": "Artister",
|
||
"totalSongs": "Låtar",
|
||
"totalAlbums": "Album",
|
||
"totalArtists": "Artister",
|
||
"totalFolders": "Mappar",
|
||
"totalFiles": "Filer",
|
||
"totalMissingFiles": "Saknade filer",
|
||
"totalSize": "Sammanlagd storlek",
|
||
"totalDuration": "Längd",
|
||
"defaultNewUsers": "Standard för nya användare",
|
||
"createdAt": "Skapad",
|
||
"updatedAt": "Uppdaterad"
|
||
},
|
||
"sections": {
|
||
"basic": "Grundinformation",
|
||
"statistics": "Statistik"
|
||
},
|
||
"actions": {
|
||
"scan": "Scanna bibliotek",
|
||
"manageUsers": "Hantera användaråtkomst",
|
||
"viewDetails": "Se detaljer",
|
||
"quickScan": "Snabbscan",
|
||
"fullScan": "Komplett scan"
|
||
},
|
||
"notifications": {
|
||
"created": "Biblioteket har skapats",
|
||
"updated": "Biblioteket har uppdaterats",
|
||
"deleted": "Biblioteket har raderats",
|
||
"scanStarted": "Biblioteksscan startad",
|
||
"scanCompleted": "Biblioteksscan avslutad",
|
||
"quickScanStarted": "Snabbscan startad",
|
||
"fullScanStarted": "Komplett scan startad",
|
||
"scanError": "Fel vid start av scan. Se loggarna"
|
||
},
|
||
"validation": {
|
||
"nameRequired": "Biblioteksnamn krävs",
|
||
"pathRequired": "Bibliotekssökväg krävs",
|
||
"pathNotDirectory": "Bibliotekssökvägen måste vara en katalog",
|
||
"pathNotFound": "Bibliotekssökväg hittades inte",
|
||
"pathNotAccessible": "Bibliotekssökväg inte tillgänglig",
|
||
"pathInvalid": "Ogiltig bibliotekssökväg"
|
||
},
|
||
"messages": {
|
||
"deleteConfirm": "Är du säker på att du vill ta bort detta bibliotek? Detta raderar all förbunden data och användartillgång.",
|
||
"scanInProgress": "Scanning pågår...",
|
||
"noLibrariesAssigned": "Inga bibliotek har tilldelats den här användaren"
|
||
}
|
||
},
|
||
"plugin": {
|
||
"name": "Tillägg |||| Tillägg",
|
||
"fields": {
|
||
"id": "ID",
|
||
"name": "Namn",
|
||
"description": "Beskrivning",
|
||
"version": "Version",
|
||
"author": "Författare",
|
||
"website": "Website",
|
||
"permissions": "Behörigheter",
|
||
"enabled": "Aktiverad",
|
||
"status": "Status",
|
||
"path": "Sökväg",
|
||
"lastError": "Fel",
|
||
"hasError": "Fel",
|
||
"updatedAt": "Uppdaterad",
|
||
"createdAt": "Installerad",
|
||
"configKey": "Nyckel",
|
||
"configValue": "Värde",
|
||
"allUsers": "Tillåt alla användare",
|
||
"selectedUsers": "Valda användare",
|
||
"allLibraries": "Tillåt alla bibliotek",
|
||
"selectedLibraries": "Valda bibliotek",
|
||
"allowWriteAccess": ""
|
||
},
|
||
"sections": {
|
||
"status": "Status",
|
||
"info": "Tilläggsinformation",
|
||
"configuration": "Konfiguration",
|
||
"manifest": "Manifest",
|
||
"usersPermission": "Användarbehörigheter",
|
||
"libraryPermission": "Biblioteksbehörigheter"
|
||
},
|
||
"status": {
|
||
"enabled": "Aktiverad",
|
||
"disabled": "Inaktiverad"
|
||
},
|
||
"actions": {
|
||
"enable": "Aktivera",
|
||
"disable": "Inaktivera",
|
||
"disabledDueToError": "Åtgärda felet innan aktivering",
|
||
"disabledUsersRequired": "Välj användare före aktivering",
|
||
"disabledLibrariesRequired": "Välj bibliotek före aktivering",
|
||
"addConfig": "Lägg till konfiguration",
|
||
"rescan": "Scanna om"
|
||
},
|
||
"notifications": {
|
||
"enabled": "Tillägg aktiverat",
|
||
"disabled": "Tillägg inaktiverat",
|
||
"updated": "Tillägg uppdaterat",
|
||
"error": "Fel vid uppdatering av tillägg"
|
||
},
|
||
"validation": {
|
||
"invalidJson": "Konfigurationen måste vara giltig JSON"
|
||
},
|
||
"messages": {
|
||
"configHelp": "Konfigurera tillägget med nyckel–värde-par. Lämna tomt om tillägget inte kräver någon konfiguration.",
|
||
"clickPermissions": "Klicka på en behörighet för mer information",
|
||
"noConfig": "Ingen konfiguration angiven",
|
||
"allUsersHelp": "När den är aktiverad får tillägget tillgång till alla användare, inklusive de som skapas i framtiden.",
|
||
"noUsers": "Inga användare valda",
|
||
"permissionReason": "Orsak",
|
||
"usersRequired": "Detta tillägg kräver åtkomst till användarinformation. Välj vilka användare insticksprogrammet ska ha åtkomst till, eller aktivera 'Tillåt alla användare'.",
|
||
"allLibrariesHelp": "När den är aktiverad får tillägget tillgång till alla bibliotek, inklusive de som skapas i framtiden.",
|
||
"noLibraries": "Inga bibliotek valda",
|
||
"librariesRequired": "Detta tillägg kräver tillgång till biblioteksinformation. Välj vilka bibliotek tillägget kan komma åt eller aktivera 'Tillåt alla bibliotek'.",
|
||
"requiredHosts": "Krävda värdar",
|
||
"configValidationError": "Validering av konfigurationen misslyckades:",
|
||
"schemaRenderError": "Kunde inte rendera konfigurationsformuläret. Tilläggets schema kan vara ogiltigt.",
|
||
"allowWriteAccessHelp": ""
|
||
},
|
||
"placeholders": {
|
||
"configKey": "nyckel",
|
||
"configValue": "värde"
|
||
}
|
||
}
|
||
},
|
||
"ra": {
|
||
"auth": {
|
||
"welcome1": "Tack för att du installerade Navidrome!",
|
||
"welcome2": "Skapa först ett admin-konto",
|
||
"confirmPassword": "Bekräfta lösenord",
|
||
"buttonCreateAdmin": "Skapa admin-konto",
|
||
"auth_check_error": "Logga in för att fortsätta",
|
||
"user_menu": "Profil",
|
||
"username": "Användarnamn",
|
||
"password": "Lösenord",
|
||
"sign_in": "Logga in",
|
||
"sign_in_error": "Felaktig inloggning, försök igen",
|
||
"logout": "Logga ut",
|
||
"insightsCollectionNote": "Navidrome samlar anonym användardata för att\nhjälpa projektet att bli bättre. Klicka [här]\nför att läsa mer och avaktivera om du vill"
|
||
},
|
||
"validation": {
|
||
"invalidChars": "Använd enbart bokstäver och siffror",
|
||
"passwordDoesNotMatch": "Lösenordet matchar inte",
|
||
"required": "Krävs",
|
||
"minLength": "Måste ha minst %{min} tecken",
|
||
"maxLength": "Får maximalt ha %{max} tecken",
|
||
"minValue": "Måste vara minst %{min}",
|
||
"maxValue": "Får maximalt vara %{max}",
|
||
"number": "Måste vara ett nummer",
|
||
"email": "Måste vara en giltig e-postadress",
|
||
"oneOf": "Måste vara en av: %{options}",
|
||
"regex": "Måste matcha ett specifikt format (regexp): %{pattern}",
|
||
"unique": "Måste vara unik",
|
||
"url": "Måste vara en giltig URL"
|
||
},
|
||
"action": {
|
||
"add_filter": "Lägg till filter",
|
||
"add": "Lägg till",
|
||
"back": "Tillbaka",
|
||
"bulk_actions": "1 objekt vald |||| %{smart_count} objekt valda",
|
||
"cancel": "Avbryt",
|
||
"clear_input_value": "Rensa",
|
||
"clone": "Klona",
|
||
"confirm": "Bekräfta",
|
||
"create": "Skapa",
|
||
"delete": "Ta bort",
|
||
"edit": "Redigera",
|
||
"export": "Exportera",
|
||
"list": "Lista",
|
||
"refresh": "Uppdatera",
|
||
"remove_filter": "Ta bort filter",
|
||
"remove": "Radera",
|
||
"save": "Spara",
|
||
"search": "Sök",
|
||
"show": "Visa",
|
||
"sort": "Sortera",
|
||
"undo": "Ångra",
|
||
"expand": "Expandera",
|
||
"close": "Stäng",
|
||
"open_menu": "Öppna meny",
|
||
"close_menu": "Stäng meny",
|
||
"unselect": "Avmarkera",
|
||
"skip": "Hoppa över",
|
||
"bulk_actions_mobile": "1 |||| %{smart_count}",
|
||
"share": "Dela",
|
||
"download": "Ladda ner"
|
||
},
|
||
"boolean": {
|
||
"true": "Ja",
|
||
"false": "Nej"
|
||
},
|
||
"page": {
|
||
"create": "Skapa %{name}",
|
||
"dashboard": "Dashboard",
|
||
"edit": "%{name} #%{id}",
|
||
"error": "Ett fel uppstod",
|
||
"list": "%{name}",
|
||
"loading": "Laddar",
|
||
"not_found": "Hittade inget",
|
||
"show": "%{name} #%{id}",
|
||
"empty": "Ingen %{name} ännu.",
|
||
"invite": "Vill du lägga till en?"
|
||
},
|
||
"input": {
|
||
"file": {
|
||
"upload_several": "Dra och släpp filer som ska laddas upp eller klicka för att välja dem.",
|
||
"upload_single": "Dra och släpp en fil som ska laddas upp eller klicka för att välja en fil."
|
||
},
|
||
"image": {
|
||
"upload_several": "Dra och släpp bilder som ska laddas upp eller klicka för att välja dem.",
|
||
"upload_single": "Dra och släpp en bild som ska laddas upp eller klicka för att välja en bild."
|
||
},
|
||
"references": {
|
||
"all_missing": "Hittade ingen referensdata.",
|
||
"many_missing": "Minst en av de associerade referenserna verkar inte längre vara tillgänglig.",
|
||
"single_missing": "Associerade referenser verkar inte längre vara tillgängliga."
|
||
},
|
||
"password": {
|
||
"toggle_visible": "Dölj password",
|
||
"toggle_hidden": "Visa password"
|
||
}
|
||
},
|
||
"message": {
|
||
"about": "Om",
|
||
"are_you_sure": "Är du säker?",
|
||
"bulk_delete_content": "Vill du verkligen ta bort %{name}? |||| Vill du verkligen ta bort dessa %{smart_count} objekt?",
|
||
"bulk_delete_title": "Ta bort %{name} |||| Ta bort %{smart_count} %{name}",
|
||
"delete_content": "Vill du verkligen ta bort detta innehåll?",
|
||
"delete_title": "Ta bort %{name} #%{id}",
|
||
"details": "Detaljer",
|
||
"error": "Ett klientfel uppstod och begäran kunde inte slutföras.",
|
||
"invalid_form": "Formuläret är ogiltigt. Kontrollera eventuella fel",
|
||
"loading": "Sidan läses in, var god vänta",
|
||
"no": "Nej",
|
||
"not_found": "Antingen skrev du fel URL eller så följde du en ogiltig länk.",
|
||
"yes": "Ja",
|
||
"unsaved_changes": "Du har osparade ändringar. Ignorera dem?"
|
||
},
|
||
"navigation": {
|
||
"no_results": "Inga resultat hittades",
|
||
"no_more_results": "Sidnumret %{page} finns inte. Gå tillbaka till föregående sida.",
|
||
"page_out_of_boundaries": "Sidnumret %{page} finns inte",
|
||
"page_out_from_end": "Det finns inga fler sidor",
|
||
"page_out_from_begin": "Det finns ingen sida före sida 1",
|
||
"page_range_info": "%{offsetBegin}-%{offsetEnd} av %{total}",
|
||
"page_rows_per_page": "Antal per sida:",
|
||
"next": "Nästa",
|
||
"prev": "Föregående",
|
||
"skip_nav": "Hoppa till innehåll"
|
||
},
|
||
"notification": {
|
||
"updated": "Element uppdaterat |||| %{smart_count} element uppdaterade",
|
||
"created": "Element skapat",
|
||
"deleted": "Element borttaget |||| %{smart_count} element borttagna",
|
||
"bad_item": "Felaktigt element",
|
||
"item_doesnt_exist": "Element finns inte",
|
||
"http_error": "Kommunikationsfel med servern",
|
||
"data_provider_error": "Fel i dataProvider. Kontrollera din konsol för mer information.",
|
||
"i18n_error": "Kunde inte läsa in översättningen av det valda språket",
|
||
"canceled": "Åtgärden avbröts",
|
||
"logged_out": "Sessionen har avslutats, anslut på nytt.",
|
||
"new_version": "Det finns en ny version! Uppdatera detta fönster."
|
||
},
|
||
"toggleFieldsMenu": {
|
||
"columnsToDisplay": "Kolumner att visa",
|
||
"layout": "Layout",
|
||
"grid": "Rutnät",
|
||
"table": "Tabell"
|
||
}
|
||
},
|
||
"message": {
|
||
"note": "OBSERVERA",
|
||
"transcodingDisabled": "Inställning för kodning via webbgränssnittet är av säkerhetsskäl ej aktiverat. Starta om servern med alternativet %{config} markerat om du vill göra ändringar (redigera eller lägga till).",
|
||
"transcodingEnabled": "Navidrome körs för närvarande med %{config}, vilket gör att systemkommandon kan köras från webbplattformen. Du rekommenderas av säkerhetsskäl att du stänger av den och bara slår på den när du ställer in omkodning.",
|
||
"songsAddedToPlaylist": "La till en låt i spellistan |||| La till %{smart_count} låtar i spellistan",
|
||
"noPlaylistsAvailable": "Ingen tillgänglig",
|
||
"delete_user_title": "Ta bort användare '%{name}'",
|
||
"delete_user_content": "Är du säker på att du vill ta bort denna användare (inklusive spellistor och inställningar)?",
|
||
"notifications_blocked": "Du har blockerat meddelanden från denna sajt in din webbläsares inställningar",
|
||
"notifications_not_available": "Denna webbläsare stödjer inte skrivbordsmeddelanden eller du använder inte Navidrome via https",
|
||
"lastfmLinkSuccess": "Last.fm är länkat och scrobbling är aktivt",
|
||
"lastfmLinkFailure": "Last.fm kunde inte länkas",
|
||
"lastfmUnlinkSuccess": "Last.fm är inte längre länkat och scrobbling är deaktiverat",
|
||
"lastfmUnlinkFailure": "Last.fm kunde inte avlänkas",
|
||
"openIn": {
|
||
"lastfm": "Öppna i Last.fm",
|
||
"musicbrainz": "Öppna i MusicBrainz"
|
||
},
|
||
"lastfmLink": "Läs mer...",
|
||
"listenBrainzLinkSuccess": "ListenBrainz är länkat och scrobbling är aktivt som användare: %{user}",
|
||
"listenBrainzLinkFailure": "ListenBrainz kunde inte länkas: %{error}",
|
||
"listenBrainzUnlinkSuccess": "ListenBrainz är inte längre länkat och scrobbling är deaktiverat",
|
||
"listenBrainzUnlinkFailure": "ListenBrainz kunde inte avlänkas",
|
||
"downloadOriginalFormat": "Ladda ner i originalformat",
|
||
"shareOriginalFormat": "Dela i originalformat",
|
||
"shareDialogTitle": "Dela %{resource} '%{name}'",
|
||
"shareBatchDialogTitle": "Dela en %{resource} |||| Dela %{smart_count} %{resource}",
|
||
"shareSuccess": "URL kopierades till urklipp: %{url}",
|
||
"shareFailure": "Fel vid kopiering av URL %{url} till urklipp",
|
||
"downloadDialogTitle": "Ladda ner %{resource} '%{name}' (%{size})",
|
||
"shareCopyToClipboard": "Kopiera till urklipp: Ctrl+C, Enter",
|
||
"remove_missing_title": "Ta bort saknade filer",
|
||
"remove_missing_content": "Är du säker på att du vill ta bort de valda saknade filerna från databasen? Detta kommer permanent radera alla referenser till dem, inklusive antal spelningar och betyg.",
|
||
"remove_all_missing_title": "Ta bort alla saknade filer",
|
||
"remove_all_missing_content": "Är du säker på att du vill ta bort alla saknade filer från databasen? Detta kommer permanent radera alla referenser till dem, inklusive antal spelningar och betyg.",
|
||
"noSimilarSongsFound": "Hittade inga liknande låtar",
|
||
"noTopSongsFound": "Hittade inga topplåtar",
|
||
"startingInstantMix": "Laddar direktmix..."
|
||
},
|
||
"menu": {
|
||
"library": "Bibliotek",
|
||
"settings": "Inställningar",
|
||
"version": "Version",
|
||
"theme": "Tema",
|
||
"personal": {
|
||
"name": "Personligt",
|
||
"options": {
|
||
"theme": "Tema",
|
||
"language": "Språk",
|
||
"defaultView": "Standardvy",
|
||
"desktop_notifications": "Skrivbordsmeddelanden",
|
||
"lastfmScrobbling": "Scrobbla till Last.fm",
|
||
"listenBrainzScrobbling": "Scrobbla till ListenBrainz",
|
||
"replaygain": "ReplayGain-läge",
|
||
"preAmp": "ReplayGain PreAmp (dB)",
|
||
"gain": {
|
||
"none": "Inaktiverad",
|
||
"album": "Använd gain för album",
|
||
"track": "Använd gain für låtar"
|
||
},
|
||
"lastfmNotConfigured": "Last.fm API-nyckel är inte konfigurerad"
|
||
}
|
||
},
|
||
"albumList": "Album",
|
||
"about": "Om",
|
||
"playlists": "Spellistor",
|
||
"sharedPlaylists": "Delade spellistor",
|
||
"librarySelector": {
|
||
"allLibraries": "Alla bibliotek (%{count})",
|
||
"multipleLibraries": "%{selected} av %{total} bibliotek",
|
||
"selectLibraries": "Välj bibliotek",
|
||
"none": "Inga"
|
||
}
|
||
},
|
||
"player": {
|
||
"playListsText": "Spela kön",
|
||
"openText": "Öppna",
|
||
"closeText": "Stäng",
|
||
"notContentText": "Ingen musik",
|
||
"clickToPlayText": "Klicka för att spela",
|
||
"clickToPauseText": "Klicka för att pausa",
|
||
"nextTrackText": "Nästa låt",
|
||
"previousTrackText": "Föregående låt",
|
||
"reloadText": "Ladda om",
|
||
"volumeText": "Volym",
|
||
"toggleLyricText": "Låttext av/på",
|
||
"toggleMiniModeText": "Minimera",
|
||
"destroyText": "Radera",
|
||
"downloadText": "Ladda ner",
|
||
"removeAudioListsText": "Ta bort audiolistor",
|
||
"clickToDeleteText": "Klicka för att ta bort %{name}",
|
||
"emptyLyricText": "Ingen låttext",
|
||
"playModeText": {
|
||
"order": "I ordningsföljd",
|
||
"orderLoop": "Upprepa",
|
||
"singleLoop": "Upprepa en",
|
||
"shufflePlay": "Shuffle"
|
||
}
|
||
},
|
||
"about": {
|
||
"links": {
|
||
"homepage": "Hemsida",
|
||
"source": "Källkod",
|
||
"featureRequests": "Funktionalitetförfrågan",
|
||
"lastInsightsCollection": "Senaste Insights-kollektion",
|
||
"insights": {
|
||
"disabled": "Inaktiverad",
|
||
"waiting": "Väntar"
|
||
}
|
||
},
|
||
"tabs": {
|
||
"about": "Om",
|
||
"config": "Inställningar"
|
||
},
|
||
"config": {
|
||
"configName": "Inställningsnamn",
|
||
"environmentVariable": "Miljövariabel",
|
||
"currentValue": "Nuvarande värde",
|
||
"configurationFile": "Inställningsfil",
|
||
"exportToml": "Exportera inställningar (TOML)",
|
||
"exportSuccess": "Inställningarna kopierade till urklippet i TOML-format",
|
||
"exportFailed": "Kopiering av inställningarna misslyckades",
|
||
"devFlagsHeader": "Utvecklingsflaggor (kan ändras eller tas bort)",
|
||
"devFlagsComment": "Dessa inställningar är experimentella och kan tas bort i framtida versioner",
|
||
"downloadToml": "Ladda ner konfiguration (TOML)"
|
||
}
|
||
},
|
||
"activity": {
|
||
"title": "Aktivitet",
|
||
"totalScanned": "Genomsökta mappar",
|
||
"quickScan": "Snabbscan",
|
||
"fullScan": "Komplett scan",
|
||
"serverUptime": "Serverdrifttid",
|
||
"serverDown": "OFFLINE",
|
||
"scanType": "Typ",
|
||
"status": "Fel vid scanning",
|
||
"elapsedTime": "Spelad tid",
|
||
"selectiveScan": "Urval"
|
||
},
|
||
"help": {
|
||
"title": "Navidrome kortkommandon",
|
||
"hotkeys": {
|
||
"show_help": "Visa denna hjälp",
|
||
"toggle_menu": "Växla sidomeny",
|
||
"toggle_play": "Spela / pausa",
|
||
"prev_song": "Föregående låt",
|
||
"next_song": "Nästa låt",
|
||
"vol_up": "Volym upp",
|
||
"vol_down": "Volym ner",
|
||
"toggle_love": "Lägg till låt i favoriter",
|
||
"current_song": "Hoppa till nuvarande låt"
|
||
}
|
||
},
|
||
"nowPlaying": {
|
||
"title": "Spelas nu",
|
||
"empty": "Inget spelas",
|
||
"minutesAgo": "%{smart_count} minut sedan |||| %{smart_count} minuter sedan"
|
||
}
|
||
}
|