Merge branch 'master' into dlna-spike

This commit is contained in:
Rob Emery 2025-04-19 10:19:21 +01:00
commit 88cb5bf38e
12 changed files with 1045 additions and 917 deletions

55
core/common_test.go Normal file
View File

@ -0,0 +1,55 @@
package core
import (
"context"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/navidrome/navidrome/model"
"github.com/navidrome/navidrome/model/request"
"github.com/navidrome/navidrome/tests"
)
var _ = Describe("common.go", func() {
Describe("userName", func() {
It("returns the username from context", func() {
ctx := request.WithUser(context.Background(), model.User{UserName: "testuser"})
Expect(userName(ctx)).To(Equal("testuser"))
})
It("returns 'UNKNOWN' if no user in context", func() {
ctx := context.Background()
Expect(userName(ctx)).To(Equal("UNKNOWN"))
})
})
Describe("AbsolutePath", func() {
var (
ds *tests.MockDataStore
libId int
path string
)
BeforeEach(func() {
ds = &tests.MockDataStore{}
libId = 1
path = "music/file.mp3"
mockLib := &tests.MockLibraryRepo{}
mockLib.SetData(model.Libraries{{ID: libId, Path: "/library/root"}})
ds.MockedLibrary = mockLib
})
It("returns the absolute path when library exists", func() {
ctx := context.Background()
abs := AbsolutePath(ctx, ds, libId, path)
Expect(abs).To(Equal("/library/root/music/file.mp3"))
})
It("returns the original path if library not found", func() {
ctx := context.Background()
abs := AbsolutePath(ctx, ds, 999, path)
Expect(abs).To(Equal(path))
})
})
})

View File

@ -77,7 +77,7 @@ func NewMediaFileRepository(ctx context.Context, db dbx.Builder) model.MediaFile
"title": "order_title",
"artist": "order_artist_name, order_album_name, release_date, disc_number, track_number",
"album_artist": "order_album_artist_name, order_album_name, release_date, disc_number, track_number",
"album": "order_album_name, release_date, disc_number, track_number, order_artist_name, title",
"album": "order_album_name, album_id, disc_number, track_number, order_artist_name, title",
"random": "random",
"created_at": "media_file.created_at",
"starred_at": "starred, starred_at",
@ -242,7 +242,7 @@ func (r *mediaFileRepository) MarkMissingByFolder(missing bool, folderIDs ...str
// GetMissingAndMatching returns all mediafiles that are missing and their potential matches (comparing PIDs)
// that were added/updated after the last scan started. The result is ordered by PID.
// It does not need to load bookmarks, annotations and participnts, as they are not used by the scanner.
// It does not need to load bookmarks, annotations and participants, as they are not used by the scanner.
func (r *mediaFileRepository) GetMissingAndMatching(libId int) (model.MediaFileCursor, error) {
subQ := r.newSelect().Columns("pid").
Where(And{

View File

@ -18,6 +18,9 @@
"size": "Mida del fitxer",
"updatedAt": "Actualitzat",
"bitRate": "Taxa de bits",
"bitDepth": "Bits",
"sampleRate": "Freqüencia de mostreig",
"channels": "Canals",
"discSubtitle": "Subtítol del disc",
"starred": "Preferit",
"comment": "Comentari",
@ -25,8 +28,13 @@
"quality": "Qualitat",
"bpm": "tempo",
"playDate": "Darrer resproduït",
"channels": "Canals",
"createdAt": ""
"createdAt": "Creat el",
"grouping": "Agrupació",
"mood": "Sentiment",
"participants": "Participants",
"tags": "Etiquetes",
"mappedTags": "Etiquetes assignades",
"rawTags": "Etiquetes sense processar"
},
"actions": {
"addToQueue": "Reprodueix després",
@ -46,6 +54,7 @@
"duration": "Durada",
"songCount": "Cançons",
"playCount": "Reproduccions",
"size": "Mida",
"name": "Nom",
"genre": "Gènere",
"compilation": "Compilació",
@ -53,22 +62,28 @@
"updatedAt": "Actualitzat ",
"comment": "Comentari",
"rating": "Valoració",
"createdAt": "",
"size": "",
"originalDate": "",
"releaseDate": "",
"releases": "",
"released": ""
"createdAt": "Creat el",
"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"
},
"actions": {
"playAll": "Reprodueix",
"playNext": "Reprodueix la següent",
"addToQueue": "Reprodueix després",
"share": "Compartir",
"shuffle": "Aleatori",
"addToPlaylist": "Afegeix a la llista",
"download": "Descarrega",
"info": "Obtén informació",
"share": ""
"info": "Obtén informació"
},
"lists": {
"all": "Tot",
@ -85,11 +100,27 @@
"fields": {
"name": "Nom",
"albumCount": "Nombre d'àlbums",
"songCount": "Compte de cançons",
"songCount": "Nombre de cançons",
"size": "Mida",
"playCount": "Reproduccions",
"rating": "Valoració",
"genre": "Gènere",
"size": ""
"role": "Rol"
},
"roles": {
"albumartist": "Artista de l'Àlbum |||| Artistes de l'Àlbum",
"artist": "Artista |||| Artistes",
"composer": "Compositor |||| Compositors",
"conductor": "Conductor |||| Conductors",
"lyricist": "Lletrista |||| Lletristes",
"arranger": "Arranjador |||| Arranjadors",
"producer": "Productor |||| Productors",
"director": "Director |||| Directors",
"engineer": "Enginyer |||| Enginyers",
"mixer": "Mesclador |||| Mescladors",
"remixer": "Remesclador |||| Remescladors",
"djmixer": "DJ Mesclador |||| DJ Mescladors",
"performer": "Intèrpret |||| Intèrprets"
}
},
"user": {
@ -98,6 +129,7 @@
"userName": "Nom d'usuari",
"isAdmin": "És admin",
"lastLoginAt": "Última connexió",
"lastAccessAt": "Últim Accés",
"updatedAt": "Actualitzat",
"name": "Nom",
"password": "Contrasenya",
@ -169,36 +201,53 @@
}
},
"radio": {
"name": "",
"name": "Ràdio |||| Ràdios",
"fields": {
"name": "",
"streamUrl": "",
"homePageUrl": "",
"updatedAt": "",
"createdAt": ""
"name": "Nom",
"streamUrl": "URL del flux",
"homePageUrl": "URL principal",
"updatedAt": "Actualitzat",
"createdAt": "Creat"
},
"actions": {
"playNow": ""
"playNow": "Reprodueix"
}
},
"share": {
"name": "",
"name": "Compartir |||| Compartits",
"fields": {
"username": "",
"url": "",
"description": "",
"contents": "",
"expiresAt": "",
"lastVisitedAt": "",
"visitCount": "",
"format": "",
"maxBitRate": "",
"updatedAt": "",
"createdAt": "",
"downloadable": ""
}
}
},
"username": "Compartit per",
"url": "URL",
"description": "Descripció",
"downloadable": "Permet descarregar?",
"contents": "Continguts",
"expiresAt": "Caduca",
"lastVisitedAt": "Última Visita",
"visitCount": "Visites",
"format": "Format",
"maxBitRate": "Taxa de bits màx.",
"updatedAt": "Actualitzat",
"createdAt": "Creat"
},
"notifications": {},
"actions": {}
},
"missing": {
"name": "Fitxer faltant |||| Fitxers Faltants",
"empty": "No falten fitxers",
"fields": {
"path": "Directori",
"size": "Mida",
"updatedAt": "Desaparegut"
},
"actions": {
"remove": "Eliminar"
},
"notifications": {
"removed": "Fitxers faltants eliminats"
}
}
},
"ra": {
"auth": {
"welcome1": "Gràcies d'haver instal·lat Navidrome!",
@ -211,28 +260,30 @@
"password": "Contrasenya",
"sign_in": "Inicia sessió",
"sign_in_error": "L'autenticació ha fallat, torneu-ho a intentar",
"logout": "Sortida"
"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, useu solament lletres i nombres",
"invalidChars": "Si us plau, useu 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àcter o menys",
"minValue": "Ha de ser si més no %{min}",
"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": ""
"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",
"bulk_actions_mobile": "1 |||| %{smart_count}",
"cancel": "Cancel·la",
"clear_input_value": "Neteja el valor",
"clone": "Clona",
@ -256,9 +307,8 @@
"close_menu": "Tanca el menú",
"unselect": "Anul·la la selecció",
"skip": "Omet",
"bulk_actions_mobile": "",
"share": "",
"download": ""
"share": "Compartir",
"download": "Descarregar"
},
"boolean": {
"true": "Sí",
@ -334,7 +384,7 @@
"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 refresqueu aquesta finestra."
"new_version": "Hi ha una versió nova disponible! Si us plau actualitzeu aquesta finestra."
},
"toggleFieldsMenu": {
"columnsToDisplay": "Columnes a mostrar",
@ -351,29 +401,31 @@
"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)",
"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.",
"notifications_blocked": "Heu blocat les notificacions d'escriptori en les preferències del navegador",
"notifications_not_available": "El navegador no suporta les notificacions o no 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",
"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",
"openIn": {
"lastfm": "Obri en Last.fm",
"musicbrainz": "Obri en MusicBrainz"
},
"lastfmLink": "Llegeix més...",
"listenBrainzLinkSuccess": "Ha reexit la vinculació amb ListenBrainz i se n'ha activat el seguiment com a usuari: %{user}",
"listenBrainzLinkFailure": "No ha estat possible vincular-se a ListenBrainz: %{error}",
"listenBrainzUnlinkSuccess": "Desvinculat de ListenBrainz i desactivat el seguiment",
"listenBrainzUnlinkFailure": "No s'ha pogut desvincular de ListenBrainz",
"downloadOriginalFormat": "",
"shareOriginalFormat": "",
"shareDialogTitle": "",
"shareBatchDialogTitle": "",
"shareSuccess": "",
"shareFailure": "",
"downloadDialogTitle": "",
"shareCopyToClipboard": ""
"shareOriginalFormat": "Compartir en format original",
"shareDialogTitle": "Compartir %{resource} '%{name}'",
"shareBatchDialogTitle": "Compartir 1 %{resource} |||| Compartir %{smart_count} %{resource}",
"shareCopyToClipboard": "Copiar al porta-retalls: Ctrl+C, Enter",
"shareSuccess": "URL copiada al porta-retalls: %{url}",
"shareFailure": "Error copiant URL %{url} al porta-retalls",
"downloadDialogTitle": "Deascarregar %{resource} '%{name}' (%{size})",
"downloadOriginalFormat": "Descarregar en format original"
},
"menu": {
"library": "Discoteca",
@ -387,14 +439,15 @@
"language": "Llengua",
"defaultView": "Vista per defecte",
"desktop_notifications": "Notificacions d'escriptori",
"lastfmNotConfigured": "No s'ha configurat l'API de Last.fm",
"lastfmScrobbling": "Activa el seguiment de Last.fm",
"listenBrainzScrobbling": "Activa el seguiment de ListenBrainz",
"replaygain": "",
"preAmp": "",
"replaygain": "Mode ReplayGain",
"preAmp": "PreAmp de ReplayGain (dB)",
"gain": {
"none": "",
"album": "",
"track": ""
"none": "Cap",
"album": "Guany de l'àlbum",
"track": "Guany de la pista"
}
}
},
@ -432,7 +485,12 @@
"links": {
"homepage": "Inici",
"source": "Codi font",
"featureRequests": "Sol·licitud de funcionalitats"
"featureRequests": "Sol·licitud de funcionalitats",
"lastInsightsCollection": "Última recolecció d'informació",
"insights": {
"disabled": "Desactivada",
"waiting": "Esperant"
}
}
},
"activity": {
@ -454,7 +512,7 @@
"vol_up": "Apuja el volum",
"vol_down": "Abaixa el volum",
"toggle_love": "Afegeix la pista a favorits",
"current_song": ""
"current_song": "Anar a la cançó actual"
}
}
}
}

