ab8a58157a
* 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>
716 lines
28 KiB
JSON
716 lines
28 KiB
JSON
{
|
||
"languageName": "Català",
|
||
"resources": {
|
||
"song": {
|
||
"name": "Cançó |||| Cançons",
|
||
"fields": {
|
||
"albumArtist": "Artista de l'àlbum",
|
||
"duration": "Durada",
|
||
"trackNumber": "#",
|
||
"playCount": "Reproduccions",
|
||
"title": "Títol",
|
||
"artist": "Artista",
|
||
"album": "Àlbum",
|
||
"path": "Ruta del fitxer",
|
||
"genre": "Gènere",
|
||
"compilation": "Compilació",
|
||
"year": "Any",
|
||
"size": "Mida del fitxer",
|
||
"updatedAt": "Actualitzat",
|
||
"bitRate": "Taxa de bits",
|
||
"discSubtitle": "Subtítol del disc",
|
||
"starred": "Preferit",
|
||
"comment": "Comentari",
|
||
"rating": "Valoració",
|
||
"quality": "Qualitat",
|
||
"bpm": "tempo",
|
||
"playDate": "Darrer resproduït",
|
||
"channels": "Canals",
|
||
"createdAt": "Data d'addició",
|
||
"grouping": "Agrupació",
|
||
"mood": "Sentiment",
|
||
"participants": "Participants",
|
||
"tags": "Etiquetes",
|
||
"mappedTags": "Etiquetes assignades",
|
||
"rawTags": "Etiquetes sense processar",
|
||
"bitDepth": "Bits",
|
||
"sampleRate": "Freqüencia de mostreig",
|
||
"missing": "Desaparegut",
|
||
"libraryName": "Biblioteca",
|
||
"composer": "Compositor",
|
||
"disc": ""
|
||
},
|
||
"actions": {
|
||
"addToQueue": "Reprodueix després",
|
||
"playNow": "Reprodueix ara",
|
||
"addToPlaylist": "Afegeix a la llista",
|
||
"shuffleAll": "Aleatori",
|
||
"download": "Descarrega",
|
||
"playNext": "Reprodueix següent",
|
||
"info": "Obtén informació",
|
||
"showInPlaylist": "Mostra a la llista",
|
||
"instantMix": "Mescla immediata"
|
||
}
|
||
},
|
||
"album": {
|
||
"name": "Àlbum |||| Àlbums",
|
||
"fields": {
|
||
"albumArtist": "Artista de l'àlbum",
|
||
"artist": "Artista",
|
||
"duration": "Durada",
|
||
"songCount": "Cançons",
|
||
"playCount": "Reproduccions",
|
||
"name": "Nom",
|
||
"genre": "Gènere",
|
||
"compilation": "Compilació",
|
||
"year": "Any",
|
||
"updatedAt": "Actualitzat ",
|
||
"comment": "Comentari",
|
||
"rating": "Valoració",
|
||
"createdAt": "Data d'addició",
|
||
"size": "Mida",
|
||
"originalDate": "Original",
|
||
"releaseDate": "Publicat",
|
||
"releases": "LLançament |||| Llançaments",
|
||
"released": "Publicat",
|
||
"recordLabel": "Discogràfica",
|
||
"catalogNum": "Número de catàleg",
|
||
"releaseType": "Tipus de publicació",
|
||
"grouping": "Agrupació",
|
||
"media": "Mitjà",
|
||
"mood": "Sentiment",
|
||
"date": "Data d'enregistrament",
|
||
"missing": "Desaparegut",
|
||
"libraryName": "Biblioteca"
|
||
},
|
||
"actions": {
|
||
"playAll": "Reprodueix",
|
||
"playNext": "Reprodueix la següent",
|
||
"addToQueue": "Reprodueix després",
|
||
"shuffle": "Aleatori",
|
||
"addToPlaylist": "Afegeix a la llista",
|
||
"download": "Descarrega",
|
||
"info": "Obtén informació",
|
||
"share": "Compartir"
|
||
},
|
||
"lists": {
|
||
"all": "Tot",
|
||
"random": "Aleatori",
|
||
"recentlyAdded": "Afegits recentment",
|
||
"recentlyPlayed": "Reproduïts recentment",
|
||
"mostPlayed": "Més reproduïts",
|
||
"starred": "Preferits",
|
||
"topRated": "Més ben valorats"
|
||
}
|
||
},
|
||
"artist": {
|
||
"name": "Artista |||| Artistes",
|
||
"fields": {
|
||
"name": "Nom",
|
||
"albumCount": "Nombre d'àlbums",
|
||
"songCount": "Nombre de cançons",
|
||
"playCount": "Reproduccions",
|
||
"rating": "Valoració",
|
||
"genre": "Gènere",
|
||
"size": "Mida",
|
||
"role": "Rol",
|
||
"missing": "Desaparegut"
|
||
},
|
||
"roles": {
|
||
"albumartist": "Artista de l'Àlbum |||| Artistes de l'Àlbum",
|
||
"artist": "Artista |||| Artistes",
|
||
"composer": "Compositor |||| Compositors",
|
||
"conductor": "Director |||| Directors",
|
||
"lyricist": "Lletrista |||| Lletristes",
|
||
"arranger": "Arranjador |||| Arranjadors",
|
||
"producer": "Productor |||| Productors",
|
||
"director": "Director |||| Directors",
|
||
"engineer": "Enginyer |||| Enginyers",
|
||
"mixer": "Mesclador |||| Mescladors",
|
||
"remixer": "Remesclador |||| Remescladors",
|
||
"djmixer": "Mesclador DJ |||| Mescladors DJ",
|
||
"performer": "Intèrpret |||| Intèrprets",
|
||
"maincredit": "Artista de l'àlbum or Artista |||| Artistes de l'àlbum or Artistes"
|
||
},
|
||
"actions": {
|
||
"shuffle": "Barreja",
|
||
"radio": "Ràdio",
|
||
"topSongs": "Cançons populars"
|
||
}
|
||
},
|
||
"user": {
|
||
"name": "Usuari |||| Usuaris",
|
||
"fields": {
|
||
"userName": "Nom d'usuari",
|
||
"isAdmin": "És admin",
|
||
"lastLoginAt": "Última connexió",
|
||
"updatedAt": "Actualitzat",
|
||
"name": "Nom",
|
||
"password": "Contrasenya",
|
||
"createdAt": "Creat",
|
||
"changePassword": "Canviar la contrasenya?",
|
||
"currentPassword": "Contrasenya actual",
|
||
"newPassword": "Contrasenya nova",
|
||
"token": "Token",
|
||
"lastAccessAt": "Últim accés",
|
||
"libraries": "Biblioteques"
|
||
},
|
||
"helperTexts": {
|
||
"name": "Els canvis en el nom s'hi aplicaran en la següent connexió",
|
||
"libraries": "Seleccioneu biblioteques específiques per a aquest usuari o deixeu-ho buit per utilitzar les biblioteques predeterminades"
|
||
},
|
||
"notifications": {
|
||
"created": "Usuari creat",
|
||
"updated": "Usuari actualitzat",
|
||
"deleted": "Usuari eliminat"
|
||
},
|
||
"message": {
|
||
"listenBrainzToken": "Introduïu el vostre token d'usuari de ListenBrainz",
|
||
"clickHereForToken": "Feu clic ací per a obtenir el vostre token",
|
||
"selectAllLibraries": "Selecciona totes les biblioteques",
|
||
"adminAutoLibraries": "Els administradors tenen accés a totes les biblioteques automàticament"
|
||
},
|
||
"validation": {
|
||
"librariesRequired": "Cal que trieu almenys una biblioteca per als usuaris que no siguin administradors"
|
||
}
|
||
},
|
||
"player": {
|
||
"name": "Reproductor |||| Reproductors",
|
||
"fields": {
|
||
"name": "Nom",
|
||
"transcodingId": "Transcodificador",
|
||
"maxBitRate": "Taxa de bits màx.",
|
||
"client": "Client",
|
||
"userName": "Nom d'usuari",
|
||
"lastSeen": "Vist",
|
||
"reportRealPath": "Informa de la ruta real",
|
||
"scrobbleEnabled": "Activa el seguiment des de serveis externs"
|
||
}
|
||
},
|
||
"transcoding": {
|
||
"name": "Transcodificador |||| Transcodificadors",
|
||
"fields": {
|
||
"name": "Nom",
|
||
"targetFormat": "Format desitjat",
|
||
"defaultBitRate": "Taxa de bits per defecte",
|
||
"command": "Ordre"
|
||
}
|
||
},
|
||
"playlist": {
|
||
"name": "Llista |||| Llistes",
|
||
"fields": {
|
||
"name": "Nom",
|
||
"duration": "Durada",
|
||
"ownerName": "Propietari",
|
||
"public": "Públic",
|
||
"updatedAt": "Actualitzat ",
|
||
"createdAt": "Creat",
|
||
"songCount": "Cançons",
|
||
"comment": "Comentari",
|
||
"sync": "Auto-importació",
|
||
"path": "Importa de"
|
||
},
|
||
"actions": {
|
||
"selectPlaylist": "Selecciona una llista:",
|
||
"addNewPlaylist": "Crea \"%{nom}",
|
||
"export": "Exporta",
|
||
"makePublic": "Fes públic",
|
||
"makePrivate": "Fes privat",
|
||
"saveQueue": "Desar la cua a una llista",
|
||
"searchOrCreate": "Cerca llistes o escriu per crear-ne de noves...",
|
||
"pressEnterToCreate": "Prem Retorn per crear una nova llista",
|
||
"removeFromSelection": "Elimina de la selecció"
|
||
},
|
||
"message": {
|
||
"duplicate_song": "Afegeix cançons duplicades",
|
||
"song_exist": "Heu afegit duplicats a la llista. Voleu afegir-los o ignorar-los?",
|
||
"noPlaylistsFound": "No s'ha trobat cap llista",
|
||
"noPlaylists": "No hi ha cap llista disponible"
|
||
}
|
||
},
|
||
"radio": {
|
||
"name": "Ràdio |||| Ràdios",
|
||
"fields": {
|
||
"name": "Nom",
|
||
"streamUrl": "URL del flux",
|
||
"homePageUrl": "URL principal",
|
||
"updatedAt": "Actualitzat",
|
||
"createdAt": "Creat"
|
||
},
|
||
"actions": {
|
||
"playNow": "Reprodueix"
|
||
}
|
||
},
|
||
"share": {
|
||
"name": "Compartir |||| Compartits",
|
||
"fields": {
|
||
"username": "Compartit per",
|
||
"url": "URL",
|
||
"description": "Descripció",
|
||
"contents": "Continguts",
|
||
"expiresAt": "Caduca",
|
||
"lastVisitedAt": "Última Visita",
|
||
"visitCount": "Visites",
|
||
"format": "Format",
|
||
"maxBitRate": "Taxa de bits màx.",
|
||
"updatedAt": "Actualitzat",
|
||
"createdAt": "Creat",
|
||
"downloadable": "Permet descarregar?"
|
||
}
|
||
},
|
||
"missing": {
|
||
"name": "Fitxer faltant |||| Fitxers Faltants",
|
||
"fields": {
|
||
"path": "Directori",
|
||
"size": "Mida",
|
||
"updatedAt": "Desaparegut",
|
||
"libraryName": "Biblioteca"
|
||
},
|
||
"actions": {
|
||
"remove": "Eliminar",
|
||
"remove_all": "Suprimeix-ho tot"
|
||
},
|
||
"notifications": {
|
||
"removed": "Fitxers faltants eliminats"
|
||
},
|
||
"empty": "No falten fitxers"
|
||
},
|
||
"library": {
|
||
"name": "Biblioteca |||| Biblioteques\n",
|
||
"fields": {
|
||
"name": "Nom",
|
||
"path": "Camí",
|
||
"remotePath": "Camí remot",
|
||
"lastScanAt": "Últim escaneig",
|
||
"songCount": "Cançons",
|
||
"albumCount": "Àlbums",
|
||
"artistCount": "Artistes",
|
||
"totalSongs": "Cançons",
|
||
"totalAlbums": "Àlbums",
|
||
"totalArtists": "Artistes",
|
||
"totalFolders": "Carpetes",
|
||
"totalFiles": "Fitxers",
|
||
"totalMissingFiles": "Fitxers desapareguts",
|
||
"totalSize": "Mida total",
|
||
"totalDuration": "Durada",
|
||
"defaultNewUsers": "Predeterminat per a usuaris nous",
|
||
"createdAt": "Creat",
|
||
"updatedAt": "Actualitzat"
|
||
},
|
||
"sections": {
|
||
"basic": "Informació bàsica",
|
||
"statistics": "Estadístiques"
|
||
},
|
||
"actions": {
|
||
"scan": "Escaneja la biblioteca",
|
||
"manageUsers": "Gestiona l'accés d'usuari",
|
||
"viewDetails": "Mostra els detalls",
|
||
"quickScan": "Escaneig ràpid",
|
||
"fullScan": "Escaneig complet"
|
||
},
|
||
"notifications": {
|
||
"created": "La biblioteca s'ha creat correctament",
|
||
"updated": "La biblioteca s'ha actualitzat correctament",
|
||
"deleted": "La biblioteca s'ha suprimit correctament",
|
||
"scanStarted": "Començant l'escaneig de la biblioteca",
|
||
"scanCompleted": "S'ha completat l'escaneig de la biblioteca",
|
||
"quickScanStarted": "Començant escaneig ràpid",
|
||
"fullScanStarted": "Començant escaneig complet",
|
||
"scanError": "S'ha produït un error en començar l'escaneig. Comproveu els registres"
|
||
},
|
||
"validation": {
|
||
"nameRequired": "Es requereix un nom per la biblioteca",
|
||
"pathRequired": "Es requereix un camí a la biblioteca",
|
||
"pathNotDirectory": "El camí a la biblioteca ha de ser un directori",
|
||
"pathNotFound": "No s'ha trobat el camí a la biblioteca",
|
||
"pathNotAccessible": "No es pot accedir al camí de la biblioteca ",
|
||
"pathInvalid": "Camí a la llibreria no vàlid"
|
||
},
|
||
"messages": {
|
||
"deleteConfirm": "Esteu segur que voleu suprimir aquesta biblioteca? Se'n suprimiran totes les dades associades i els accessos d'usuari.",
|
||
"scanInProgress": "Escaneig en curs...",
|
||
"noLibrariesAssigned": "Aquest usuari no té cap biblioteca assignada"
|
||
}
|
||
},
|
||
"plugin": {
|
||
"name": "\nConnector |||| Connectors",
|
||
"fields": {
|
||
"id": "ID",
|
||
"name": "Nom",
|
||
"description": "Descripció",
|
||
"version": "Versió",
|
||
"author": "Autor",
|
||
"website": "Lloc web",
|
||
"permissions": "Permissos",
|
||
"enabled": "Activat",
|
||
"status": "Estat",
|
||
"path": "Camí",
|
||
"lastError": "Error",
|
||
"hasError": "Error",
|
||
"updatedAt": "Actualitzat",
|
||
"createdAt": "Instal·lat",
|
||
"configKey": "Clau",
|
||
"configValue": "Valor",
|
||
"allUsers": "Permet tots els usuaris",
|
||
"selectedUsers": "Usuaris seleccionats",
|
||
"allLibraries": "Permet totes les llibreries",
|
||
"selectedLibraries": "Biblioteques seleccionades",
|
||
"allowWriteAccess": ""
|
||
},
|
||
"sections": {
|
||
"status": "Estat",
|
||
"info": "Informació del controlador",
|
||
"configuration": "Configuració",
|
||
"manifest": "Manifest",
|
||
"usersPermission": "Permís dels usuaris",
|
||
"libraryPermission": "Permís de la llibreria"
|
||
},
|
||
"status": {
|
||
"enabled": "Activat",
|
||
"disabled": "Desactivat"
|
||
},
|
||
"actions": {
|
||
"enable": "Activa",
|
||
"disable": "Desactiva",
|
||
"disabledDueToError": "Arregleu l'error abans de l'activació",
|
||
"disabledUsersRequired": "Seleccioneu els usuaris abans de l'activació",
|
||
"disabledLibrariesRequired": "Seleccioneu les biblioteques abans de l'activació",
|
||
"addConfig": "Afegeix una configuració",
|
||
"rescan": "Torna a escanejar"
|
||
},
|
||
"notifications": {
|
||
"enabled": "Controlador activat",
|
||
"disabled": "Controlador desactivat",
|
||
"updated": "Controlador activat",
|
||
"error": "S'ha produït un error en actualitzar el controlador"
|
||
},
|
||
"validation": {
|
||
"invalidJson": "El fitxer Configuració ha de ser un JSON vàlid"
|
||
},
|
||
"messages": {
|
||
"configHelp": "Configureu el controlador utilitzant parelles clau-valor. Deixeu-ho buit si el controlador no requereix cap configuració.",
|
||
"clickPermissions": "Feu clic en un permís per veure’n els detalls",
|
||
"noConfig": "No s'ha establert cap configuració",
|
||
"allUsersHelp": "Quan està activat, el controlador té accés a tots els usuaris, inclosos els creats a posteriori.",
|
||
"noUsers": "No s'ha seleccionat cap usuari",
|
||
"permissionReason": "Motiu",
|
||
"usersRequired": "Aquest controlador necessita accedir a la informació de la biblioteca. Selecciona a quines biblioteques pot accedir o activa «Permet tots els usuaris».",
|
||
"allLibrariesHelp": "Quan està activat, el controlador té accés a totes les llibreries, incloses les creades a posteriori.",
|
||
"noLibraries": "No s'ha seleccionat cap biblioteca",
|
||
"librariesRequired": "Aquest controlador necessita accedir a la informació de la biblioteca. Selecciona a quines biblioteques pot accedir o activa «Permet totes les biblioteques».",
|
||
"requiredHosts": "Hosts requerits",
|
||
"configValidationError": "Ha fallat la validació de la configuració:",
|
||
"schemaRenderError": "No s'ha pogut renderitzar el formulari de configuració. És possible que l'esquema del controlador sigui invàlid.",
|
||
"allowWriteAccessHelp": ""
|
||
},
|
||
"placeholders": {
|
||
"configKey": "clau",
|
||
"configValue": "valor"
|
||
}
|
||
}
|
||
},
|
||
"ra": {
|
||
"auth": {
|
||
"welcome1": "Gràcies d'haver instal·lat Navidrome!",
|
||
"welcome2": "Per a començar, creeu un usuari administrador",
|
||
"confirmPassword": "Confirmeu la contrasenya",
|
||
"buttonCreateAdmin": "Crea un administrador",
|
||
"auth_check_error": "Si us plau, inicieu sessió per a continuar",
|
||
"user_menu": "Perfil",
|
||
"username": "Nom d'usuari",
|
||
"password": "Contrasenya",
|
||
"sign_in": "Inicia sessió",
|
||
"sign_in_error": "L'autenticació ha fallat, torneu-ho a intentar",
|
||
"logout": "Sortida",
|
||
"insightsCollectionNote": "Navidrome recull dades d'us anonimitzades per\najudar a millorar el projecte. Clica [aquí] per a saber-ne\nmés i no participar-hi si no vols"
|
||
},
|
||
"validation": {
|
||
"invalidChars": "Si us plau, utilitzeu només lletres i nombres",
|
||
"passwordDoesNotMatch": "Les contrasenyes no coincideixen",
|
||
"required": "Obligatori",
|
||
"minLength": "Ha de tenir, si més no, %{min} caràcters",
|
||
"maxLength": "Ha de tenir %{max} caràcters o menys",
|
||
"minValue": "Ha de ser com a mínim %{min}",
|
||
"maxValue": "Ha de ser %{max} o menys",
|
||
"number": "Ha de ser un nombre",
|
||
"email": "Ha de ser un correu vàlid",
|
||
"oneOf": "Ha de ser un de: %{options}",
|
||
"regex": "Ha de tenir el format (regexp): %{pattern}",
|
||
"unique": "Ha de ser únic",
|
||
"url": "Ha de ser una URL vàlida"
|
||
},
|
||
"action": {
|
||
"add_filter": "Afegeix un filtre",
|
||
"add": "Afegeix",
|
||
"back": "Enrere",
|
||
"bulk_actions": "1 element seleccionat |||| %{smart_count} elements seleccionats",
|
||
"cancel": "Cancel·la",
|
||
"clear_input_value": "Neteja el valor",
|
||
"clone": "Clona",
|
||
"confirm": "Confirma",
|
||
"create": "Crea",
|
||
"delete": "Suprimeix",
|
||
"edit": "Edita",
|
||
"export": "Exporta",
|
||
"list": "Llista",
|
||
"refresh": "Refresca",
|
||
"remove_filter": "Suprimeix aquest filtre",
|
||
"remove": "Elimina",
|
||
"save": "Desa",
|
||
"search": "Cerca",
|
||
"show": "Mostra",
|
||
"sort": "Ordena",
|
||
"undo": "Desfés",
|
||
"expand": "Expandeix",
|
||
"close": "Tanca",
|
||
"open_menu": "Obre el menú",
|
||
"close_menu": "Tanca el menú",
|
||
"unselect": "Anul·la la selecció",
|
||
"skip": "Omet",
|
||
"bulk_actions_mobile": "1 |||| %{smart_count}",
|
||
"share": "Compartir",
|
||
"download": "Descarregar"
|
||
},
|
||
"boolean": {
|
||
"true": "Sí",
|
||
"false": "No"
|
||
},
|
||
"page": {
|
||
"create": "Crea %{nom}",
|
||
"dashboard": "Tauler",
|
||
"edit": "%{name} #%{id}",
|
||
"error": "Alguna cosa ha fallat",
|
||
"list": "%{name}",
|
||
"loading": "Ara es carrega",
|
||
"not_found": "No s'ha trobat",
|
||
"show": "%{name} #%{id}",
|
||
"empty": "No hi ha %{name} encara.",
|
||
"invite": "Voleu afegir-ne una?"
|
||
},
|
||
"input": {
|
||
"file": {
|
||
"upload_several": "Deixeu caure-hi fitxers per a carregar-los o feu clic per a seleccionar-ne un.",
|
||
"upload_single": "Deixeu caure-hi un fitxer per a carregar o feu clic per a seleccionar-lo."
|
||
},
|
||
"image": {
|
||
"upload_several": "Deixeu caure-hi imatges per a carregar-les o feu clic per a seleccionar-ne una.",
|
||
"upload_single": "Deixeu caure-hi una imatge per a carregar-la o feu clic per a seleccionar-la."
|
||
},
|
||
"references": {
|
||
"all_missing": "No ha estat possible trobar les dades de referència.",
|
||
"many_missing": "Sembla que almenys una de les referències associades ja no està disponible.",
|
||
"single_missing": "Sembla que la referència associada ja no està disponible."
|
||
},
|
||
"password": {
|
||
"toggle_visible": "Amaga la contrasenya",
|
||
"toggle_hidden": "Mostra la contrasenya"
|
||
}
|
||
},
|
||
"message": {
|
||
"about": "Quant a...",
|
||
"are_you_sure": "N'esteu segur?",
|
||
"bulk_delete_content": "Voleu eliminar aquest %{name}? |||| Voleu eliminar aquests %{smart_count} element?\n",
|
||
"bulk_delete_title": "Esborra %{name} |||| Esborra %{smart_count} %{name}",
|
||
"delete_content": "Segur que voleu eliminar aquest element?",
|
||
"delete_title": "Elimina %{name} #%{id}",
|
||
"details": "Detalls",
|
||
"error": "S'ha produït un error en un client i la vostra sol·licitud no ha pogut ser completada.",
|
||
"invalid_form": "El formulari no és vàlid.",
|
||
"loading": "La pàgina es carrega, un moment si us plau.",
|
||
"no": "No",
|
||
"not_found": "La URL és incorrecta o heu seguit un enllaç erroni.",
|
||
"yes": "Sí",
|
||
"unsaved_changes": "Alguns canvis no s'hi han desat. Segur que voleu ignorar-los?"
|
||
},
|
||
"navigation": {
|
||
"no_results": "No s'ha trobat",
|
||
"no_more_results": "La pàgina número %{page} no existeix. Proveu l'anterior.",
|
||
"page_out_of_boundaries": "La pàgina número %{page} no existeix",
|
||
"page_out_from_end": "No podeu anar més enllà de la darrera pàgina",
|
||
"page_out_from_begin": "No podeu anar més enllà de la primera pàgina",
|
||
"page_range_info": "%{offsetBegin}-%{offsetEnd} de %{total}",
|
||
"page_rows_per_page": "Elements per pàgina:",
|
||
"next": "Següent",
|
||
"prev": "Anterior",
|
||
"skip_nav": "Salta al contingut"
|
||
},
|
||
"notification": {
|
||
"updated": "Element actualitzat |||| %{smart_count} elements actualitzats",
|
||
"created": "Element creat",
|
||
"deleted": "Element actualitzat |||| %{smart_count} elements actualitzats",
|
||
"bad_item": "Element incorrecte",
|
||
"item_doesnt_exist": "L'element no existeix",
|
||
"http_error": "Error de comunicació del servidor",
|
||
"data_provider_error": "dataProvider error. Vegeu la consola si en voleu més detalls.",
|
||
"i18n_error": "No ha estat possible carregar les traduccions per a l'idioma indicat",
|
||
"canceled": "Acció cancel·lada",
|
||
"logged_out": "La sessió ha acabat, si us plau reconnecteu",
|
||
"new_version": "Hi ha una versió nova disponible! Si us plau actualitzeu aquesta finestra."
|
||
},
|
||
"toggleFieldsMenu": {
|
||
"columnsToDisplay": "Columnes a mostrar",
|
||
"layout": "Disposició",
|
||
"grid": "Quadrícula",
|
||
"table": "Taula"
|
||
}
|
||
},
|
||
"message": {
|
||
"note": "NOTA",
|
||
"transcodingDisabled": "Per motius de seguretat, el canvi de configuració del transcodificador amb la interfície web està desactivat. Si voleu canviar les opcions de transcodificació (sia editar-les sia afegir-ne), reinicieu el servidor amb l'opció %{config}.",
|
||
"transcodingEnabled": "Navidrome s'executa amb %{config}, cosa que fa possible executar ordres del sistema des de les opcions de transcodificació usant la interfície web. Per motius de seguretat us recomanem que només l'activeu quan necessiteu configurar les opcions de transcodificació.",
|
||
"songsAddedToPlaylist": "S'ha afegit 1 cançó a la llista |||| S'han afegit %{smart_count} a la llista",
|
||
"noPlaylistsAvailable": "No n'hi ha cap disponible",
|
||
"delete_user_title": "Esborra usuari '%{nom}'",
|
||
"delete_user_content": "Segur que voleu eliminar aquest usuari i les seues dades\n(incloent-hi llistes i preferències)",
|
||
"notifications_blocked": "Heu blocat les notificacions d'escriptori en les preferències del navegador",
|
||
"notifications_not_available": "El navegador no és compatible amb les notificacions o no us heu connectat a Navidrome per https",
|
||
"lastfmLinkSuccess": "Ha reexit la vinculació amb Last.fm i se n'ha activat el seguiment",
|
||
"lastfmLinkFailure": "No ha estat possible la vinculació amb Last.fm",
|
||
"lastfmUnlinkSuccess": "Desvinculat de Last.fm i desactivat el seguiment",
|
||
"lastfmUnlinkFailure": "No s'ha pogut desvincular de Last.fm",
|
||
"openIn": {
|
||
"lastfm": "Obri en Last.fm",
|
||
"musicbrainz": "Obri en MusicBrainz"
|
||
},
|
||
"lastfmLink": "Llegeix més...",
|
||
"listenBrainzLinkSuccess": "Connectat correctament a ListenBrainz i seguiment activat com a: %{user}",
|
||
"listenBrainzLinkFailure": "No s'ha pogut connectar a ListenBrainz: %{error}",
|
||
"listenBrainzUnlinkSuccess": "ListenBrainz desconnectat i seguiment desactivat",
|
||
"listenBrainzUnlinkFailure": "No s'ha pogut desconnectar de ListenBrainz",
|
||
"downloadOriginalFormat": "Descarregar en el format original",
|
||
"shareOriginalFormat": "Compartir en format original",
|
||
"shareDialogTitle": "Compartir %{resource} '%{name}'",
|
||
"shareBatchDialogTitle": "Compartir 1 %{resource} |||| Compartir %{smart_count} %{resource}",
|
||
"shareSuccess": "URL copiada al porta-retalls: %{url}",
|
||
"shareFailure": "Error copiant URL %{url} al porta-retalls",
|
||
"downloadDialogTitle": "Deascarregar %{resource} '%{name}' (%{size})",
|
||
"shareCopyToClipboard": "Copiar al porta-retalls: Ctrl+C, Enter",
|
||
"remove_missing_title": "Eliminar fitxers faltants",
|
||
"remove_missing_content": "Segur que vols eliminar els fitxers faltants seleccionats de la base de dades? Això eliminarà permanentment les referències a ells, incloent-hi el nombre de reproduccions i les valoracions.",
|
||
"remove_all_missing_title": "Suprimir tots els fitxers perduts",
|
||
"remove_all_missing_content": "Esteu segur que voleu eliminar tots els fitxers desapareguts de la base de dades? Se n'eliminarà permanentment qualsevol referència, inclosos el nombre de reproduccions i les puntuacions.",
|
||
"noSimilarSongsFound": "No s'ha trobat cap cançó similar",
|
||
"noTopSongsFound": "No s'ha trobat cap cançó popular",
|
||
"startingInstantMix": "S'està carregant la mescla immediata..."
|
||
},
|
||
"menu": {
|
||
"library": "Biblioteca",
|
||
"settings": "Configuració",
|
||
"version": "Versió",
|
||
"theme": "Tema",
|
||
"personal": {
|
||
"name": "Personal",
|
||
"options": {
|
||
"theme": "Tema",
|
||
"language": "Llengua",
|
||
"defaultView": "Vista per defecte",
|
||
"desktop_notifications": "Notificacions d'escriptori",
|
||
"lastfmScrobbling": "Activa el seguiment de Last.fm",
|
||
"listenBrainzScrobbling": "Activa el seguiment de ListenBrainz",
|
||
"replaygain": "Mode ReplayGain",
|
||
"preAmp": "PreAmp de ReplayGain (dB)",
|
||
"gain": {
|
||
"none": "Cap",
|
||
"album": "Guany de l'àlbum",
|
||
"track": "Guany de la pista"
|
||
},
|
||
"lastfmNotConfigured": "No s'ha configurat l'API de Last.fm"
|
||
}
|
||
},
|
||
"albumList": "Àlbums",
|
||
"about": "Quant a...",
|
||
"playlists": "Llistes",
|
||
"sharedPlaylists": "Llistes compartides",
|
||
"librarySelector": {
|
||
"allLibraries": "Totes les llibreries (%{count})",
|
||
"multipleLibraries": "%{selected} de %{total} Biblioteques",
|
||
"selectLibraries": "Selecciona les biblioteques",
|
||
"none": "Cap"
|
||
}
|
||
},
|
||
"player": {
|
||
"playListsText": "Reprodueix la cua",
|
||
"openText": "Obre",
|
||
"closeText": "Tanca",
|
||
"notContentText": "No hi ha música",
|
||
"clickToPlayText": "Feu clic per a reproduir",
|
||
"clickToPauseText": "Feu clic per a posar en pausa",
|
||
"nextTrackText": "Pista següent",
|
||
"previousTrackText": "Pista anterior",
|
||
"reloadText": "Recarrega",
|
||
"volumeText": "Volum",
|
||
"toggleLyricText": "Activa / desactiva lletra",
|
||
"toggleMiniModeText": "Minimitza",
|
||
"destroyText": "Destrueix",
|
||
"downloadText": "Descarrega",
|
||
"removeAudioListsText": "Elimina llistes d'àudio",
|
||
"clickToDeleteText": "Feu clic per a eliminar %{name}",
|
||
"emptyLyricText": "Sense lletra",
|
||
"playModeText": {
|
||
"order": "En ordre",
|
||
"orderLoop": "Repeteix",
|
||
"singleLoop": "Repeteix una vegada",
|
||
"shufflePlay": "Aleatori"
|
||
}
|
||
},
|
||
"about": {
|
||
"links": {
|
||
"homepage": "Inici",
|
||
"source": "Codi font",
|
||
"featureRequests": "Sol·licita funcionalitats",
|
||
"lastInsightsCollection": "Última recolecció d'informació",
|
||
"insights": {
|
||
"disabled": "Desactivada",
|
||
"waiting": "Esperant"
|
||
}
|
||
},
|
||
"tabs": {
|
||
"about": "Quant a",
|
||
"config": "Configuració"
|
||
},
|
||
"config": {
|
||
"configName": "Nom de Config",
|
||
"environmentVariable": "Variable d'entorn",
|
||
"currentValue": "Valor actual",
|
||
"configurationFile": "Fitxer de configuració",
|
||
"exportToml": "Exporta la configuració (TOML)",
|
||
"exportSuccess": "Configuració exportada al porta-retalls en format TOML",
|
||
"exportFailed": "La còpia de la configuració ha fallat",
|
||
"devFlagsHeader": "Indicadors de desenvolupament (subjecte a canvis o eliminació)",
|
||
"devFlagsComment": "Aquests paràmetres són experimentals i és possible que s'eliminin en versions futures",
|
||
"downloadToml": "Descarrega la configuració (TOML)"
|
||
}
|
||
},
|
||
"activity": {
|
||
"title": "Activitat",
|
||
"totalScanned": "Carpetes escanejades en total",
|
||
"quickScan": "Escaneig ràpid",
|
||
"fullScan": "Escaneig complet",
|
||
"serverUptime": "Temps de funcionament del servidor",
|
||
"serverDown": "Sense connexió",
|
||
"scanType": "Últim escaneig",
|
||
"status": "Error d'escaneig",
|
||
"elapsedTime": "Temps transcorregut",
|
||
"selectiveScan": "Selectiu"
|
||
},
|
||
"help": {
|
||
"title": "Dreceres de teclat de Navidrome",
|
||
"hotkeys": {
|
||
"show_help": "Mostra aquesta ajuda",
|
||
"toggle_menu": "Commuta la barra lateral",
|
||
"toggle_play": "Reprodueix / Pausa",
|
||
"prev_song": "Cançó anterior",
|
||
"next_song": "Cançó següent",
|
||
"vol_up": "Apuja el volum",
|
||
"vol_down": "Abaixa el volum",
|
||
"toggle_love": "Afegeix la pista a favorits",
|
||
"current_song": "Anar a la cançó actual"
|
||
}
|
||
},
|
||
"nowPlaying": {
|
||
"title": "Està sonant",
|
||
"empty": "No s'està reproduint res",
|
||
"minutesAgo": "Fa %{smart_count} minut |||| Fa %{smart_count} minuts"
|
||
}
|
||
}
|