mirror of
https://github.com/navidrome/navidrome.git
synced 2026-04-28 03:19:38 +00:00
Some checks are pending
Pipeline: Test, Lint, Build / Push to Docker Hub (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Get version info (push) Waiting to run
Pipeline: Test, Lint, Build / Lint Go code (push) Waiting to run
Pipeline: Test, Lint, Build / Test Go code (push) Waiting to run
Pipeline: Test, Lint, Build / Test JS code (push) Waiting to run
Pipeline: Test, Lint, Build / Lint i18n files (push) Waiting to run
Pipeline: Test, Lint, Build / Check Docker configuration (push) Waiting to run
Pipeline: Test, Lint, Build / Cleanup digest artifacts (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-1 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-2 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-3 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-4 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-5 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-6 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-7 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-8 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-9 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build-10 (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Push to GHCR (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Build Windows installers (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Package/Release (push) Blocked by required conditions
Pipeline: Test, Lint, Build / Upload Linux PKG (push) Blocked by required conditions
POEditor export / push-translations (push) Has been skipped
* 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>
721 lines
28 KiB
JSON
721 lines
28 KiB
JSON
{
|
|
"languageName": "Suomi",
|
|
"resources": {
|
|
"song": {
|
|
"name": "Kappale |||| Kappaleet",
|
|
"fields": {
|
|
"albumArtist": "Albumin artisti",
|
|
"duration": "Kesto",
|
|
"trackNumber": "#",
|
|
"playCount": "Soittokerrat",
|
|
"title": "Kappale",
|
|
"artist": "Artisti",
|
|
"album": "Albumi",
|
|
"path": "Tiedostopolku",
|
|
"genre": "Tyylilaji",
|
|
"compilation": "Kokoelma",
|
|
"year": "Vuosi",
|
|
"size": "Tiedostokoko",
|
|
"updatedAt": "Päivitetty",
|
|
"bitRate": "Bittinopeus",
|
|
"discSubtitle": "Levyn tekstitys",
|
|
"starred": "Suosikki",
|
|
"comment": "Kommentti",
|
|
"rating": "Arvostelu",
|
|
"quality": "Äänenlaatu",
|
|
"bpm": "BPM",
|
|
"playDate": "Viimeksi kuunneltu",
|
|
"channels": "Kanavat",
|
|
"createdAt": "Lisätty",
|
|
"grouping": "Ryhmittely",
|
|
"mood": "Tunnelma",
|
|
"participants": "Lisäosallistujat",
|
|
"tags": "Lisätunnisteet",
|
|
"mappedTags": "Mäpätyt tunnisteet",
|
|
"rawTags": "Raakatunnisteet",
|
|
"bitDepth": "Bittisyvyys",
|
|
"sampleRate": "Näytteenottotaajuus",
|
|
"missing": "Puuttuva",
|
|
"libraryName": "Kirjasto",
|
|
"composer": "Säveltäjä",
|
|
"disc": ""
|
|
},
|
|
"actions": {
|
|
"addToQueue": "Lisää jonoon",
|
|
"playNow": "Soita nyt",
|
|
"addToPlaylist": "Lisää soittolistaan",
|
|
"shuffleAll": "Sekoita kaikki",
|
|
"download": "Lataa",
|
|
"playNext": "Soita seuraavaksi",
|
|
"info": "Info",
|
|
"showInPlaylist": "Näytä soittolistassa",
|
|
"instantMix": "Pikasekoitus"
|
|
}
|
|
},
|
|
"album": {
|
|
"name": "Albumi |||| Albumit",
|
|
"fields": {
|
|
"albumArtist": "Albumin artisti",
|
|
"artist": "Artisti",
|
|
"duration": "Kesto",
|
|
"songCount": "Kappaleita",
|
|
"playCount": "Kuuntelukertoja",
|
|
"name": "Albumi",
|
|
"genre": "Tyylilaji",
|
|
"compilation": "Kokoelma",
|
|
"year": "Vuosi",
|
|
"updatedAt": "Päivitetty",
|
|
"comment": "Kommentti",
|
|
"rating": "Arvostelu",
|
|
"createdAt": "Lisätty",
|
|
"size": "Koko",
|
|
"originalDate": "Alkuperäinen",
|
|
"releaseDate": "Julkaistu",
|
|
"releases": "Julkaisu |||| Julkaisut",
|
|
"released": "Julkaistu",
|
|
"recordLabel": "Levy-yhtiö",
|
|
"catalogNum": "Luettelonumero",
|
|
"releaseType": "Tyyppi",
|
|
"grouping": "Ryhmittely",
|
|
"media": "Media",
|
|
"mood": "Tunnelma",
|
|
"date": "Tallennuspäivä",
|
|
"missing": "Puuttuva",
|
|
"libraryName": "Kirjasto"
|
|
},
|
|
"actions": {
|
|
"playAll": "Soita",
|
|
"playNext": "Soita seuraavaksi",
|
|
"addToQueue": "Lisää jonoon",
|
|
"shuffle": "Sekoita",
|
|
"addToPlaylist": "Lisää soittolistaan",
|
|
"download": "Lataa",
|
|
"info": "Info",
|
|
"share": "Jaa"
|
|
},
|
|
"lists": {
|
|
"all": "Kaikki",
|
|
"random": "Satunnainen",
|
|
"recentlyAdded": "Viimeksi lisätyt",
|
|
"recentlyPlayed": "Viimeksi soitetut",
|
|
"mostPlayed": "Useimmiten soitetut",
|
|
"starred": "Suosikit",
|
|
"topRated": "Tykätyimmät"
|
|
}
|
|
},
|
|
"artist": {
|
|
"name": "Artisti |||| Artistit",
|
|
"fields": {
|
|
"name": "Artisti",
|
|
"albumCount": "Levyjen määrä",
|
|
"songCount": "Kappaleiden määrä",
|
|
"playCount": "Kuuntelukertoja",
|
|
"rating": "Arvostelu",
|
|
"genre": "Tyylilaji",
|
|
"size": "Koko",
|
|
"role": "Rooli",
|
|
"missing": "Puuttuva"
|
|
},
|
|
"roles": {
|
|
"albumartist": "Albumitaiteilija |||| Albumitaiteilijat",
|
|
"artist": "Artisti |||| Artistit",
|
|
"composer": "Säveltäjä |||| Säveltäjät",
|
|
"conductor": "Kapellimestari |||| Kapellimestarit",
|
|
"lyricist": "Sanoittaja |||| Sanoittajat",
|
|
"arranger": "Musiikkisovittaja |||| Musiikkisovittajat",
|
|
"producer": "Musiikkituottaja |||| Musiikkituottajat",
|
|
"director": "Musiikkiohjaaja |||| Musiikkiohjaajat",
|
|
"engineer": "Ääniteknikko |||| Ääniteknikot",
|
|
"mixer": "Miksaaja |||| Miksaajat",
|
|
"remixer": "Remiksaaja |||| Remiksaajat",
|
|
"djmixer": "DJ-miksaaja |||| DJ-miksaajat",
|
|
"performer": "Esiintyjä |||| Esiintyjät",
|
|
"maincredit": "Albumin artisti tai artisti |||| Albumin artistit tai artistit"
|
|
},
|
|
"actions": {
|
|
"shuffle": "Sekoita",
|
|
"radio": "Radio",
|
|
"topSongs": "Suosituimmat kappaleet"
|
|
}
|
|
},
|
|
"user": {
|
|
"name": "Käyttäjä |||| Käyttäjät",
|
|
"fields": {
|
|
"userName": "Käyttäjätunnus",
|
|
"isAdmin": "Pääkäyttäjä",
|
|
"lastLoginAt": "Viimeksi kirjautunut",
|
|
"updatedAt": "Päivitetty",
|
|
"name": "Nimi",
|
|
"password": "Salasana",
|
|
"createdAt": "Luotu",
|
|
"changePassword": "Vaihda salasana?",
|
|
"currentPassword": "Nykyinen salasana",
|
|
"newPassword": "Uusi salasana",
|
|
"token": "Avain",
|
|
"lastAccessAt": "Viimeisin käyttö",
|
|
"libraries": "Kirjastot"
|
|
},
|
|
"helperTexts": {
|
|
"name": "Nimen muutos tulee voimaan kun seuraavan kerran kirjaudut sisään",
|
|
"libraries": "Valitse tietyt kirjastot tälle käyttäjälle tai jätä tyhjäksi käyttääksesi oletuskirjastoja"
|
|
},
|
|
"notifications": {
|
|
"created": "Käyttäjä luotu",
|
|
"updated": "Käyttäjä päivitetty",
|
|
"deleted": "Käyttäjä poistettu"
|
|
},
|
|
"message": {
|
|
"listenBrainzToken": "Syötä ListenBrainz avain.",
|
|
"clickHereForToken": "Paina tästä saadaksesi avaimen",
|
|
"selectAllLibraries": "Valitse kaikki kirjastot",
|
|
"adminAutoLibraries": "Admin-käyttäjillä on automaattisesti pääsy kaikkiin kirjastoihin"
|
|
},
|
|
"validation": {
|
|
"librariesRequired": "Vähintään yksi kirjasto on valittava ei-admin käyttäjille"
|
|
}
|
|
},
|
|
"player": {
|
|
"name": "Soitin |||| Soittimet",
|
|
"fields": {
|
|
"name": "Nimi",
|
|
"transcodingId": "Muunnos",
|
|
"maxBitRate": "Suurin bittinopeus",
|
|
"client": "Sovellus",
|
|
"userName": "Käyttäjänimi",
|
|
"lastSeen": "Viimeksi käytetty",
|
|
"reportRealPath": "Ilmoita todellinen polku",
|
|
"scrobbleEnabled": "Lähetä kuuntelutottumukset ulkoiseen palveluun"
|
|
}
|
|
},
|
|
"transcoding": {
|
|
"name": "Muunnos |||| Muunnokset",
|
|
"fields": {
|
|
"name": "Nimi",
|
|
"targetFormat": "Kohde formaatti",
|
|
"defaultBitRate": "Oletus bittinopeus",
|
|
"command": "Komento"
|
|
}
|
|
},
|
|
"playlist": {
|
|
"name": "Soittolista |||| Soittolistat",
|
|
"fields": {
|
|
"name": "Nimi",
|
|
"duration": "Kesto",
|
|
"ownerName": "Omistaja",
|
|
"public": "Julkinen",
|
|
"updatedAt": "Päivitetty",
|
|
"createdAt": "Luotu",
|
|
"songCount": "Kappaleita",
|
|
"comment": "Kommentti",
|
|
"sync": "Automaattinen tuonti",
|
|
"path": "Tuo"
|
|
},
|
|
"actions": {
|
|
"selectPlaylist": "Valitse soittolista:",
|
|
"addNewPlaylist": "Luo \"%{name}\"",
|
|
"export": "Vie",
|
|
"makePublic": "Tee julkinen",
|
|
"makePrivate": "Tee yksityinen",
|
|
"saveQueue": "Tallenna jono soittolistaan",
|
|
"searchOrCreate": "Etsi soittolistoja tai kirjoita luodaksesi uuden...",
|
|
"pressEnterToCreate": "Paina Enter luodaksesi uuden soittolistan",
|
|
"removeFromSelection": "Poista valinnasta"
|
|
},
|
|
"message": {
|
|
"duplicate_song": "Lisää olemassa oleva kappale",
|
|
"song_exist": "Olet lisäämässä soittolistalla jo olevaa kappaletta. Haluatko lisätä saman kappaleen vai ohittaa sen?",
|
|
"noPlaylistsFound": "Soittolistoja ei löytynyt",
|
|
"noPlaylists": "Soittolistoja ei ole saatavilla"
|
|
}
|
|
},
|
|
"radio": {
|
|
"name": "Radio |||| Radiot",
|
|
"fields": {
|
|
"name": "Nimi",
|
|
"streamUrl": "Streamin URL",
|
|
"homePageUrl": "Kotisivu",
|
|
"updatedAt": "Päivitetty",
|
|
"createdAt": "Luotu"
|
|
},
|
|
"actions": {
|
|
"playNow": "Kuuntele nyt"
|
|
}
|
|
},
|
|
"share": {
|
|
"name": "Jako |||| Jaot",
|
|
"fields": {
|
|
"username": "Jakanut",
|
|
"url": "URL",
|
|
"description": "Kuvaus",
|
|
"contents": "Sisältö",
|
|
"expiresAt": "Vanhenee",
|
|
"lastVisitedAt": "Viimeksi vierailtu",
|
|
"visitCount": "Vierailuja",
|
|
"format": "Formaatti",
|
|
"maxBitRate": "Max. bittinopeus",
|
|
"updatedAt": "Päivitetty",
|
|
"createdAt": "Luotu",
|
|
"downloadable": "Salli lataus?"
|
|
}
|
|
},
|
|
"missing": {
|
|
"name": "Puuttuva tiedosto|||| Puuttuvat tiedostot",
|
|
"fields": {
|
|
"path": "Polku",
|
|
"size": "Koko",
|
|
"updatedAt": "Katosi",
|
|
"libraryName": "Kirjasto"
|
|
},
|
|
"actions": {
|
|
"remove": "Poista",
|
|
"remove_all": "Poista kaikki"
|
|
},
|
|
"notifications": {
|
|
"removed": "Puuttuvat tiedostot poistettu"
|
|
},
|
|
"empty": "Ei puuttuvia tiedostoja"
|
|
},
|
|
"library": {
|
|
"name": "Kirjasto |||| Kirjastot",
|
|
"fields": {
|
|
"name": "Nimi",
|
|
"path": "Polku",
|
|
"remotePath": "Etäpolku",
|
|
"lastScanAt": "Viimeisin skannaus",
|
|
"songCount": "Kappaleet",
|
|
"albumCount": "Albumit",
|
|
"artistCount": "Artistit",
|
|
"totalSongs": "Kappaleet",
|
|
"totalAlbums": "Albumit",
|
|
"totalArtists": "Artistit",
|
|
"totalFolders": "Kansiot",
|
|
"totalFiles": "Tiedostot",
|
|
"totalMissingFiles": "Puuttuvat tiedostot",
|
|
"totalSize": "Kokonaiskoko",
|
|
"totalDuration": "Kesto",
|
|
"defaultNewUsers": "Oletus uusille käyttäjille",
|
|
"createdAt": "Luotu",
|
|
"updatedAt": "Päivitetty"
|
|
},
|
|
"sections": {
|
|
"basic": "Perustiedot",
|
|
"statistics": "Tilastot"
|
|
},
|
|
"actions": {
|
|
"scan": "Skannaa kirjasto",
|
|
"manageUsers": "Hallitse käyttäjien pääsyä",
|
|
"viewDetails": "Näytä tiedot",
|
|
"quickScan": "Nopea skannaus",
|
|
"fullScan": "Täysi skannaus"
|
|
},
|
|
"notifications": {
|
|
"created": "Kirjasto luotu onnistuneesti",
|
|
"updated": "Kirjasto päivitetty onnistuneesti",
|
|
"deleted": "Kirjasto poistettu onnistuneesti",
|
|
"scanStarted": "Kirjaston skannaus aloitettu",
|
|
"scanCompleted": "Kirjaston skannaus valmistunut",
|
|
"quickScanStarted": "Nopea skannaus aloitettu",
|
|
"fullScanStarted": "Täysi skannaus aloitettu",
|
|
"scanError": "Virhe skannauksen käynnistyksessä. Tarkista lokit"
|
|
},
|
|
"validation": {
|
|
"nameRequired": "Kirjaston nimi vaaditaan",
|
|
"pathRequired": "Kirjaston polku vaaditaan",
|
|
"pathNotDirectory": "Kirjaston polun tulee olla hakemisto",
|
|
"pathNotFound": "Kirjaston polkua ei löytynyt",
|
|
"pathNotAccessible": "Kirjaston polku ei ole käytettävissä",
|
|
"pathInvalid": "Virheellinen kirjaston polku"
|
|
},
|
|
"messages": {
|
|
"deleteConfirm": "Haluatko varmasti poistaa tämän kirjaston? Kaikki siihen liittyvät tiedot ja käyttäjien pääsy poistetaan.",
|
|
"scanInProgress": "Skannaus käynnissä...",
|
|
"noLibrariesAssigned": "Tälle käyttäjälle ei ole määritetty kirjastoja"
|
|
}
|
|
},
|
|
"plugin": {
|
|
"name": "Liitännäinen |||| Liitännäiset",
|
|
"fields": {
|
|
"id": "ID",
|
|
"name": "Nimi",
|
|
"description": "Kuvaus",
|
|
"version": "Versio",
|
|
"author": "Tekijä",
|
|
"website": "Verkkosivusto",
|
|
"permissions": "Oikeudet",
|
|
"enabled": "Käytössä",
|
|
"status": "Tila",
|
|
"path": "Polku",
|
|
"lastError": "Virhe",
|
|
"hasError": "Virhe",
|
|
"updatedAt": "Päivitetty",
|
|
"createdAt": "Asennettu",
|
|
"configKey": "Avain",
|
|
"configValue": "Arvo",
|
|
"allUsers": "Salli kaikki käyttäjät",
|
|
"selectedUsers": "Valitut käyttäjät",
|
|
"allLibraries": "Salli kaikki kirjastot",
|
|
"selectedLibraries": "Valitut kirjastot",
|
|
"allowWriteAccess": "Salli kirjoitusoikeus"
|
|
},
|
|
"sections": {
|
|
"status": "Tila",
|
|
"info": "Lisäosan tiedot",
|
|
"configuration": "Määritykset",
|
|
"manifest": "Luettelo",
|
|
"usersPermission": "Käyttäjäoikeudet",
|
|
"libraryPermission": "Kirjaston oikeudet"
|
|
},
|
|
"status": {
|
|
"enabled": "Käytössä",
|
|
"disabled": "Ei käytössä"
|
|
},
|
|
"actions": {
|
|
"enable": "Ota käyttöön",
|
|
"disable": "Poista käytöstä",
|
|
"disabledDueToError": "Korjaa virhe ennen käyttöönottoa",
|
|
"disabledUsersRequired": "Valitse käyttäjät ennen käyttöönottoa",
|
|
"disabledLibrariesRequired": "Valitse kirjastot ennen käyttöönottoa",
|
|
"addConfig": "Lisää määritykset",
|
|
"rescan": "Skannaa uudelleen"
|
|
},
|
|
"notifications": {
|
|
"enabled": "Lisäosa käytössä",
|
|
"disabled": "Lisäosa ei käytössä",
|
|
"updated": "Lisäosa päivitetty",
|
|
"error": "Virhe lisäosaa päivitettäessä"
|
|
},
|
|
"validation": {
|
|
"invalidJson": "Määrityksen on oltava kelvollinen JSON"
|
|
},
|
|
"messages": {
|
|
"configHelp": "Määritä lisäosa avain-arvo-parien avulla. Jätä tyhjäksi, jos lisäosa ei vaadi määrityksiä.",
|
|
"clickPermissions": "Napsauta käyttöoikeutta saadaksesi lisätietoja",
|
|
"noConfig": "Ei määritettyjä asetuksia",
|
|
"allUsersHelp": "Kun tämä on käytössä, laajennuksella on pääsy kaikkiin käyttäjiin, myös tulevaisuudessa luotaviin.",
|
|
"noUsers": "Ei valittuja käyttäjiä",
|
|
"permissionReason": "Syy",
|
|
"usersRequired": "Tämä laajennus vaatii pääsyn käyttäjätietoihin. Valitse käyttäjät, joihin laajennus voi päästä, tai ota käyttöön 'Salli kaikki käyttäjät'.",
|
|
"allLibrariesHelp": "Kun tämä on käytössä, laajennuksella on pääsy kaikkiin kirjastoihin, myös tulevaisuudessa luotaviin.",
|
|
"noLibraries": "Ei valittuja kirjastoja",
|
|
"librariesRequired": "Tämä laajennus vaatii pääsyn kirjastotietoihin. Valitse, mihin kirjastoihin laajennus voi käyttää, tai ota käyttöön 'Salli kaikki kirjastot'.",
|
|
"requiredHosts": "Vaaditut palvelimet",
|
|
"configValidationError": "Määrityksen validointi epäonnistui:",
|
|
"schemaRenderError": "Konfiguraatiolomaketta ei voi näyttää. Lisäosan skeema saattaa olla virheellinen.",
|
|
"allowWriteAccessHelp": "Kun otettu käyttöön, liitännäinen voi muokata tiedostoja kirjastohakemistoissa. Oletuksena liitännäisillä on vain luku -oikeus."
|
|
},
|
|
"placeholders": {
|
|
"configKey": "avain",
|
|
"configValue": "arvo"
|
|
}
|
|
}
|
|
},
|
|
"ra": {
|
|
"auth": {
|
|
"welcome1": "Kiitos, että asensit Navidromen!",
|
|
"welcome2": "Aloittaaksesi luo admin-käyttäjä",
|
|
"confirmPassword": "Vahvista salasana",
|
|
"buttonCreateAdmin": "Luo Admin",
|
|
"auth_check_error": "Kirjaudu sisään jatkaaksesi",
|
|
"user_menu": "Profiili",
|
|
"username": "Käyttäjänimi",
|
|
"password": "Salasana",
|
|
"sign_in": "Kirjaudu",
|
|
"sign_in_error": "Kirjautuminen epäonnistui. Yritä uudelleen",
|
|
"logout": "Kirjaudu ulos",
|
|
"insightsCollectionNote": "Navidrome kerää anonyymejä käyttötietoja auttaakseen parantamaan\nprojektia. Paina [tästä] saadaksesi lisätietoa\nja halutessasi kieltäytyä"
|
|
},
|
|
"validation": {
|
|
"invalidChars": "Käytä vain kirjaimia ja numeroita",
|
|
"passwordDoesNotMatch": "Salasanat eivät täsmää",
|
|
"required": "Pakollinen",
|
|
"minLength": "Pitää vähintään olla %{min} merkkiä",
|
|
"maxLength": "Saa olla enintään %{max} merkkiä",
|
|
"minValue": "Pitää olla vähintään %{min}",
|
|
"maxValue": "Saa olla enentään %{max}",
|
|
"number": "Pitää olla numero",
|
|
"email": "Pitää olla oikea sähköpostiosoite",
|
|
"oneOf": "Pitää olla joku näistä: %{options}",
|
|
"regex": "Pitää olla määrätyssä muodossa (regexp): %{pattern}",
|
|
"unique": "Pitää olla yksilöllinen",
|
|
"url": "Virheellinen URL"
|
|
},
|
|
"action": {
|
|
"add_filter": "Lisää suodatin",
|
|
"add": "Lisää",
|
|
"back": "Palaa",
|
|
"bulk_actions": "1 kohde valittu |||| %{smart_count} kohdetta valittu",
|
|
"cancel": "Peru",
|
|
"clear_input_value": "Tyhjennä",
|
|
"clone": "Kopio",
|
|
"confirm": "Vahvista",
|
|
"create": "Luo",
|
|
"delete": "Poista",
|
|
"edit": "Muokkaa",
|
|
"export": "Vie",
|
|
"list": "Lista",
|
|
"refresh": "Päivitä",
|
|
"remove_filter": "Poista suodatin",
|
|
"remove": "Poista",
|
|
"save": "Tallenna",
|
|
"search": "Etsi",
|
|
"show": "Näytä",
|
|
"sort": "Järjestä",
|
|
"undo": "Peru",
|
|
"expand": "Laajenna",
|
|
"close": "Sulje",
|
|
"open_menu": "Avaa valikko",
|
|
"close_menu": "Sulje valikko",
|
|
"unselect": "Poista valinta",
|
|
"skip": "Ohita",
|
|
"bulk_actions_mobile": "1 |||| %{smart_count}",
|
|
"share": "Jako",
|
|
"download": "Lataa"
|
|
},
|
|
"boolean": {
|
|
"true": "Kyllä",
|
|
"false": "Ei"
|
|
},
|
|
"page": {
|
|
"create": "Luo %{name}",
|
|
"dashboard": "Dashboard",
|
|
"edit": "%{name} #%{id}",
|
|
"error": "Jotainen meni pieleen",
|
|
"list": "%{name}",
|
|
"loading": "Ladataan",
|
|
"not_found": "Ei löytynyt",
|
|
"show": "%{name} #%{id}",
|
|
"empty": "%{name} on tyhjä",
|
|
"invite": "Haluatko luoda uuden?"
|
|
},
|
|
"input": {
|
|
"file": {
|
|
"upload_several": "Pudota tiedostoja tai valitse useampi ladataksesi ne.",
|
|
"upload_single": "Pudota tiedosto tai valitse tiedosto ladataksesi se."
|
|
},
|
|
"image": {
|
|
"upload_several": "Pudota kuvia tai valitse useampi ladataksesi ne.",
|
|
"upload_single": "Pudota kuva tai valitse kuva ladataksesi se."
|
|
},
|
|
"references": {
|
|
"all_missing": "Viitetietoja ei löytynyt.",
|
|
"many_missing": "Ainakin yksi viitetieto näyttäisi puuttuvan.",
|
|
"single_missing": "Viitetietoa ei ole enää saatavilla."
|
|
},
|
|
"password": {
|
|
"toggle_visible": "Piilota salasana",
|
|
"toggle_hidden": "Näytä salasana"
|
|
}
|
|
},
|
|
"message": {
|
|
"about": "Tietoa",
|
|
"are_you_sure": "Oletko varma?",
|
|
"bulk_delete_content": "Oletko varma, että haluat poistaa %{name}? |||| Oletko varma, että haluat poistaa %{smart_count}?",
|
|
"bulk_delete_title": "Poista %{name} |||| Poista %{smart_count} %{name}",
|
|
"delete_content": "Haluatko varmasti poistaa tämän?",
|
|
"delete_title": "Poista %{name} #%{id}",
|
|
"details": "Yksityiskohdat",
|
|
"error": "Tapahtui virhe, eikä pyyntöäsi voitu suorittaa.",
|
|
"invalid_form": "Lomakkeessa on virhe. Tarkista virheet",
|
|
"loading": "Sivu latautuu, odota hetki",
|
|
"no": "Ei",
|
|
"not_found": "Joko kirjoitit väärän osoitteen tai seuraamasi linkki on rikki.",
|
|
"yes": "Kyllä",
|
|
"unsaved_changes": "Joitakin muutoksiasi ei tallennettu. Haluatko varmasti jättää ne huomiotta?"
|
|
},
|
|
"navigation": {
|
|
"no_results": "Ei tuloksia",
|
|
"no_more_results": "Sivunumeroa %{page} ei löydy. Yritä edellistä sivua.",
|
|
"page_out_of_boundaries": "Sivunumero %{page} on rajojen ulkopuolella",
|
|
"page_out_from_end": "Viimeinen sivu, ei voi edetä",
|
|
"page_out_from_begin": "Ensimmäinen sivu, ei voi palata",
|
|
"page_range_info": "%{offsetBegin}-%{offsetEnd} / %{total}",
|
|
"page_rows_per_page": "Kohteita sivulla:",
|
|
"next": "Seuraava",
|
|
"prev": "Edellinen",
|
|
"skip_nav": "Siirry sisältöön"
|
|
},
|
|
"notification": {
|
|
"updated": "Elementti päivitetty |||| %{smart_count} elementtiä päivitetty",
|
|
"created": "Elementti luotu",
|
|
"deleted": "Elementti poistettu |||| %{smart_count} elementtiä poistettu",
|
|
"bad_item": "Virheellinen elementti",
|
|
"item_doesnt_exist": "Elementtiä ei ole",
|
|
"http_error": "Palvelimen yhteysvirhe",
|
|
"data_provider_error": "Tapahtui virhe. Katso lisätietoja konsolista.",
|
|
"i18n_error": "Käännöksiä valitulle kielelle ei voitu ladata.",
|
|
"canceled": "Toiminto peruttu",
|
|
"logged_out": "Istuntosi on päättynyt, yhdistä uudelleen.",
|
|
"new_version": "Päivitys saatavilla! Päivitä tämä ikkuna."
|
|
},
|
|
"toggleFieldsMenu": {
|
|
"columnsToDisplay": "Näytettävät sarakkeet",
|
|
"layout": "Asettelu",
|
|
"grid": "Ruudukko",
|
|
"table": "Taulukko"
|
|
}
|
|
},
|
|
"message": {
|
|
"note": "HUOM",
|
|
"transcodingDisabled": "Muunnoksen muokkaaminen verkkoliittymän kautta on poistettu tietoturvasyistä käytöstä. Mikäli haluat muuttaa muunnoksen asetuksia käynnistä palvelu uudelleen %{config} asetuksella.",
|
|
"transcodingEnabled": "Navidrome käyttää parhaillaan %{config} asetuksia. Tämä mahdollistaa järjestelmän komentojen suorittamisen muunnoksen asetuksista verkkokäyttöliittymän kautta. Tietoturvasyistä suosittelemme sen käyttöä vain kun teet muutoksia muunnoksen asetuksiin.",
|
|
"songsAddedToPlaylist": "Lisättiin 1 kappale soittolistalle |||| Lisättiin %{smart_count} kappaletta soittolistalle",
|
|
"noPlaylistsAvailable": "Soittolistaa ei saatavilla",
|
|
"delete_user_title": "Poista käyttäjä '%{name}'",
|
|
"delete_user_content": "Haluatko varmasti poistaa tämän käyttäjän ja kaikki hänen tiedot (mukaan lukien soittolistat ja asetukset)?",
|
|
"notifications_blocked": "Olet estänyt tämän sivuston ilmoitukset selaimesi asetuksissa",
|
|
"notifications_not_available": "Tämä selain ei tue työpöytäilmoituksia tai et käytä Navidromea https-yhteyden kautta",
|
|
"lastfmLinkSuccess": "Last.fm onnistuneesti linkitetty ja kuuntelutottumus otettu käyttöön",
|
|
"lastfmLinkFailure": "Last.fm linkitys epäonnistui",
|
|
"lastfmUnlinkSuccess": "Last.fm linkitys poistettu ja kuuntelutottumus poistettu käytöstä",
|
|
"lastfmUnlinkFailure": "Last.fm linkityksen poisto epäonnistui",
|
|
"openIn": {
|
|
"lastfm": "Avaa Last.fm:ssä",
|
|
"musicbrainz": "Avaa MusicBrainz:ssä"
|
|
},
|
|
"lastfmLink": "Lue lisää...",
|
|
"listenBrainzLinkSuccess": "ListenBrainz linkitetty onnistuneesti ja käyttäjän %{user} kuuntelutottumus otettu käyttöön",
|
|
"listenBrainzLinkFailure": "Ei voitu linkittää ListenBrainz palveluun: %{error}",
|
|
"listenBrainzUnlinkSuccess": "Linkitys ListenBrainz poistettu ja kuuntelutottumus poistettu käytöstä",
|
|
"listenBrainzUnlinkFailure": "ListenBrainz linkitystä ei voitu poistaa",
|
|
"downloadOriginalFormat": "Lataa alkuperäisessä formaatissa",
|
|
"shareOriginalFormat": "Jaa alkuperäisessä formaatissa",
|
|
"shareDialogTitle": "Jaa %{resource} '%{name}'",
|
|
"shareBatchDialogTitle": "Jako 1 %{resource} |||| Jako %{smart_count} %{resource}",
|
|
"shareSuccess": "Osoite kopioitu leikepöydälle: %{url}",
|
|
"shareFailure": "Virhe kopioitaessa %{url} leikepöydälle",
|
|
"downloadDialogTitle": "Lataa %{resource} '%{name}' (%{size})",
|
|
"shareCopyToClipboard": "Kopio leikepöydälle: Ctrl+C, Enter",
|
|
"remove_missing_title": "Poista puuttuvat tiedostot",
|
|
"remove_missing_content": "Oletko varma, että haluat poistaa valitut puuttuvat tiedostot tietokannasta? Tämä poistaa pysyvästi kaikki viittaukset niihin, mukaan lukien niiden soittojen määrät ja arvostelut.",
|
|
"remove_all_missing_title": "Poista kaikki puuttuvat tiedostot",
|
|
"remove_all_missing_content": "Haluatko varmasti poistaa kaikki puuttuvat tiedostot tietokannasta? Tämä poistaa pysyvästi kaikki viittaukset niihin, mukaan lukien toistomäärät ja arvostelut.",
|
|
"noSimilarSongsFound": "Samankaltaisia kappaleita ei löytynyt",
|
|
"noTopSongsFound": "Suosituimpia kappaleita ei löytynyt",
|
|
"startingInstantMix": "Ladataan Pikasekoitus...",
|
|
"uploadCover": "Lataa kansikuva",
|
|
"removeCover": "Poista kansikuva",
|
|
"coverUploaded": "Kansikuva päivitetty",
|
|
"coverRemoved": "Kansikuva poistettu",
|
|
"coverUploadError": "Virhe ladattaessa kansikuvaa",
|
|
"coverRemoveError": "Virhe poistettaessa kansikuvaa"
|
|
},
|
|
"menu": {
|
|
"library": "Kirjasto",
|
|
"settings": "Asetukset",
|
|
"version": "Versio",
|
|
"theme": "Teema",
|
|
"personal": {
|
|
"name": "Omat asetukset",
|
|
"options": {
|
|
"theme": "Teema",
|
|
"language": "Kieli",
|
|
"defaultView": "Oletusnäkymä",
|
|
"desktop_notifications": "Työpöytäilmoitukset",
|
|
"lastfmScrobbling": "Kuuntelutottumuksen lähetys Last.fm-palveluun",
|
|
"listenBrainzScrobbling": "Kuuntelutottumuksen lähetys ListenBrainz-palveluun",
|
|
"replaygain": "ReplayGain -tila",
|
|
"preAmp": "ReplayGain esivahvistus (dB)",
|
|
"gain": {
|
|
"none": "Pois käytöstä",
|
|
"album": "Käytä albumin äänen normalisointia",
|
|
"track": "Käytä kappaleen äänen normalisointia"
|
|
},
|
|
"lastfmNotConfigured": "Last.fm API-avainta ei ole määritetty"
|
|
}
|
|
},
|
|
"albumList": "Albumit",
|
|
"about": "Tietoa",
|
|
"playlists": "Soittolista",
|
|
"sharedPlaylists": "Jaettu soittolista",
|
|
"librarySelector": {
|
|
"allLibraries": "Kaikki kirjastot (%{count})",
|
|
"multipleLibraries": "%{selected} / %{total} kirjastoa",
|
|
"selectLibraries": "Valitse kirjastot",
|
|
"none": "Ei mitään"
|
|
}
|
|
},
|
|
"player": {
|
|
"playListsText": "Jono",
|
|
"openText": "Avaa",
|
|
"closeText": "Sulje",
|
|
"notContentText": "Ei musiikkia",
|
|
"clickToPlayText": "Soita",
|
|
"clickToPauseText": "Tauko",
|
|
"nextTrackText": "Seuraava kappale",
|
|
"previousTrackText": "Edellinen kappale",
|
|
"reloadText": "Päivitä",
|
|
"volumeText": "Äänenvoimakkuus",
|
|
"toggleLyricText": "Näytä/piilota sanat",
|
|
"toggleMiniModeText": "Minimoi",
|
|
"destroyText": "Poista",
|
|
"downloadText": "Lataa",
|
|
"removeAudioListsText": "Tyhjennä jono",
|
|
"clickToDeleteText": "Paina poistaaksesi %{name}",
|
|
"emptyLyricText": "Ei sanoja",
|
|
"playModeText": {
|
|
"order": "Järjestyksessä",
|
|
"orderLoop": "Toista",
|
|
"singleLoop": "Toista yksi",
|
|
"shufflePlay": "Sekoita"
|
|
}
|
|
},
|
|
"about": {
|
|
"links": {
|
|
"homepage": "Kotisivu",
|
|
"source": "Lähdekoodi",
|
|
"featureRequests": "Ominaisuuspyynnöt",
|
|
"lastInsightsCollection": "Viimeisin tietojenkeruu",
|
|
"insights": {
|
|
"disabled": "Ei käytössä",
|
|
"waiting": "Odottaa"
|
|
}
|
|
},
|
|
"tabs": {
|
|
"about": "Tietoja",
|
|
"config": "Määritykset"
|
|
},
|
|
"config": {
|
|
"configName": "Konfiguraation nimi",
|
|
"environmentVariable": "Ympäristömuuttuja",
|
|
"currentValue": "Nykyinen arvo",
|
|
"configurationFile": "Määritystiedosto",
|
|
"exportToml": "Vie määritys (TOML)",
|
|
"exportSuccess": "Määritykset viety leikepöydälle TOML-muodossa",
|
|
"exportFailed": "Määritysten kopiointi epäonnistui",
|
|
"devFlagsHeader": "Kehitysliput (voivat muuttua/poistua)",
|
|
"devFlagsComment": "Nämä ovat kokeellisia asetuksia ja ne voidaan poistaa tulevissa versioissa",
|
|
"downloadToml": "Lataa määritykset (TOML)"
|
|
}
|
|
},
|
|
"activity": {
|
|
"title": "Palvelun tila",
|
|
"totalScanned": "Tarkistettuja hakemistoja",
|
|
"quickScan": "Nopea tarkistus",
|
|
"fullScan": "Täysi tarkistus",
|
|
"serverUptime": "Palvelun käyttöaika",
|
|
"serverDown": "SAMMUTETTU",
|
|
"scanType": "Tyyppi",
|
|
"status": "Skannausvirhe",
|
|
"elapsedTime": "Kulunut aika",
|
|
"selectiveScan": "Valikoiva"
|
|
},
|
|
"help": {
|
|
"title": "Navidrome pikapainikkeet",
|
|
"hotkeys": {
|
|
"show_help": "Näytä tämä apuvalikko",
|
|
"toggle_menu": "Menuvalikko päälle ja pois",
|
|
"toggle_play": "Toista / Tauko",
|
|
"prev_song": "Edellinen kappale",
|
|
"next_song": "Seuraava kappale",
|
|
"vol_up": "Kovemmalle",
|
|
"vol_down": "Hiljemmalle",
|
|
"toggle_love": "Lisää kappale suosikkeihin",
|
|
"current_song": "Siirry nykyiseen kappaleeseen"
|
|
}
|
|
},
|
|
"nowPlaying": {
|
|
"title": "Nyt soi",
|
|
"empty": "Ei soita mitään",
|
|
"minutesAgo": "%{smart_count} minuutti sitten |||| %{smart_count} minuuttia sitten"
|
|
}
|
|
}
|