View File

@ -1,8 +1,8 @@
{
"languageName": "Engelsk",
"languageName": "Norsk",
"resources": {
"song": {
"name": "Låt |||| Låter",
"name": "Sang |||| Sanger",
"fields": {
"albumArtist": "Album Artist",
"duration": "Tid",
@ -11,164 +11,165 @@
"title": "Tittel",
"artist": "Artist",
"album": "Album",
"path": "Filbane",
"path": "Filsti",
"genre": "Sjanger",
"compilation": "Samling",
"compilation": "Samlingg",
"year": "År",
"size": "Filstørrelse",
"updatedAt": "Oppdatert kl",
"bitRate": "Bithastighet",
"discSubtitle": "Diskundertekst",
"updatedAt": "Oppdatert",
"bitRate": "Bit rate",
"bitDepth": "Bit depth",
"channels": "Kanaler",
"discSubtitle": "Disk Undertittel",
"starred": "Favoritt",
"comment": "Kommentar",
"rating": "Vurdering",
"rating": "Rangering",
"quality": "Kvalitet",
"bpm": "BPM",
"playDate": "Sist spilt",
"channels": "Kanaler",
"createdAt": "",
"grouping": "",
"mood": "",
"participants": "",
"tags": "",
"mappedTags": "",
"rawTags": "",
"bitDepth": ""
"playDate": "Sist Avspilt",
"createdAt": "Lagt til",
"grouping": "Gruppering",
"mood": "Stemning",
"participants": "Ytterlige deltakere",
"tags": "Ytterlige Tags",
"mappedTags": "Kartlagte tags",
"rawTags": "Rå tags"
},
"actions": {
"addToQueue": "Spill Senere",
"playNow": "Leke nå",
"addToQueue": "Avspill senere",
"playNow": "Avspill nå",
"addToPlaylist": "Legg til i spilleliste",
"shuffleAll": "Bland alle",
"download": "nedlasting",
"playNext": "Spill Neste",
"info": "Få informasjon"
"shuffleAll": "Shuffle Alle",
"download": "Last ned",
"playNext": "Avspill neste",
"info": "Få Info"
}
},
"album": {
"name": "Album",
"name": "Album |||| Album",
"fields": {
"albumArtist": "Album Artist",
"artist": "Artist",
"duration": "Tid",
"songCount": "Sanger",
"playCount": "Avspillinger",
"size": "Størrelse",
"name": "Navn",
"genre": "Sjanger",
"compilation": "Samling",
"year": "År",
"updatedAt": "Oppdatert kl",
"date": "Inspillingsdato",
"originalDate": "Original",
"releaseDate": "Utgitt",
"releases": "Utgivelse |||| Utgivelser",
"released": "Utgitt",
"updatedAt": "Oppdatert",
"comment": "Kommentar",
"rating": "Vurdering",
"createdAt": "",
"size": "",
"originalDate": "",
"releaseDate": "",
"releases": "",
"released": "",
"recordLabel": "",
"catalogNum": "",
"releaseType": "",
"grouping": "",
"media": "",
"mood": ""
"rating": "Rangering",
"createdAt": "Lagt Til",
"recordLabel": "Plateselskap",
"catalogNum": "Katalognummer",
"releaseType": "Type",
"grouping": "Gruppering",
"media": "Media",
"mood": "Stemning"
},
"actions": {
"playAll": "Spill",
"playNext": "Spill neste",
"addToQueue": "Spille senere",
"shuffle": "Bland",
"playAll": "Avspill",
"playNext": "Avspill Neste",
"addToQueue": "Avspill Senere",
"share": "Del",
"shuffle": "Shuffle",
"addToPlaylist": "Legg til i spilleliste",
"download": "nedlasting",
"info": "Få informasjon",
"share": ""
"download": "Last ned",
"info": "Få Info"
},
"lists": {
"all": "Alle",
"random": "Tilfeldig",
"recentlyAdded": "Nylig lagt til",
"recentlyPlayed": "Nylig spilt",
"mostPlayed": "Mest spilte",
"recentlyPlayed": "Nylig Avspilt",
"mostPlayed": "Mest Avspilt",
"starred": "Favoritter",
"topRated": "Topp rangert"
"topRated": "Top Rangert"
}
},
"artist": {
"name": "Artist |||| Artister",
"fields": {
"name": "Navn",
"albumCount": "Antall album",
"songCount": "Antall sanger",
"playCount": "Spiller",
"rating": "Vurdering",
"albumCount": "Album Antall",
"songCount": "Song Antall",
"size": "Størrelse",
"playCount": "Avspillinger",
"rating": "Rangering",
"genre": "Sjanger",
"size": "",
"role": ""
"role": "Rolle"
},
"roles": {
"albumartist": "",
"artist": "",
"composer": "",
"conductor": "",
"lyricist": "",
"arranger": "",
"producer": "",
"director": "",
"engineer": "",
"mixer": "",
"remixer": "",
"djmixer": "",
"performer": ""
"albumartist": "Album Artist |||| Album Artister",
"artist": "Artist |||| Artister",
"composer": "Composer |||| Composers",
"conductor": "Conductor |||| Conductors",
"lyricist": "Lyriker |||| Lyriker",
"arranger": "Arranger |||| Arrangers",
"producer": "Produsent |||| Produsenter",
"director": "Director |||| Directors",
"engineer": "Engineer |||| Engineers",
"mixer": "Mixer |||| Mixers",
"remixer": "Remixer |||| Remixers",
"djmixer": "DJ Mixer |||| DJ Mixers",
"performer": "Performer |||| Performers"
}
},
"user": {
"name": "Bruker |||| Brukere",
"fields": {
"userName": "Brukernavn",
"isAdmin": "er admin",
"lastLoginAt": "Siste pålogging kl",
"updatedAt": "Oppdatert kl",
"isAdmin": "Admin",
"lastLoginAt": "Sist Pålogging",
"lastAccessAt": "Sist Tilgang",
"updatedAt": "Oppdatert",
"name": "Navn",
"password": "Passord",
"createdAt": "Opprettet kl",
"changePassword": "Bytte Passord",
"createdAt": "Opprettet",
"changePassword": "Bytt Passord?",
"currentPassword": "Nåværende Passord",
"newPassword": "Nytt Passord",
"token": "Token",
"lastAccessAt": ""
"token": "Token"
},
"helperTexts": {
"name": "Endringer i navnet ditt vil kun gjenspeiles ved neste pålogging"
"name": "Navnendringer vil ikke være synlig før neste pålogging"
},
"notifications": {
"created": "Bruker opprettet",
"updated": "Bruker oppdatert",
"deleted": "Bruker fjernet"
"deleted": "Bruker slettet"
},
"message": {
"listenBrainzToken": "Skriv inn ListenBrainz-brukertokenet ditt.",
"clickHereForToken": "Klikk her for å få tokenet ditt"
"listenBrainzToken": "Fyll inn din ListenBrainz bruker token.",
"clickHereForToken": "Klikk her for å hente din token"
}
},
"player": {
"name": "Avspiller |||| Avspillere",
"name": "Musikkavspiller |||| Musikkavspillere",
"fields": {
"name": "Navn",
"transcodingId": "Omkoding",
"maxBitRate": "Maks. Bithastighet",
"transcodingId": "Transkoding",
"maxBitRate": "Maks. Bit Rate",
"client": "Klient",
"userName": "Brukernavn",
"lastSeen": "Sist sett kl",
"reportRealPath": "Rapporter ekte sti",
"lastSeen": "Sist sett",
"reportRealPath": "Rapporter ekte filsti",
"scrobbleEnabled": "Send Scrobbles til eksterne tjenester"
}
},
"transcoding": {
"name": "Omkoding |||| Omkodinger",
"name": "Transkoding |||| Transkodinger",
"fields": {
"name": "Navn",
"targetFormat": "Målformat",
"defaultBitRate": "Standard bithastighet",
"targetFormat": "Mål Format",
"defaultBitRate": "Default Bit Rate",
"command": "Kommando"
}
},
@ -176,135 +177,137 @@
"name": "Spilleliste |||| Spillelister",
"fields": {
"name": "Navn",
"duration": "Varighet",
"ownerName": "Eieren",
"duration": "Lengde",
"ownerName": "Eier",
"public": "Offentlig",
"updatedAt": "Oppdatert kl",
"createdAt": "Opprettet kl",
"updatedAt": "Oppdatert",
"createdAt": "Opprettet",
"songCount": "Sanger",
"comment": "Kommentar",
"sync": "Autoimport",
"path": "Import fra"
"sync": "Auto-importer",
"path": "Importer fra"
},
"actions": {
"selectPlaylist": "Velg en spilleliste:",
"addNewPlaylist": "Opprett \"%{name}\"",
"export": "Eksport",
"makePublic": "Gjør offentlig",
"makePrivate": "Gjør privat"
"export": "Eksporter",
"makePublic": "Gjør Offentlig",
"makePrivate": "Gjør Privat"
},
"message": {
"duplicate_song": "Legg til dupliserte sanger",
"song_exist": "Det legges til duplikater i spillelisten. Vil du legge til duplikatene eller hoppe over dem?"
"duplicate_song": "Legg til Duplikater",
"song_exist": "Duplikater har blitt lagt til i spillelisten. Ønsker du å legge til duplikater eller hoppe over de?"
}
},
"radio": {
"name": "",
"name": "Radio |||| Radio",
"fields": {
"name": "",
"streamUrl": "",
"homePageUrl": "",
"updatedAt": "",
"createdAt": ""
"name": "Navn",
"streamUrl": "Stream URL",
"homePageUrl": "Hjemmeside URL",
"updatedAt": "Oppdatert",
"createdAt": "Opprettet"
},
"actions": {
"playNow": ""
"playNow": "Avspill"
}
},
"share": {
"name": "",
"name": "Del |||| Delinger",
"fields": {
"username": "",
"url": "",
"description": "",
"contents": "",
"expiresAt": "",
"lastVisitedAt": "",
"visitCount": "",
"format": "",
"maxBitRate": "",
"updatedAt": "",
"createdAt": "",
"downloadable": ""
}
"username": "Delt Av",
"url": "URL",
"description": "Beskrivelse",
"downloadable": "Tillat Nedlastinger?",
"contents": "Innhold",
"expiresAt": "Utløper",
"lastVisitedAt": "Sist Besøkt",
"visitCount": "Visninger",
"format": "Format",
"maxBitRate": "Maks. Bit Rate",
"updatedAt": "Oppdatert",
"createdAt": "Opprettet"
},
"notifications": {},
"actions": {}
},
"missing": {
"name": "",
"name": "Manglende Fil|||| Manglende Filer",
"empty": "Ingen Manglende Filer",
"fields": {
"path": "",
"size": "",
"updatedAt": ""
"path": "Filsti",
"size": "Størrelse",
"updatedAt": "Ble borte"
},
"actions": {
"remove": ""
"remove": "Fjern"
},
"notifications": {
"removed": ""
},
"empty": ""
"removed": "Manglende fil(er) fjernet"
}
}
},
"ra": {
"auth": {
"welcome1": "Takk for at du installerte Navidrome!",
"welcome2": "Opprett en admin -bruker for å starte",
"welcome2": "La oss begynne med å lage en admin bruker.",
"confirmPassword": "Bekreft Passord",
"buttonCreateAdmin": "Opprett Admin",
"auth_check_error": "Vennligst Logg inn for å fortsette",
"auth_check_error": "Logg inn for å fortsette",
"user_menu": "Profil",
"username": "Brukernavn",
"password": "Passord",
"sign_in": "Logg inn",
"sign_in_error": "Autentisering mislyktes. Prøv på nytt",
"sign_in_error": "Autentiseringsfeil, vennligst prøv igjen",
"logout": "Logg ut",
"insightsCollectionNote": ""
"insightsCollectionNote": "Navidrome innhenter anonymisert forbruksdata\nfor å hjelpe og forbedre prosjektet.\nTrykk [her] for å lære mer og for å melde deg av hvis ønskelig."
},
"validation": {
"invalidChars": "Bruk bare bokstaver og tall",
"passwordDoesNotMatch": "Passordet er ikke like",
"required": "Obligatorisk",
"minLength": "Må være minst %{min} tegn",
"maxLength": "Må være %{max} tegn eller færre",
"invalidChars": "Det er kun bokstaver og tall som støttes",
"passwordDoesNotMatch": "Passord samstemmer ikke",
"required": "Kreves",
"minLength": "Må være minst %{min} karakterer.",
"maxLength": "Må være %{max} karakterer eller mindre",
"minValue": "Må være minst %{min}",
"maxValue": "Må være %{max} eller mindre",
"number": "Må være et tall",
"email": "Må være en gyldig e-post",
"email": "Må være en gyldig epost",
"oneOf": "Må være en av: %{options}",
"regex": "Må samsvare med et spesifikt format (regexp): %{pattern}",
"unique": "Må være unik",
"url": ""
"regex": "Må samstemme med et spesifikt format (regexp): %{pattern}",
"unique": "Må være unikt",
"url": "Må være en gyldig URL"
},
"action": {
"add_filter": "Legg til filter",
"add": "Legge til",
"back": "Gå tilbake",
"bulk_actions": "1 element valgt |||| %{smart_count} elementer er valgt",
"add": "Legg Til",
"back": "Tilbake",
"bulk_actions": "1 element valgt |||| %{smart_count} elementer valgt",
"bulk_actions_mobile": "1 |||| %{smart_count}",
"cancel": "Avbryt",
"clear_input_value": "Klar verdi",
"clear_input_value": "Nullstill verdi",
"clone": "Klone",
"confirm": "Bekrefte",
"create": "Skape",
"confirm": "Bekreft",
"create": "Opprett",
"delete": "Slett",
"edit": "Redigere",
"export": "Eksport",
"edit": "Rediger",
"export": "Eksporter",
"list": "Liste",
"refresh": "oppdater",
"refresh": "Oppdater",
"remove_filter": "Fjern dette filteret",
"remove": "Fjerne",
"remove": "Fjern",
"save": "Lagre",
"search": "Søk",
"show": "Vis",
"sort": "Sortere",
"sort": "Sorter",
"undo": "Angre",
"expand": "Utvide",
"expand": "Utvid",
"close": "Lukk",
"open_menu": "Åpne menyen",
"close_menu": "Lukk menyen",
"unselect": "Fjern valget",
"open_menu": "Åpne meny",
"close_menu": "Lukk meny",
"unselect": "Avvelg",
"skip": "Hopp over",
"bulk_actions_mobile": "",
"share": "",
"download": ""
"share": "Del",
"download": "Last Ned"
},
"boolean": {
"true": "Ja",
@ -312,29 +315,29 @@
},
"page": {
"create": "Opprett %{name}",
"dashboard": "Dashbord",
"dashboard": "Dashboard",
"edit": "%{name} #%{id}",
"error": "Noe gikk galt",
"list": "%{Navn}",
"list": "%{name}",
"loading": "Laster",
"not_found": "Ikke funnet",
"not_found": "Ikke Funnet",
"show": "%{name} #%{id}",
"empty": "Ingen %{name} en.",
"invite": "Vil du legge til en?"
"empty": "Ingen %{name} enda.",
"invite": "Ønsker du å legge til en?"
},
"input": {
"file": {
"upload_several": "Slipp noen filer for å laste opp, eller klikk for å velge en.",
"upload_single": "Slipp en fil for å laste opp, eller klikk for å velge den."
"upload_several": "Dra filer hit for å laste opp, eller klikk for å velge en.",
"upload_single": "Dra en fil hit for å laste opp, eller klikk for å velge den."
},
"image": {
"upload_several": "Slipp noen bilder for å laste opp, eller klikk for å velge ett.",
"upload_single": "Slipp et bilde for å laste opp, eller klikk for å velge det."
"upload_several": "Dra bilder hit for å laste opp, eller klikk for å velge en.",
"upload_single": "Dra et bilde hit for å laste opp, eller klikk for å velge den."
},
"references": {
"all_missing": "Kan ikke finne referansedata.",
"many_missing": "Minst én av de tilknyttede referansene ser ikke ut til å være tilgjengelig lenger.",
"single_missing": "Tilknyttet referanse ser ikke lenger ut til å være tilgjengelig."
"all_missing": "Finner ikke referansedata.",
"many_missing": "Minst en av de tilhørende referansene ser ikke lenger ut til å være tilgjengelig.",
"single_missing": "Tilhørende referanse ser ikke lenger ut til å være tilgjengelig."
},
"password": {
"toggle_visible": "Skjul passord",
@ -346,86 +349,86 @@
"are_you_sure": "Er du sikker?",
"bulk_delete_content": "Er du sikker på at du vil slette denne %{name}? |||| Er du sikker på at du vil slette disse %{smart_count} elementene?",
"bulk_delete_title": "Slett %{name} |||| Slett %{smart_count} %{name}",
"delete_content": "Er du sikker på at du vil slette dette elementet?",
"delete_content": "Er du sikker på at du ønsker å slette dette elementet?",
"delete_title": "Slett %{name} #%{id}",
"details": "Detaljer",
"error": "Det oppstod en klientfeil og forespørselen din kunne ikke fullføres.",
"invalid_form": "Skjemaet er ikke gyldig. Vennligst se etter feil",
"loading": "Siden lastes, bare et øyeblikk",
"error": "En klient feil har oppstått og din forespørsel lot seg ikke gjennomføre.",
"invalid_form": "Skjemaet er ikke gyldig. Vennligst se etter feil.",
"loading": "Siden laster, vennligst vent.",
"no": "Nei",
"not_found": "Enten skrev du inn feil URL, eller så fulgte du en dårlig lenke.",
"not_found": "Enten skrev du feil URL, eller så har du fulgt en dårlig link.",
"yes": "Ja",
"unsaved_changes": "Noen av endringene dine ble ikke lagret. Er du sikker på at du vil ignorere dem?"
"unsaved_changes": "Noen av dine endringer ble ikke lagret. Er du sikker på at du ønsker å ignorere de?"
},
"navigation": {
"no_results": "Ingen resultater",
"no_more_results": "Sidetallet %{page} er utenfor grensene. Prøv forrige side.",
"page_out_of_boundaries": "Sidetall %{page} utenfor grensene",
"page_out_from_end": "Kan ikke etter siste side",
"page_out_from_begin": "Kan ikke før side 1",
"no_more_results": "Sidenummeret %{page} er utenfor grensene. Prøv forrige side.",
"page_out_of_boundaries": "Sidenummer %{page} er utenfor grensene",
"page_out_from_end": "Kan ikke være etter siste side",
"page_out_from_begin": "Kan ikke være før side 1",
"page_range_info": "%{offsetBegin}-%{offsetEnd} av %{total}",
"page_rows_per_page": "Elementer per side:",
"next": "Neste",
"prev": "Forrige",
"skip_nav": "Hopp til innholdet"
"skip_nav": "Hopp til innhold"
},
"notification": {
"updated": "Element oppdatert |||| %{smart_count} elementer er oppdatert",
"updated": "Element oppdatert |||| %{smart_count} elementer oppdatert",
"created": "Element opprettet",
"deleted": "Element slettet |||| %{smart_count} elementer slettet",
"bad_item": "Feil element",
"item_doesnt_exist": "Elementet eksisterer ikke",
"http_error": "Serverkommunikasjonsfeil",
"data_provider_error": "dataleverandørfeil. Sjekk konsollen for detaljer.",
"i18n_error": "Kan ikke laste oversettelsene for det angitte språket",
"canceled": "Handlingen avbrutt",
"logged_out": "Økten din er avsluttet. Koble til på nytt.",
"new_version": "Ny versjon tilgjengelig! Trykk Oppdater "
"item_doesnt_exist": "Element eksisterer ikke",
"http_error": "Kommunikasjonsfeil mot server",
"data_provider_error": "dataProvider feil. Sjekk konsollet for feil.",
"i18n_error": "Klarte ikke laste oversettelser for valgt språk.",
"canceled": "Handling avbrutt",
"logged_out": "Din sesjon er avsluttet, vennligst koble til på nytt.",
"new_version": "Ny versjon tilgjengelig! Vennligst last siden på nytt."
},
"toggleFieldsMenu": {
"columnsToDisplay": "Kolonner som skal vises",
"layout": "Oppsett",
"grid": "Nett",
"table": "Bord"
"columnsToDisplay": "Vis følgende kolonner",
"layout": "Layout",
"grid": "Rutenett",
"table": "Tabell"
}
},
"message": {
"note": "Info",
"transcodingDisabled": "Endring av transkodingskonfigurasjonen gjennom webgrensesnittet er deaktivert av sikkerhetsgrunner. Hvis du ønsker å endre (redigere eller legge til) transkodingsalternativer, start serveren på nytt med %{config}-konfigurasjonsalternativet.",
"transcodingEnabled": "Navidrome kjører for øyeblikket med %{config}, noe som gjør det mulig å kjøre systemkommandoer fra transkodingsinnstillingene ved å bruke nettgrensesnittet. Vi anbefaler å deaktivere den av sikkerhetsgrunner og bare aktivere den når du konfigurerer alternativer for omkoding.",
"note": "NOTAT",
"transcodingDisabled": "Endringer på transkodingkonfigurasjon fra web grensesnittet er deaktivert grunnet sikkerhet. Hvis du ønsker å endre eller legge til transkodingsmuligheter, restart serveren med %{config} konfigurasjonsalternativ.",
"transcodingEnabled": "Navidrome kjører for øyeblikket med %{config}, som gjør det mulig å kjøre systemkommandoer fra transkodingsinstillinger i web grensesnittet. Vi anbefaler å deaktivere denne muligheten av sikkerhetsårsaker og heller kun ha det aktivert under konfigurasjon av transkodingsmuligheter.",
"songsAddedToPlaylist": "Lagt til 1 sang i spillelisten |||| Lagt til %{smart_count} sanger i spillelisten",
"noPlaylistsAvailable": "Ingen tilgjengelig",
"delete_user_title": "Slett bruker «%{name}»",
"delete_user_content": "Er du sikker på at du vil slette denne brukeren og alle dataene deres (inkludert spillelister og preferanser)?",
"notifications_blocked": "Du har blokkert varsler for dette nettstedet i nettleserens innstillinger",
"notifications_not_available": "Denne nettleseren støtter ikke skrivebordsvarsler, eller du har ikke tilgang til Navidrome over https",
"lastfmLinkSuccess": "Last.fm er vellykket koblet og scrobbling aktivert",
"lastfmLinkFailure": "Last.fm kunne ikke kobles til",
"lastfmUnlinkSuccess": "Last.fm koblet fra og scrobbling deaktivert",
"lastfmUnlinkFailure": "Last.fm kunne ikke kobles fra",
"delete_user_title": "Slett bruker '%{name}'",
"delete_user_content": "Er du sikker på at du vil slette denne brukeren og all tilhørlig data (inkludert spillelister og preferanser)?",
"remove_missing_title": "Fjern manglende filer",
"remove_missing_content": "Er du sikker på at du ønsker å fjerne de valgte manglende filene fra databasen? Dette vil permanent fjerne alle referanser til de, inkludert antall avspillinger og rangeringer.",
"notifications_blocked": "Du har blokkert notifikasjoner for denne nettsiden i din nettleser.",
"notifications_not_available": "Denne nettleseren støtter ikke skrivebordsnotifikasjoner, eller så er du ikke tilkoblet Navidrome via https.",
"lastfmLinkSuccess": "Last.fm er tilkoblet og scrobbling er aktivert",
"lastfmLinkFailure": "Last.fm kunne ikke koble til",
"lastfmUnlinkSuccess": "Last.fm er avkoblet og scrobbling er deaktivert",
"lastfmUnlinkFailure": "Last.fm kunne ikke avkobles",
"listenBrainzLinkSuccess": "ListenBrainz er koblet til og scrobbling er aktivert som bruker: %{user}",
"listenBrainzLinkFailure": "ListenBrainz kunne ikke koble til: %{error}",
"listenBrainzUnlinkSuccess": "ListenBrainz er avkoblet og scrobbling er deaktivert",
"listenBrainzUnlinkFailure": "ListenBrainz kunne ikke avkobles",
"openIn": {
"lastfm": "Åpne i Last.fm",
"musicbrainz": "Åpne i MusicBrainz"
},
"lastfmLink": "Les mer...",
"listenBrainzLinkSuccess": "ListenBrainz er vellykket koblet og scrobbling aktivert som bruker: %{user}",
"listenBrainzLinkFailure": "ListenBrainz kunne ikke kobles: %{error}",
"listenBrainzUnlinkSuccess": "ListenBrainz koblet fra og scrobbling deaktivert",
"listenBrainzUnlinkFailure": "ListenBrainz kunne ikke fjernes",
"downloadOriginalFormat": "",
"shareOriginalFormat": "",
"shareDialogTitle": "",
"shareBatchDialogTitle": "",
"shareSuccess": "",
"shareFailure": "",
"downloadDialogTitle": "",
"shareCopyToClipboard": "",
"remove_missing_title": "",
"remove_missing_content": ""
"lastfmLink": "Les Mer...",
"shareOriginalFormat": "Del i originalformat",
"shareDialogTitle": "Del %{resource} '%{name}'",
"shareBatchDialogTitle": "Del 1 %{resource} |||| Del %{smart_count} %{resource}",
"shareCopyToClipboard": "Kopier til utklippstavle: Ctrl+C, Enter",
"shareSuccess": "URL kopiert til utklippstavle: %{url}",
"shareFailure": "Error ved kopiering av URL %{url} til utklippstavle",
"downloadDialogTitle": "Last ned %{resource} '%{name}' (%{size})",
"downloadOriginalFormat": "Last ned i originalformat"
},
"menu": {
"library": "Bibliotek",
"settings": "Innstillinger",
"settings": "Instillinger",
"version": "Versjon",
"theme": "Tema",
"personal": {
@ -434,81 +437,81 @@
"theme": "Tema",
"language": "Språk",
"defaultView": "Standardvisning",
"desktop_notifications": "Skrivebordsvarsler",
"desktop_notifications": "Skrivebordsnotifikasjoner",
"lastfmNotConfigured": "Last.fm API-Key er ikke konfigurert",
"lastfmScrobbling": "Scrobble til Last.fm",
"listenBrainzScrobbling": "Scrobble til ListenBrainz",
"replaygain": "",
"preAmp": "",
"replaygain": "ReplayGain Mode",
"preAmp": "ReplayGain PreAmp (dB)",
"gain": {
"none": "",
"album": "",
"track": ""
},
"lastfmNotConfigured": ""
"none": "Deaktivert",
"album": "Bruk Album Gain",
"track": "Bruk Track Gain"
}
}
},
"albumList": "Album",
"about": "Om",
"playlists": "Spilleliste",
"sharedPlaylists": "Delte spillelister"
"playlists": "Spillelister",
"sharedPlaylists": "Delte Spillelister",
"about": "Om"
},
"player": {
"playListsText": "Spillekø",
"playListsText": "Spill Av Kø",
"openText": "Åpne",
"closeText": "Lukk",
"notContentText": "Ingen musikk",
"clickToPlayText": "Klikk for å spille",
"clickToPauseText": "Klikk for å sette på pause",
"clickToPlayText": "Klikk for å avspille",
"clickToPauseText": "Klikk for å pause",
"nextTrackText": "Neste spor",
"previousTrackText": "Forrige spor",
"reloadText": "Last inn på nytt",
"reloadText": "Last på nytt",
"volumeText": "Volum",
"toggleLyricText": "Veksle mellom tekster",
"toggleLyricText": "Slå på/av sangtekster",
"toggleMiniModeText": "Minimer",
"destroyText": "Ødelegge",
"downloadText": "nedlasting",
"destroyText": "Ødelegg",
"downloadText": "Last Ned",
"removeAudioListsText": "Slett lydlister",
"clickToDeleteText": "Klikk for å slette %{name}",
"emptyLyricText": "Ingen sangtekster",
"playModeText": {
"order": "I rekkefølge",
"orderLoop": "Gjenta",
"singleLoop": "Gjenta engang",
"shufflePlay": "Tilfeldig rekkefølge"
"orderLoop": "Repeat",
"singleLoop": "Repeat En",
"shufflePlay": "Shuffle"
}
},
"about": {
"links": {
"homepage": "Hjemmeside",
"source": "Kildekode",
"featureRequests": "Funksjonsforespørsler",
"lastInsightsCollection": "",
"featureRequests": "Funksjonsforespørseler",
"lastInsightsCollection": "Siste Innsamling av anonymisert forbruksdata",
"insights": {
"disabled": "",
"waiting": ""
"disabled": "Deaktivert",
"waiting": "Venter"
}
}
},
"activity": {
"title": "Aktivitet",
"totalScanned": "Totalt skannede mapper",
"quickScan": "Rask skanning",
"fullScan": "Full skanning",
"serverUptime": "Serveroppetid",
"totalScanned": "Antall mapper skannet",
"quickScan": "Hurtigskann",
"fullScan": "Full Skann",
"serverUptime": "Server Oppetid",
"serverDown": "OFFLINE"
},
"help": {
"title": "Navidrome hurtigtaster",
"title": "Navidrome Hurtigtaster",
"hotkeys": {
"show_help": "Vis denne hjelpen",
"toggle_menu": "Bytt menysidelinje",
"toggle_play": "Spill / Pause",
"prev_song": "Forrige sang",
"next_song": "Neste sang",
"vol_up": "Volum opp",
"vol_down": "Volum ned",
"toggle_love": "Legg til dette sporet i favoritter",
"current_song": ""
"show_help": "Vis Hjelp",
"toggle_menu": "Åpne/Lukke Sidepanel",
"toggle_play": "Avspill / Pause",
"prev_song": "Forrige Sang",
"next_song": "Neste Sang",
"current_song": "Gå til Nåværende Sang",
"vol_up": "Volum Opp",
"vol_down": "Volum Ned",
"toggle_love": "Legg til spor i favoritter"
}
}
}
}

View File

@ -33,7 +33,8 @@
"tags": "Дополнительные теги",
"mappedTags": "Сопоставленные теги",
"rawTags": "Исходные теги",
"bitDepth": "Битовая глубина"
"bitDepth": "Битовая глубина",
"sampleRate": "Частота дискретизации (Гц)"
},
"actions": {
"addToQueue": "В очередь",
@ -72,7 +73,7 @@
"grouping": "Группирование",
"media": "Медиа",
"mood": "Настроение",
"date": ""
"date": "Дата записи"
},
"actions": {
"playAll": "Играть",

View File

@ -1,465 +1,517 @@
{
"languageName": "српски",
"resources": {
"song": {
"name": "Песма |||| Песме",
"fields": {
"albumArtist": "Уметник албума",
"duration": "Трајање",
"trackNumber": "#",
"playCount": "Пуштано",
"title": "Наслов",
"artist": "Уметник",
"album": "Албум",
"path": "Путања фајла",
"genre": "Жанр",
"compilation": "Компилација",
"year": "Година",
"size": "Величина фајла",
"updatedAt": "Ажурирано",
"bitRate": "Битски проток",
"channels": "Канала",
"discSubtitle": "Поднаслов диска",
"starred": "Омиљено",
"comment": "Коментар",
"rating": "Рејтинг",
"quality": "Квалитет",
"bpm": "BPM",
"playDate": "Последње пуштано",
"createdAt": "Датум додавања"
},
"actions": {
"addToQueue": "Пусти касније",
"playNow": "Пусти одмах",
"addToPlaylist": "Додај у плејлисту",
"shuffleAll": "Измешај све",
"download": "Преузми",
"playNext": "Пусти наредно",
"info": "Прикажи инфо"
}
},
"album": {
"name": "Албум |||| Албуми",
"fields": {
"albumArtist": "Уметник албума",
"artist": "Уметник",
"duration": "Трајање",
"songCount": "Песме",
"playCount": "Пуштано",
"size": "Величина",
"name": "Назив",
"genre": "Жанр",
"compilation": "Компилација",
"year": "Година",
"originalDate": "Оригинално",
"releaseDate": "Објављено",
"releases": "Издање|||| Издања",
"released": "Објављено",
"updatedAt": "Ажурирано",
"comment": "Коментар",
"rating": "Рејтинг",
"createdAt": "Датум додавања"
},
"actions": {
"playAll": "Пусти",
"playNext": "Пусти наредно",
"addToQueue": "Пусти касније",
"share": "Дели",
"shuffle": "Измешај",
"addToPlaylist": "Додај у плејлисту",
"download": "Преузми",
"info": "Прикажи инфо"
},
"lists": {
"all": "Све",
"random": "Насумично",
"recentlyAdded": "Додато недавно",
"recentlyPlayed": "Пуштано недавно",
"mostPlayed": "Најчешће пуштано",
"starred": "Омиљено",
"topRated": "Најбоље рангирано"
}
},
"artist": {
"name": "Уметник |||| Уметници",
"fields": {
"name": "Име",
"albumCount": "Број албума",
"songCount": "Број песама",
"size": "Величина",
"playCount": "Пуштано",
"rating": "Рејтинг",
"genre": "Жанр"
}
},
"user": {
"name": "Корисник |||| Корисници",
"fields": {
"userName": "Корисничко име",
"isAdmin": "Да ли је Админ",
"lastLoginAt": "Последња пријава",
"lastAccessAt": "Последњи приступ",
"updatedAt": "Ажурирано",
"name": "Име",
"password": "Лозинка",
"createdAt": "Креирана",
"changePassword": "Измени лозинку?",
"currentPassword": "Текућа лозинка",
"newPassword": "Нова лозинка",
"token": "Жетон"
},
"helperTexts": {
"name": "Измене вашег имена ће постати видљиве након следеће пријаве"
},
"notifications": {
"created": "Корисник креиран",
"updated": "Корисник ажуриран",
"deleted": "Корисник обрисан"
},
"message": {
"listenBrainzToken": "Унесите свој ListenBrainz кориснички жетон.",
"clickHereForToken": "Кликните овде да преузмете свој жетон"
}
},
"player": {
"name": "Плејер |||| Плејери",
"fields": {
"name": "Назив",
"transcodingId": "Транскодирање",
"maxBitRate": "Макс. битски проток",
"client": "Клијент",
"userName": "Корисничко име",
"lastSeen": "последњи пут виђен",
"reportRealPath": "Пријављуј реалну путању",
"scrobbleEnabled": "Шаљи скроблове на спољне сервисе"
}
},
"transcoding": {
"name": "Транскодирање |||| Транскодирања",
"fields": {
"name": "Назив",
"targetFormat": "Циљни формат",
"defaultBitRate": "Подразумевани битски проток",
"command": "Команда"
}
},
"playlist": {
"name": "Плејлиста |||| Плејлисте",
"fields": {
"name": "Назив",
"duration": "Трајање",
"ownerName": "Власник",
"public": "Јавна",
"updatedAt": "Ажурирана",
"createdAt": "Креирана",
"songCount": "Песме",
"comment": "Коментар",
"sync": "Ауто-увоз",
"path": "Увоз из"
},
"actions": {
"selectPlaylist": "Изабери плејлисту",
"addNewPlaylist": "Креирај „%{name}”",
"export": "Извоз",
"makePublic": "Учини јавном",
"makePrivate": "Учини приватном"
},
"message": {
"duplicate_song": "Додај дуплиране песме",
"song_exist": "У плејлисту се додају дупликати. Желите ли да се додају, или да се прескоче?"
}
},
"radio": {
"name": "Радио |||| Радији",
"fields": {
"name": "Назив",
"streamUrl": "URL тока",
"homePageUrl": "URL почетне странице",
"updatedAt": "Ажурирано",
"createdAt": "Креирано"
},
"actions": {
"playNow": "Пусти одмах"
}
},
"share": {
"name": "Дељење |||| Дељења",
"fields": {
"username": "Поделио",
"url": "URL",
"description": "Опис",
"downloadable": "Допушта се преузимање?",
"contents": "Садржај",
"expiresAt": "Истиче",
"lastVisitedAt": "Последњи пут посећено",
"visitCount": "Број посета",
"format": "Формат",
"maxBitRate": "Макс. битски проток",
"updatedAt": "Ажурирано",
"createdAt": "Креирано"
},
"notifications": {
},
"actions": {
}
}
"languageName": "српски",
"resources": {
"song": {
"name": "Песма |||| Песме",
"fields": {
"album": "Албум",
"albumArtist": "Уметник албума",
"artist": "Уметник",
"bitDepth": "Битова",
"bitRate": "Битски проток",
"bpm": "BPM",
"channels": "Канала",
"comment": "Коментар",
"compilation": "Компилација",
"createdAt": "Датум додавања",
"discSubtitle": "Поднаслов диска",
"duration": "Трајање",
"genre": "Жанр",
"grouping": "Груписање",
"mappedTags": "Мапиране ознаке",
"mood": "Расположење",
"participants": "Додатни учесници",
"path": "Путања фајла",
"playCount": "Пуштано",
"playDate": "Последње пуштано",
"quality": "Квалитет",
"rating": "Рејтинг",
"rawTags": "Сирове ознаке",
"size": "Величина фајла",
"starred": "Омиљено",
"tags": "Додатне ознаке",
"title": "Наслов",
"trackNumber": "#",
"updatedAt": "Ажурирано",
"year": "Година"
},
"actions": {
"addToPlaylist": "Додај у плејлисту",
"addToQueue": "Пусти касније",
"download": "Преузми",
"info": "Прикажи инфо",
"playNext": "Пусти наредно",
"playNow": "Пусти одмах",
"shuffleAll": "Измешај све"
}
},
"ra": {
"auth": {
"welcome1": "Хвала што сте инсталирали Navidrome!",
"welcome2": "За почетак, креирајте админ корисника",
"confirmPassword": "Потврдите лозинку",
"buttonCreateAdmin": "Креирај админа",
"auth_check_error": "Ако желите да наставите, молимо вас да се пријавите",
"user_menu": "Профил",
"username": "Корисничко име",
"password": "Лозинка",
"sign_in": "Пријави се",
"sign_in_error": "Потврда идентитета није успела, покушајте поново",
"logout": "Одјави се"
},
"validation": {
"invalidChars": "Молимо вас да користите само слова и цифре",
"passwordDoesNotMatch": "Лозинка се не подудара",
"required": "Неопходно",
"minLength": "Мора да буде барем %{min} карактера",
"maxLength": "Мора да буде %{max} карактера или мање",
"minValue": "Мора да буде барем %{min}",
"maxValue": "Мора да буде %{max} или мање",
"number": "Мора да буде број",
"email": "Мора да буде исправна и-мејл адреса",
"oneOf": "Мора да буде једно од: %{options}",
"regex": "Мора да се подудара са одређеним форматом (регуларни израз): %{pattern}",
"unique": "Мора да буде јединствено",
"url": "Мора да буде исправна URL адреса"
},
"action": {
"add_filter": "Додај филтер",
"add": "Додај",
"back": "Иди назад",
"bulk_actions": "изабрана је 1 ставка |||| изабрано је %{smart_count} ставки",
"bulk_actions_mobile": "1 |||| %{smart_count}",
"cancel": "Откажи",
"clear_input_value": "Обриши вредност",
"clone": "Клонирај",
"confirm": "Потврди",
"create": "Креирај",
"delete": "Обриши",
"edit": "Уреди",
"export": "Извези",
"list": "Листа",
"refresh": "Освежи",
"remove_filter": "Уклони овај филтер",
"remove": "Уклони",
"save": "Сачувај",
"search": "Тражи",
"show": "Прикажи",
"sort": "Сортирај",
"undo": "Поништи",
"expand": "Развиј",
"close": "Затвори",
"open_menu": "Отвори мени",
"close_menu": "Затвори мени",
"unselect": "Уклони избор",
"skip": "Прескочи",
"share": "Подели",
"download": "Преузми"
},
"boolean": {
"true": "Да",
"false": "Не"
},
"page": {
"create": "Креирај %{name}",
"dashboard": "Контролна табла",
"edit": "%{name} #%{id}",
"error": "Нешто је пошло наопако",
"list": "%{name}",
"loading": "Учитава се",
"not_found": "Није пронађено",
"show": "%{name} #%{id}",
"empty": "Још увек нема %{name}.",
"invite": "Желите ли да се дода?"
},
"input": {
"file": {
"upload_several": "Упустите фајлове да се отпреме, или кликните да их изаберете.",
"upload_single": "Упустите фајл да се отпреми, или кликните да га изаберете."
},
"image": {
"upload_several": "Упустите слике да се отпреме, или кликните да их изаберете.",
"upload_single": "Упустите слику да се отпреми, или кликните да је изаберете."
},
"references": {
"all_missing": "Не могу да се нађу подаци референци.",
"many_missing": "Изгледа да барем једна од придружених референци више није доступна.",
"single_missing": "Изгледа да придружена референца више није доступна."
},
"password": {
"toggle_visible": "Сакриј лозинку",
"toggle_hidden": "Прикажи лозинку"
}
},
"message": {
"about": "О програму",
"are_you_sure": "Да ли сте сигурни?",
"bulk_delete_content": "Да ли заиста желите да обришете %{name}? |||| Да ли заиста желите да обришете %{smart_count} ставке?",
"bulk_delete_title": "Брисање %{name} |||| Брисање %{smart_count} %{name}",
"delete_content": "Да ли заиста желите да обришете ову ставку?",
"delete_title": "Брисање %{name} #%{id}",
"details": "Детаљи",
"error": "Дошло је до клијентске грешке и ваш захтев није могао да се изврши.",
"invalid_form": "Формулар није исправан. Молимо вас да исправите грешке",
"loading": "Страница се учитава, сачекајте мало",
"no": "Не",
"not_found": "Или сте откуцали погрешну URL адресу, или сте следили неисправан линк.",
"yes": "Да",
"unsaved_changes": "Неке од ваших измена нису сачуване. Да ли заиста желите да их одбаците?"
},
"navigation": {
"no_results": "Није пронађен ниједан резултат",
"no_more_results": "Број странице %{page} је ван опсега. Покушајте претходну страницу.",
"page_out_of_boundaries": "Број странице %{page} је ван опсега",
"page_out_from_end": "Не може да се иде након последње странице",
"page_out_from_begin": "Не може да се иде испред странице 1",
"page_range_info": "%{offsetBegin}-%{offsetEnd} од %{total}",
"page_rows_per_page": "Ставки по страници:",
"next": "Наредна",
"prev": "Претход",
"skip_nav": "Прескочи на садржај"
},
"notification": {
"updated": "Елемент је ажуриран |||| %{smart_count} елемената је ажурирано",
"created": "Елемент је креиран",
"deleted": "Елемент је обрисан |||| %{smart_count} елемената је обрисано",
"bad_item": "Неисправни елемент",
"item_doesnt_exist": "Елемент не постоји",
"http_error": "Грешка у комуникацији са сервером",
"data_provider_error": "dataProvider грешка. За више детаља погледајте конзолу.",
"i18n_error": "Не могу да се учитају преводи за наведени језик",
"canceled": "Акција је отказана",
"logged_out": "Ваша сесија је завршена, молимо вас да се повежите поново.",
"new_version": "Доступна је нова верзија! Молимо вас да освежите овај прозор."
},
"toggleFieldsMenu": {
"columnsToDisplay": "Колоне за приказ",
"layout": "Распоред",
"grid": "Мрежа",
"table": "Табела"
}
"album": {
"name": "Албум |||| Албуми",
"fields": {
"albumArtist": "Уметник албума",
"artist": "Уметник",
"catalogNum": "Каталошки број",
"comment": "Коментар",
"compilation": "Компилација",
"createdAt": "Датум додавања",
"date": "Датум снимања",
"duration": "Трајање",
"genre": "Жанр",
"grouping": "Груписање",
"media": "Медијум",
"mood": "Расположење",
"name": "Назив",
"originalDate": "Оригинално",
"playCount": "Пуштано",
"rating": "Рејтинг",
"recordLabel": "Издавачка кућа",
"releaseDate": "Објављено",
"releaseType": "Тип",
"released": "Објављено",
"releases": "Издање|||| Издања",
"size": "Величина",
"songCount": "Песме",
"updatedAt": "Ажурирано",
"year": "Година"
},
"actions": {
"addToPlaylist": "Додај у плејлисту",
"addToQueue": "Пусти касније",
"download": "Преузми",
"info": "Прикажи инфо",
"playAll": "Пусти",
"playNext": "Пусти наредно",
"share": "Дели",
"shuffle": "Измешај"
},
"lists": {
"all": "Све",
"mostPlayed": "Најчешће пуштано",
"random": "Насумично",
"recentlyAdded": "Додато недавно",
"recentlyPlayed": "Пуштано недавно",
"starred": "Омиљено",
"topRated": "Најбоље рангирано"
}
},
"message": {
"note": "НАПОМЕНА",
"transcodingDisabled": "Измена конфигурације транскодирања кроз веб интерфејс је искључена из разлога безбедности. Ако желите да измените (уредите или додате) опције транскодирања, поново покрените сервер са %{config} конфигурационом опцијом.",
"transcodingEnabled": "Navidrome се тренутно извршава са %{config}, чиме је омогућено извршавање системских команди из подешавања транскодирања коришћењем веб интерфејса. Из разлога безбедности, препоручујемо да то искључите, а да омогућите само када конфигуришете опције транскодирања.",
"songsAddedToPlaylist": "У плејлисту је додата 1 песма |||| У плејлисту је додато %{smart_count} песама",
"noPlaylistsAvailable": "Није доступна ниједна",
"delete_user_title": "Брисање корисника %{name}",
"delete_user_content": "Да ли заиста желите да обришете овог корисника, заједно са свим његовим подацима (плејлистама и подешавањима)?",
"notifications_blocked": "У подешавањима интернет прегледача за овај сајт, блокирали сте обавештења",
"notifications_not_available": "Овај интернет прегледач не подржава десктоп обавештења, или Navidrome серверу не приступате преко https протокола",
"lastfmLinkSuccess": "Last.fm је успешно повезан и укључено је скробловање",
"lastfmLinkFailure": "Last.fm није могао да се повеже",
"lastfmUnlinkSuccess": "Last.fm више није повезан и скробловање је искључено",
"lastfmUnlinkFailure": "Није могла да се уклони веза са Last.fm",
"listenBrainzLinkSuccess": "ListenBrainz је успешно повезан и скробловање је укључено као корисник: %{user}",
"listenBrainzLinkFailure": "ListenBrainz није могао да се повеже: %{error}",
"listenBrainzUnlinkSuccess": "ListenBrainz више није повезан и скробловање је искључено",
"listenBrainzUnlinkFailure": "Није могла да се уклони веза са ListenBrainz",
"openIn": {
"lastfm": "Отвори у Last.fm",
"musicbrainz": "Отвори у MusicBrainz"
},
"lastfmLink": "Прочитај још...",
"shareOriginalFormat": "Подели у оригиналном формату",
"shareDialogTitle": "Подели %{resource} %{name}",
"shareBatchDialogTitle": "Подели 1 %{resource} |||| Подели %{smart_count} %{resource}",
"shareCopyToClipboard": "Копирај у клипборд: Ctrl+C, Ентер",
"shareSuccess": "URL је копиран у клипборд: %{url}",
"shareFailure": "Грешка приликом копирања URL адресе %{url} у клипборд",
"downloadDialogTitle": "Преузимање %{resource} %{name} (%{size})",
"downloadOriginalFormat": "Преузми у оригиналном формату"
"artist": {
"name": "Уметник |||| Уметници",
"fields": {
"albumCount": "Број албума",
"genre": "Жанр",
"name": "Назив",
"playCount": "Пуштано",
"rating": "Рејтинг",
"role": "Улога",
"size": "Величина",
"songCount": "Број песама"
},
"roles": {
"albumartist": "Уметник албума |||| Уметници албума",
"arranger": "Аранжер |||| Аранжери",
"artist": "Уметник |||| Уметници",
"composer": "Композитор |||| Композитори",
"conductor": "Диригент |||| Диригенти",
"director": "Режисер |||| Режисери",
"djmixer": "Ди-џеј миксер |||| Ди-џеј миксер",
"engineer": "Инжењер |||| Инжењери",
"lyricist": "Текстописац |||| Текстописци",
"mixer": "Миксер |||| Миксери",
"performer": "Извођач |||| Извођачи",
"producer": "Продуцент |||| Продуценти",
"remixer": "Ремиксер |||| Ремиксери"
}
},
"menu": {
"library": "Библиотека",
"settings": "Подешавања",
"version": "Верзија",
"theme": "Тема",
"personal": {
"name": "Лична",
"options": {
"theme": "Тема",
"language": "Језик",
"defaultView": "Подразумевани поглед",
"desktop_notifications": "Десктоп обавештења",
"lastfmScrobbling": "Скроблуј на Last.fm",
"listenBrainzScrobbling": "Скроблуј на ListenBrainz",
"replaygain": "ReplayGain режим",
"preAmp": "ReplayGain претпојачање (dB)",
"gain": {
"none": "Искључено",
"album": "Користи Album појачање",
"track": "Користи Track појачање"
}
}
},
"albumList": "Албуми",
"playlists": "Плејлисте",
"sharedPlaylists": "Дељене плејлисте",
"about": "О"
"user": {
"name": "Корисник |||| Корисници",
"fields": {
"changePassword": "Измени лозинку?",
"createdAt": "Креирана",
"currentPassword": "Текућа лозинка",
"isAdmin": "Да ли је Админ",
"lastAccessAt": "Последњи приступ",
"lastLoginAt": "Последња пријава",
"name": "Назив",
"newPassword": "Нова лозинка",
"password": "Лозинка",
"token": "Жетон",
"updatedAt": "Ажурирано",
"userName": "Корисничко име"
},
"helperTexts": {
"name": "Измене вашег имена ће постати видљиве након следеће пријаве"
},
"notifications": {
"created": "Корисник креиран",
"deleted": "Корисник обрисан",
"updated": "Корисник ажуриран"
},
"message": {
"clickHereForToken": "Кликните овде да преузмете свој жетон",
"listenBrainzToken": "Унесите свој ListenBrainz кориснички жетон."
}
},
"player": {
"playListsText": "Ред за пуштање",
"openText": "Отвори",
"closeText": "Затвори",
"notContentText": "Нема музике",
"clickToPlayText": "Кликни за пуштање",
"clickToPauseText": "Кликни за паузирање",
"nextTrackText": "Наредна нумера",
"previousTrackText": "Претходна нумера",
"reloadText": "Поново учитај",
"volumeText": "Јачина",
"toggleLyricText": "Укљ./Искљ. стихове",
"toggleMiniModeText": "Умањи",
"destroyText": "Уништи",
"downloadText": "Преузми",
"removeAudioListsText": "Обриши аудио листе",
"clickToDeleteText": "Кликните да обришете %{name}",
"emptyLyricText": "Нема стихова",
"playModeText": {
"order": "По редоследу",
"orderLoop": "Понови",
"singleLoop": "Понови једну",
"shufflePlay": "Промешано"
}
"name": "Плејер |||| Плејери",
"fields": {
"client": "Клијент",
"lastSeen": "Последњи пут виђен",
"maxBitRate": "Макс. битски проток",
"name": "Назив",
"reportRealPath": "Пријављуј реалну путању",
"scrobbleEnabled": "Шаљи скроблове на спољне сервисе",
"transcodingId": "Транскодирање",
"userName": "Корисничко име"
}
},
"about": {
"links": {
"homepage": "Почетна страница",
"source": "Изворни кôд",
"featureRequests": "Захтеви за функцијама"
}
"transcoding": {
"name": "Транскодирање |||| Транскодирања",
"fields": {
"command": "Команда",
"defaultBitRate": "Подразумевани битски проток",
"name": "Назив",
"targetFormat": "Циљни формат"
}
},
"activity": {
"title": "Активност",
"totalScanned": "Укупан број скенираних фолдера",
"quickScan": "Брзо скенирање",
"fullScan": "Комплетно скенирање",
"serverUptime": "Сервер се извршава",
"serverDown": "ВАН МРЕЖЕ"
"playlist": {
"name": "Плејлиста |||| Плејлисте",
"fields": {
"comment": "Коментар",
"createdAt": "Креирана",
"duration": "Трајање",
"name": "Назив",
"ownerName": "Власник",
"path": "Увоз из",
"public": "Јавна",
"songCount": "Песме",
"sync": "Ауто-увоз",
"updatedAt": "Ажурирано"
},
"actions": {
"addNewPlaylist": "Креирај „%{name}”",
"export": "Извези",
"makePrivate": "Учини приватном",
"makePublic": "Учини јавном",
"selectPlaylist": "Изабери плејлисту"
},
"message": {
"duplicate_song": "Додај дуплиране песме",
"song_exist": "У плејлисту се додају дупликати. Желите ли да се додају, или да се прескоче?"
}
},
"help": {
"title": "Navidrome пречице",
"hotkeys": {
"show_help": "Прикажи ову помоћ",
"toggle_menu": "Укљ./Искљ. бочну траку менија",
"toggle_play": "Пусти / Паузирај",
"prev_song": "Претходна песма",
"next_song": "Наредна песма",
"current_song": "Иди на текућу песму",
"vol_up": "Појачај",
"vol_down": "Утишај",
"toggle_love": "Додај ову нумеру у омиљене"
}
"radio": {
"name": "Радио |||| Радији",
"fields": {
"createdAt": "Креирана",
"homePageUrl": "URL почетне странице",
"name": "Назив",
"streamUrl": "URL тока",
"updatedAt": "Ажурирано"
},
"actions": {
"playNow": "Пусти одмах"
}
},
"share": {
"name": "Дељење |||| Дељења",
"fields": {
"contents": "Садржај",
"createdAt": "Креирано",
"description": "Опис",
"downloadable": "Допушта се преузимање?",
"expiresAt": "Истиче",
"format": "Формат",
"lastVisitedAt": "Последњи пут посећено",
"maxBitRate": "Макс. битски проток",
"updatedAt": "Ажурирано",
"url": "URL",
"username": "Поделио",
"visitCount": "Број посета"
},
"notifications": {},
"actions": {}
},
"missing": {
"name": "Фајл који недостаје|||| Фајлови који недостају",
"empty": "Нема фајлова који недостају",
"fields": {
"path": "Путања",
"size": "Величина",
"updatedAt": "Нестао дана"
},
"actions": {
"remove": "Уклони"
},
"notifications": {
"removed": "Фајл који недостаје, или више њих, је уклоњен"
}
}
},
"ra": {
"auth": {
"auth_check_error": "Ако желите да наставите, молимо вас да се пријавите",
"buttonCreateAdmin": "Креирај админа",
"confirmPassword": "Потврдите лозинку",
"insightsCollectionNote": "Navidrome прикупља анонимне податке о коришћењу\nшто олакшава унапређење пројекта. Кликните [овде] да\nсазнате више и да одустанете од прикупљања ако желите",
"logout": "Одјави се",
"password": "Лозинка",
"sign_in": "Пријави се",
"sign_in_error": "Потврда идентитета није успела, покушајте поново",
"user_menu": "Профил",
"username": "Корисничко име",
"welcome1": "Хвала што сте инсталирали Navidrome!",
"welcome2": "За почетак, креирајте админ корисника"
},
"validation": {
"email": "Мора да буде исправна и-мејл адреса",
"invalidChars": "Молимо вас да користите само слова и цифре",
"maxLength": "Мора да буде %{max} карактера или мање",
"maxValue": "Мора да буде %{max} или мање",
"minLength": "Мора да буде барем %{min} карактера",
"minValue": "Мора да буде барем %{min}",
"number": "Мора да буде број",
"oneOf": "Мора да буде једно од: %{options}",
"passwordDoesNotMatch": "Лозинка се не подудара",
"regex": "Мора да се подудара са одређеним форматом (регуларни израз): %{pattern}",
"required": "Неопходно",
"unique": "Мора да буде јединствено",
"url": "Мора да буде исправна URL адреса"
},
"action": {
"add": "Додај",
"add_filter": "Додај филтер",
"back": "Иди назад",
"bulk_actions": "изабрана је 1 ставка |||| изабрано је %{smart_count} ставки",
"bulk_actions_mobile": "1 |||| %{smart_count}",
"cancel": "Откажи",
"clear_input_value": "Обриши вредност",
"clone": "Клонирај",
"close": "Затвори",
"close_menu": "Затвори мени",
"confirm": "Потврди",
"create": "Креирај",
"delete": "Обриши",
"download": "Преузми",
"edit": "Уреди",
"expand": "Развиј",
"export": "Извези",
"list": "Листа",
"open_menu": "Отвори мени",
"refresh": "Освежи",
"remove": "Уклони",
"remove_filter": "Уклони овај филтер",
"save": "Сачувај",
"search": "Тражи",
"share": "Дели",
"show": "Прикажи",
"skip": "Прескочи",
"sort": "Сортирај",
"undo": "Поништи",
"unselect": "Уклони избор"
},
"boolean": {
"false": "Не",
"true": "Да"
},
"page": {
"create": "Креирај %{name}",
"dashboard": "Контролна табла",
"edit": "%{name} #%{id}",
"empty": "Још увек нема %{name}.",
"error": "Нешто је пошло наопако",
"invite": "Желите ли да се дода?",
"list": "%{name}",
"loading": "Учитава се",
"not_found": "Није пронађено",
"show": "%{name} #%{id}"
},
"input": {
"file": {
"upload_several": "Упустите фајлове да се отпреме, или кликните да их изаберете.",
"upload_single": "Упустите фајл да се отпреми, или кликните да га изаберете."
},
"image": {
"upload_several": "Упустите слике да се отпреме, или кликните да их изаберете.",
"upload_single": "Упустите слику да се отпреми, или кликните да је изаберете."
},
"password": {
"toggle_hidden": "Прикажи лозинку",
"toggle_visible": "Сакриј лозинку"
},
"references": {
"all_missing": "Не могу да се нађу подаци референци.",
"many_missing": "Изгледа да барем једна од придружених референци више није доступна.",
"single_missing": "Изгледа да придружена референца више није доступна."
}
},
"message": {
"about": "О",
"are_you_sure": "Да ли сте сигурни?",
"bulk_delete_content": "Да ли заиста желите да обришете %{name}? |||| Да ли заиста желите да обришете %{smart_count} ставке?",
"bulk_delete_title": "Брисање %{name} |||| Брисање %{smart_count} %{name}",
"delete_content": "Да ли заиста желите да обришете ову ставку?",
"delete_title": "Брисање %{name} #%{id}",
"details": "Детаљи",
"error": "Дошло је до клијентске грешке и ваш захтев није могао да се изврши.",
"invalid_form": "Формулар није исправан. Молимо вас да исправите грешке",
"loading": "Страница се учитава, сачекајте мало",
"no": "Не",
"not_found": "Или сте откуцали погрешну URL адресу, или сте следили неисправан линк.",
"unsaved_changes": "Неке од ваших измена нису сачуване. Да ли заиста желите да их одбаците?",
"yes": "Да"
},
"navigation": {
"next": "Наредна",
"no_more_results": "Број странице %{page} је ван опсега. Покушајте претходну страницу.",
"no_results": "Није пронађен ниједан резултат",
"page_out_from_begin": "Не може да се иде испред странице 1",
"page_out_from_end": "Не може да се иде након последње странице",
"page_out_of_boundaries": "Број странице %{page} је ван опсега",
"page_range_info": "%{offsetBegin}-%{offsetEnd} од %{total}",
"page_rows_per_page": "Ставки по страници:",
"prev": "Претход",
"skip_nav": "Прескочи на садржај"
},
"notification": {
"bad_item": "Неисправни елемент",
"canceled": "Акција је отказана",
"created": "Елемент је креиран",
"data_provider_error": "dataProvider грешка. За више детаља погледајте конзолу.",
"deleted": "Елемент је обрисан |||| %{smart_count} елемената је обрисано",
"http_error": "Грешка у комуникацији са сервером",
"i18n_error": "Не могу да се учитају преводи за наведени језик",
"item_doesnt_exist": "Елемент не постоји",
"logged_out": "Ваша сесија је завршена, молимо вас да се повежите поново.",
"new_version": "Доступна је нова верзија! Молимо вас да освежите овај прозор.",
"updated": "Елемент је ажуриран |||| %{smart_count} елемената је ажурирано"
},
"toggleFieldsMenu": {
"columnsToDisplay": "Колоне за приказ",
"grid": "Мрежа",
"layout": "Распоред",
"table": "Табела"
}
},
"message": {
"delete_user_content": "Да ли заиста желите да обришете овог корисника, заједно са свим његовим подацима (плејлистама и подешавањима)?",
"delete_user_title": "Брисање корисника %{name}",
"downloadDialogTitle": "Преузимање %{resource} %{name} (%{size})",
"downloadOriginalFormat": "Преузми у оригиналном формату",
"lastfmLink": "Прочитај још...",
"lastfmLinkFailure": "Last.fm није могао да се повеже",
"lastfmLinkSuccess": "Last.fm је успешно повезан и укључено је скробловање",
"lastfmUnlinkFailure": "Није могла да се уклони веза са Last.fm",
"lastfmUnlinkSuccess": "Last.fm више није повезан и скробловање је искључено",
"listenBrainzLinkFailure": "ListenBrainz није могао да се повеже: %{error}",
"listenBrainzLinkSuccess": "ListenBrainz је успешно повезан и скробловање је укључено као корисник: %{user}",
"listenBrainzUnlinkFailure": "Није могла да се уклони веза са ListenBrainz",
"listenBrainzUnlinkSuccess": "ListenBrainz више није повезан и скробловање је искључено",
"noPlaylistsAvailable": "Није доступна ниједна",
"note": "НАПОМЕНА",
"notifications_blocked": "У подешавањима интернет прегледача за овај сајт, блокирали сте обавештења",
"notifications_not_available": "Овај интернет прегледач не подржава десктоп обавештења, или Navidrome серверу не приступате преко https протокола",
"openIn": {
"lastfm": "Отвори у Last.fm",
"musicbrainz": "Отвори у MusicBrainz"
},
"remove_missing_content": "Да ли сте сигурни да из базе података желите да уклоните фајлове који недостају? Ово ће трајно да уклони све референце на њих, укључујући број пуштања и рангирања.",
"remove_missing_title": "Уклони фајлове који недостају",
"shareBatchDialogTitle": "Подели 1 %{resource} |||| Подели %{smart_count} %{resource}",
"shareCopyToClipboard": "Копирај у клипборд: Ctrl+C, Ентер",
"shareDialogTitle": "Подели %{resource} %{name}",
"shareFailure": "Грешка приликом копирања URL адресе %{url} у клипборд",
"shareOriginalFormat": "Подели у оригиналном формату",
"shareSuccess": "URL је копиран у клипборд: %{url}",
"songsAddedToPlaylist": "У плејлисту је додата 1 песма |||| У плејлисту је додато %{smart_count} песама",
"transcodingDisabled": "Измена конфигурације транскодирања кроз веб интерфејс је искључена из разлога безбедности. Ако желите да измените (уредите или додате) опције транскодирања, поново покрените сервер са %{config} конфигурационом опцијом.",
"transcodingEnabled": "Navidrome се тренутно извршава са %{config}, чиме је омогућено извршавање системских команди из подешавања транскодирања коришћењем веб интерфејса. Из разлога безбедности, препоручујемо да то искључите, а да омогућите само када конфигуришете опције транскодирања."
},
"menu": {
"about": "О",
"albumList": "Албуми",
"library": "Библиотека",
"personal": {
"name": "Лична",
"options": {
"defaultView": "Подразумевани поглед",
"desktop_notifications": "Десктоп обавештења",
"gain": {
"album": "Користи Album појачање",
"none": "Искључено",
"track": "Користи Track појачање"
},
"language": "Језик",
"lastfmNotConfigured": "Није подешен Last.fm API-кључ",
"lastfmScrobbling": "Скроблуј на Last.fm",
"listenBrainzScrobbling": "Скроблуј на ListenBrainz",
"preAmp": "ReplayGain претпојачање (dB)",
"replaygain": "ReplayGain режим",
"theme": "Тема"
}
},
"playlists": "Плејлисте",
"settings": "Подешавања",
"sharedPlaylists": "Дељене плејлисте",
"theme": "Тема",
"version": "Верзија"
},
"player": {
"clickToDeleteText": "Кликните да обришете %{name}",
"clickToPauseText": "Кликни за паузирање",
"clickToPlayText": "Кликни за пуштање",
"closeText": "Затвори",
"destroyText": "Уништи",
"downloadText": "Преузми",
"emptyLyricText": "Нема стихова",
"nextTrackText": "Наредна нумера",
"notContentText": "Нема музике",
"openText": "Отвори",
"playListsText": "Ред за пуштање",
"playModeText": {
"order": "По редоследу",
"orderLoop": "Понови",
"shufflePlay": "Измешај",
"singleLoop": "Понови једну"
},
"previousTrackText": "Претходна нумера",
"reloadText": "Поново учитај",
"removeAudioListsText": "Обриши аудио листе",
"toggleLyricText": "Укљ./Искљ. стихове",
"toggleMiniModeText": "Умањи",
"volumeText": "Јачина"
},
"about": {
"links": {
"featureRequests": "Захтеви за функцијама",
"homepage": "Почетна страница",
"insights": {
"disabled": "Искључено",
"waiting": "Чека се"
},
"lastInsightsCollection": "Последња колекција увида",
"source": "Изворни кôд"
}
},
"activity": {
"fullScan": "Комплетно скенирање",
"quickScan": "Брзо скенирање",
"serverDown": "ВАН МРЕЖЕ",
"serverUptime": "Сервер се извршава",
"title": "Активност",
"totalScanned": "Укупан број скенираних фолдера"
},
"help": {
"title": "Navidrome пречице",
"hotkeys": {
"current_song": "Иди на текућу песму",
"next_song": "Наредна песма",
"prev_song": "Претходна песма",
"show_help": "Прикажи ову помоћ",
"toggle_love": "Додај ову нумеру у омиљене",
"toggle_menu": "Укљ./Искљ. бочну траку менија",
"toggle_play": "Пусти / Паузирај",
"vol_down": "Утишај",
"vol_up": "Појачај"
}
}
}

View File

@ -33,7 +33,8 @@
"tags": "Ek Etiketler",
"mappedTags": "Eşlenen etiketler",
"rawTags": "Ham etiketler",
"bitDepth": "Bit derinliği"
"bitDepth": "Bit derinliği",
"sampleRate": "Örnekleme Oranı"
},
"actions": {
"addToQueue": "Oynatma Sırasına Ekle",

View File

@ -12,12 +12,14 @@
"artist": "歌手",
"album": "专辑",
"path": "文件路径",
"genre": "类型",
"genre": "流派",
"compilation": "合辑",
"year": "发行年份",
"size": "文件大小",
"updatedAt": "更新于",
"bitRate": "比特率",
"bitDepth": "比特深度",
"channels": "声道",
"discSubtitle": "字幕",
"starred": "收藏",
"comment": "注释",
@ -25,8 +27,13 @@
"quality": "品质",
"bpm": "BPM",
"playDate": "最后一次播放",
"channels": "声道",
"createdAt": "创建于"
"createdAt": "创建于",
"grouping": "分组",
"mood": "情绪",
"participants": "其他参与人员",
"tags": "附加标签",
"mappedTags": "映射标签",
"rawTags": "原始标签"
},
"actions": {
"addToQueue": "加入播放列表",
@ -46,29 +53,36 @@
"duration": "时长",
"songCount": "歌曲数量",
"playCount": "播放次数",
"size": "文件大小",
"name": "名称",
"genre": "类型",
"genre": "流派",
"compilation": "合辑",
"year": "发行年份",
"date": "录制日期",
"originalDate": "原始日期",
"releaseDate": "发⾏日期",
"releases": "发⾏",
"released": "已发⾏",
"updatedAt": "更新于",
"comment": "注释",
"rating": "评分",
"createdAt": "创建于",
"size": "文件大小",
"originalDate": "原始日期",
"releaseDate": "发⾏日期",
"releases": "发⾏",
"released": "已发⾏"
"recordLabel": "厂牌",
"catalogNum": "目录编号",
"releaseType": "发行类型",
"grouping": "分组",
"media": "媒体类型",
"mood": "情绪"
},
"actions": {
"playAll": "立即播放",
"playNext": "下首播放",
"addToQueue": "加入播放列表",
"share": "分享",
"shuffle": "随机播放",
"addToPlaylist": "加入歌单",
"download": "下载",
"info": "查看信息",
"share": "分享"
"info": "查看信息"
},
"lists": {
"all": "所有",
@ -86,10 +100,26 @@
"name": "名称",
"albumCount": "专辑数",
"songCount": "歌曲数",
"size": "文件大小",
"playCount": "播放次数",
"rating": "评分",
"genre": "类型",
"size": "文件大小"
"genre": "流派",
"role": "参与角色"
},
"roles": {
"albumartist": "专辑歌手",
"artist": "歌手",
"composer": "作曲",
"conductor": "指挥",
"lyricist": "作词",
"arranger": "编曲",
"producer": "制作人",
"director": "总监",
"engineer": "工程师",
"mixer": "混音师",
"remixer": "重混师",
"djmixer": "DJ混音师",
"performer": "演奏家"
}
},
"user": {
@ -98,6 +128,7 @@
"userName": "用户名",
"isAdmin": "是否管理员",
"lastLoginAt": "上次登录",
"lastAccessAt": "上次访问",
"updatedAt": "更新于",
"name": "名称",
"password": "密码",
@ -108,7 +139,7 @@
"token": "令牌"
},
"helperTexts": {
"name": "你名字的更改将在下次登录生效"
"name": "名称的更改将在下次登录时生效"
},
"notifications": {
"created": "用户已创建",
@ -187,6 +218,7 @@
"username": "分享者",
"url": "链接",
"description": "描述",
"downloadable": "是否允许下载?",
"contents": "目录",
"expiresAt": "过期于",
"lastVisitedAt": "上次访问于",
@ -194,8 +226,24 @@
"format": "格式",
"maxBitRate": "最大比特率",
"updatedAt": "更新于",
"createdAt": "创建于",
"downloadable": "是否允许下载"
"createdAt": "创建于"
},
"notifications": {},
"actions": {}
},
"missing": {
"name": "丢失文件",
"empty": "无丢失文件",
"fields": {
"path": "路径",
"size": "文件大小",
"updatedAt": "丢失于"
},
"actions": {
"remove": "移除"
},
"notifications": {
"removed": "丢失文件已移除"
}
}
},
@ -211,7 +259,8 @@
"password": "密码",
"sign_in": "登录",
"sign_in_error": "验证失败,请重试",
"logout": "注销"
"logout": "注销",
"insightsCollectionNote": "Navidrome 会收集匿名使用数据以协助改进项目。\n点击[此处]了解详情或选择退出。"
},
"validation": {
"invalidChars": "请使用字母和数字",
@ -233,6 +282,7 @@
"add": "添加",
"back": "返回",
"bulk_actions": "选中 %{smart_count} 项",
"bulk_actions_mobile": "%{smart_count}",
"cancel": "取消",
"clear_input_value": "清除",
"clone": "复制",
@ -256,7 +306,6 @@
"close_menu": "关闭菜单",
"unselect": "未选择",
"skip": "跳过",
"bulk_actions_mobile": "%{smart_count}",
"share": "分享",
"download": "下载"
},
@ -351,29 +400,31 @@
"noPlaylistsAvailable": "没有有效的歌单",
"delete_user_title": "删除用户 %{name}",
"delete_user_content": "您确定要删除该用户及其相关数据(包括歌单和用户配置)吗?",
"remove_missing_title": "移除丢失文件",
"remove_missing_content": "您确定要将选中的丢失文件从数据库中永久移除吗?此操作将删除所有相关信息,包括播放次数和评分。",
"notifications_blocked": "您已在浏览器的设置中屏蔽了此网站的通知",
"notifications_not_available": "此浏览器不支持桌面通知",
"lastfmLinkSuccess": "Last.fm 已关联并启用喜好记录",
"lastfmLinkFailure": "Last.fm 无法关联",
"lastfmUnlinkSuccess": "已成功解除与 Last.fm 的链接,且喜好记录已禁用",
"lastfmUnlinkFailure": "Last.fm 无法取消关联",
"listenBrainzLinkSuccess": "ListenBrainz 已关联并启用喜好记录",
"listenBrainzLinkFailure": "ListenBrainz 无法关联:%{error}",
"listenBrainzUnlinkSuccess": "已成功解除与 ListenBrainz 的链接,且喜好记录已禁用",
"listenBrainzUnlinkFailure": "ListenBrainz 无法取消关联",
"openIn": {
"lastfm": "在 Last.fm 中打开",
"musicbrainz": "在 MusicBrainz 中打开"
},
"lastfmLink": "查看更多…",
"listenBrainzLinkSuccess": "ListenBrainz 已关联并启用喜好记录",
"listenBrainzLinkFailure": "ListenBrainz 无法关联:%{error}",
"listenBrainzUnlinkSuccess": "已成功解除与 ListenBrainz 的链接,且喜好记录已禁用",
"listenBrainzUnlinkFailure": "ListenBrainz 无法取消关联",
"downloadOriginalFormat": "下载原始格式",
"shareOriginalFormat": "分享原始格式",
"shareDialogTitle": "分享 %{resource} '%{name}'",
"shareBatchDialogTitle": "分享 %{smart_count} 个 %{resource}",
"shareCopyToClipboard": "复制到剪切板: Ctrl+C, Enter",
"shareSuccess": "分享链接已复制: %{url}",
"shareFailure": "分享链接复制失败: %{url}",
"downloadDialogTitle": "下载 %{resource} '%{name}' (%{size})",
"shareCopyToClipboard": "复制到剪切板: Ctrl+C, Enter"
"downloadOriginalFormat": "下载原始格式"
},
"menu": {
"library": "曲库",
@ -387,6 +438,7 @@
"language": "语言",
"defaultView": "默认界面",
"desktop_notifications": "桌面通知",
"lastfmNotConfigured": "没有配置 Last.fm 的 API-Key",
"lastfmScrobbling": "启用 Last.fm 的喜好记录",
"listenBrainzScrobbling": "启用 ListenBrainz 的喜好记录",
"replaygain": "回放增益",
@ -399,9 +451,9 @@
}
},
"albumList": "专辑",
"about": "关于",
"playlists": "歌单",
"sharedPlaylists": "共享的歌单"
"sharedPlaylists": "共享的歌单",
"about": "关于"
},
"player": {
"playListsText": "播放列表",
@ -432,7 +484,12 @@
"links": {
"homepage": "主页",
"source": "源代码",
"featureRequests": "功能需求"
"featureRequests": "功能需求",
"lastInsightsCollection": " 最近的分析收集",
"insights": {
"disabled": "禁用",
"waiting": "等待"
}
}
},
"activity": {
@ -451,10 +508,10 @@
"toggle_play": "播放/暂停",
"prev_song": "上一首歌",
"next_song": "下一首歌",
"current_song": "转到当前播放",
"vol_up": "增大音量",
"vol_down": "减小音量",
"toggle_love": "添加/移除星标",
"current_song": "转到当前播放"
"toggle_love": "添加/移除星标"
}
}
}

View File

@ -185,7 +185,6 @@ const AlbumSongs = (props) => {
{...props}
hasBulkActions={true}
showDiscSubtitles={true}
showReleaseDivider={true}
contextAlwaysVisible={!isDesktop}
classes={{ row: classes.row }}
>

View File

@ -231,7 +231,6 @@ export const AlbumContextMenu = (props) =>
sort: { field: 'album', order: 'ASC' },
filter: {
album_id: props.record.id,
release_date: props.releaseDate,
disc_number: props.discNumber,
missing: false,
},

View File

@ -24,7 +24,6 @@ export const PlayButton = ({ record, size, className }) => {
sort: { field: 'album', order: 'ASC' },
filter: {
album_id: record.id,
release_date: record.releaseDate,
disc_number: record.discNumber,
},
})

View File

@ -59,59 +59,12 @@ const useStyles = makeStyles({
},
})
const ReleaseRow = forwardRef(
({ record, onClick, colSpan, contextAlwaysVisible }, ref) => {
const isDesktop = useMediaQuery((theme) => theme.breakpoints.up('md'))
const classes = useStyles({ isDesktop })
const translate = useTranslate()
const handlePlaySubset = (releaseDate) => () => {
onClick(releaseDate)
}
let releaseTitle = []
if (record.releaseDate) {
releaseTitle.push(translate('resources.album.fields.released'))
releaseTitle.push(formatFullDate(record.releaseDate))
if (record.catalogNum && isDesktop) {
releaseTitle.push('· Cat #')
releaseTitle.push(record.catalogNum)
}
}
return (
<TableRow
hover
ref={ref}
onClick={handlePlaySubset(record.releaseDate)}
className={classes.row}
>
<TableCell colSpan={colSpan}>
<Typography variant="h6" className={classes.subtitle}>
{releaseTitle.join(' ')}
</Typography>
</TableCell>
<TableCell>
<AlbumContextMenu
record={{ id: record.albumId }}
releaseDate={record.releaseDate}
showLove={false}
className={classes.contextMenu}
visible={contextAlwaysVisible}
/>
</TableCell>
</TableRow>
)
},
)
ReleaseRow.displayName = 'ReleaseRow'
const DiscSubtitleRow = forwardRef(
({ record, onClick, colSpan, contextAlwaysVisible }, ref) => {
const isDesktop = useMediaQuery((theme) => theme.breakpoints.up('md'))
const classes = useStyles({ isDesktop })
const handlePlaySubset = (releaseDate, discNumber) => () => {
onClick(releaseDate, discNumber)
const handlePlaySubset = (discNumber) => () => {
onClick(discNumber)
}
let subtitle = []
@ -126,7 +79,7 @@ const DiscSubtitleRow = forwardRef(
<TableRow
hover
ref={ref}
onClick={handlePlaySubset(record.releaseDate, record.discNumber)}
onClick={handlePlaySubset(record.discNumber)}
className={classes.row}
>
<TableCell colSpan={colSpan}>
@ -139,7 +92,6 @@ const DiscSubtitleRow = forwardRef(
<AlbumContextMenu
record={{ id: record.albumId }}
discNumber={record.discNumber}
releaseDate={record.releaseDate}
showLove={false}
className={classes.contextMenu}
hideShare={true}
@ -158,7 +110,6 @@ export const SongDatagridRow = ({
record,
children,
firstTracksOfDiscs,
firstTracksOfReleases,
contextAlwaysVisible,
onClickSubset,
className,
@ -176,7 +127,6 @@ export const SongDatagridRow = ({
discs: [
{
albumId: record?.albumId,
releaseDate: record?.releaseDate,
discNumber: record?.discNumber,
},
],
@ -209,15 +159,6 @@ export const SongDatagridRow = ({
const childCount = fields.length
return (
<>
{firstTracksOfReleases.has(record.id) && (
<ReleaseRow
ref={dragDiscRef}
record={record}
onClick={onClickSubset}
contextAlwaysVisible={contextAlwaysVisible}
colSpan={childCount + (rest.expand ? 1 : 0)}
/>
)}
{firstTracksOfDiscs.has(record.id) && (
<DiscSubtitleRow
ref={dragDiscRef}
@ -244,7 +185,6 @@ SongDatagridRow.propTypes = {
record: PropTypes.object,
children: PropTypes.node,
firstTracksOfDiscs: PropTypes.instanceOf(Set),
firstTracksOfReleases: PropTypes.instanceOf(Set),
contextAlwaysVisible: PropTypes.bool,
onClickSubset: PropTypes.func,
}
@ -256,23 +196,16 @@ SongDatagridRow.defaultProps = {
const SongDatagridBody = ({
contextAlwaysVisible,
showDiscSubtitles,
showReleaseDivider,
...rest
}) => {
const dispatch = useDispatch()
const { ids, data } = rest
const playSubset = useCallback(
(releaseDate, discNumber) => {
(discNumber) => {
let idsToPlay = []
if (discNumber !== undefined) {
idsToPlay = ids.filter(
(id) =>
data[id].releaseDate === releaseDate &&
data[id].discNumber === discNumber,
)
} else {
idsToPlay = ids.filter((id) => data[id].releaseDate === releaseDate)
idsToPlay = ids.filter((id) => data[id].discNumber === discNumber)
}
dispatch(
playTracks(
@ -297,8 +230,7 @@ const SongDatagridBody = ({
foundSubtitle = foundSubtitle || data[id].discSubtitle
if (
acc.length === 0 ||
(last && data[id].discNumber !== data[last].discNumber) ||
(last && data[id].releaseDate !== data[last].releaseDate)
(last && data[id].discNumber !== data[last].discNumber)
) {
acc.push(id)
}
@ -311,37 +243,12 @@ const SongDatagridBody = ({
return set
}, [ids, data, showDiscSubtitles])
const firstTracksOfReleases = useMemo(() => {
if (!ids) {
return new Set()
}
const set = new Set(
ids
.filter((i) => data[i])
.reduce((acc, id) => {
const last = acc && acc[acc.length - 1]
if (
acc.length === 0 ||
(last && data[id].releaseDate !== data[last].releaseDate)
) {
acc.push(id)
}
return acc
}, []),
)
if (!showReleaseDivider || set.size < 2) {
set.clear()
}
return set
}, [ids, data, showReleaseDivider])
return (
<PureDatagridBody
{...rest}
row={
<SongDatagridRow
firstTracksOfDiscs={firstTracksOfDiscs}
firstTracksOfReleases={firstTracksOfReleases}
contextAlwaysVisible={contextAlwaysVisible}
onClickSubset={playSubset}
/>
@ -353,7 +260,6 @@ const SongDatagridBody = ({
export const SongDatagrid = ({
contextAlwaysVisible,
showDiscSubtitles,
showReleaseDivider,
...rest
}) => {
const classes = useStyles()
@ -366,7 +272,6 @@ export const SongDatagrid = ({
<SongDatagridBody
contextAlwaysVisible={contextAlwaysVisible}
showDiscSubtitles={showDiscSubtitles}
showReleaseDivider={showReleaseDivider}
/>
}
/>
@ -376,6 +281,5 @@ export const SongDatagrid = ({
SongDatagrid.propTypes = {
contextAlwaysVisible: PropTypes.bool,
showDiscSubtitles: PropTypes.bool,
showReleaseDivider: PropTypes.bool,
classes: PropTypes.object,
}