add some shiz (#1313)
* Update ru_RU.json keeping russian lang actual * ok * Add gradient to lyric-footer * *Commit en español Ñ (#1304) * i hate my life (#1307) * world is now a better place * meltdown avoided * meltdown avoided * stylize new listen now childs * full scale artwork, finally * dynamic width for search categories * hd all album work * Update afterPack.js * force hq quality * oops * attempt to fix * misc cleanup * why what * what was i thinking * fix duplicated text in listen now childs * Paginate/infinite scroll for albums, playlists (#1234) * Infinite scroll, pagination to album, playlists * move pagination below tracks * Make page size configurable * remove renderer * Mitigate songs / album slow app issue. * add ratings, library change to web remote (#1285) * Add compact artist header option (#1308) * Support compact artist header (optional) * Add required term Co-authored-by: h0ckerman <35598335+h0ckerman@users.noreply.github.com> Co-authored-by: vapormusic <vietanhfat@gmail.com> Co-authored-by: Monochromish <chillygamer7@gmail.com> Co-authored-by: Gabriel Davila <56521591+mefsaal@users.noreply.github.com> Co-authored-by: Core <64542347+coredev-uk@users.noreply.github.com> Co-authored-by: Maikiwi <stella@mai.kiwi> Co-authored-by: yazninja <yazlesean@gmail.com> Co-authored-by: booploops <49113086+booploops@users.noreply.github.com> Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com> Co-authored-by: Pedro Galhardo <pgalhardo@icloud.com>
This commit is contained in:
parent
2fe4b65747
commit
c0cea76913
30 changed files with 1230 additions and 366 deletions
|
@ -121,9 +121,9 @@
|
|||
}
|
||||
],
|
||||
"build": {
|
||||
"electronVersion": "18.3.5",
|
||||
"electronVersion": "19.0.8",
|
||||
"electronDownload": {
|
||||
"version": "18.3.5+wvcus",
|
||||
"version": "20.0.0-beta.11+wvcus",
|
||||
"mirror": "https://github.com/castlabs/electron-releases/releases/download/v"
|
||||
},
|
||||
"appId": "cider",
|
||||
|
|
|
@ -14,7 +14,7 @@ exports.default = function(context) {
|
|||
// console.log('Castlabs-evs update complete')
|
||||
|
||||
// xcode 13
|
||||
if (fs.existsSync('dist/mac-universal--x64') && fs.existsSync('dist/mac-universal--arm64'))
|
||||
if (fs.existsSync('dist/mac-universal--x64') && fs.existsSync('dist/mac-universal--arm64') && fs.existsSync('dist/mac-universal--x64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib/keyedobjects-101300.nib'))
|
||||
execSync("cp 'dist/mac-universal--x64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib/keyedobjects-101300.nib' 'dist/mac-universal--arm64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib/keyedobjects-101300.nib'",{stdio: 'inherit'})
|
||||
|
||||
// console.log('VMP signing start')
|
||||
|
|
|
@ -521,3 +521,7 @@ Update 03/07/2022 20:00 UTC
|
|||
|
||||
* `term.plugins`: Added to `en_US`
|
||||
* `settings.header.visual.styles`: Added to `en_US`
|
||||
|
||||
Update 25/07/2022 00:22 UTC
|
||||
|
||||
* `settings.option.visual.compactArtistHeader`: Added to `en_US`
|
||||
|
|
|
@ -360,6 +360,8 @@
|
|||
"settings.prompt.general.keybindings.update.success": "Keybind updated successfully. Press OK to relaunch Cider",
|
||||
"settings.option.general.themeUpdateNotification": "Automatically check for theme updates",
|
||||
"settings.option.general.showLovedTracksInline": "Show loved tracks inline",
|
||||
"settings.option.general.pagination": "Items to show per page",
|
||||
"settings.options.general.pagination.description": "This determines how many songs/albums to show initially for infinite scrolling, or how many songs/albums to show for a single page",
|
||||
"settings.description.search": "Search",
|
||||
"settings.description.albums": "Library Albums",
|
||||
"settings.description.artists": "Library Artists",
|
||||
|
@ -563,6 +565,7 @@
|
|||
"settings.option.visual.customAccentColor": "Custom Accent Color",
|
||||
"settings.option.visual.accentColor": "Accent Color",
|
||||
"settings.option.visual.purplePodcastPlaybackBar": "Purple Playback Bar for Podcasts",
|
||||
"settings.option.visual.compactArtistHeader": "Compact Artist Header",
|
||||
"settings.option.visual.windowColor": "Window Tint Color",
|
||||
"settings.header.visual.windowBackgroundStyle.color": "Color Tint",
|
||||
"settings.header.advanced": "Advanced",
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
"term.connecting": "Conectando",
|
||||
"term.disconnect": "Desconectar",
|
||||
"term.authed": "Autenticado",
|
||||
"term.confirm": "¿Confirma?",
|
||||
"term.confirm": "¿ Confirma ?",
|
||||
"term.more": "Más",
|
||||
"term.less": "Menos",
|
||||
"term.showMore": "Mostrar Más",
|
||||
|
@ -160,7 +160,7 @@
|
|||
},
|
||||
"term.videos": "Videos",
|
||||
"term.menu": "Menú",
|
||||
"term.themeManaged": "Administrado por un tema",
|
||||
"term.themeManaged": "Administrado por un Tema",
|
||||
"term.check": "Comprobar",
|
||||
"term.aboutArtist": "Acerca de {{artistName}}",
|
||||
"term.topResult": "Mejor Resultado",
|
||||
|
@ -188,7 +188,7 @@
|
|||
"term.plugin": "Plugin",
|
||||
"term.pluginMenu": "Plugins Menú",
|
||||
"term.pluginMenu.none": "Sin Plugins Interactivos",
|
||||
"term.replay": "Repetir",
|
||||
"term.replay": "Replay",
|
||||
"term.uniqueAlbums": "Álbumes Únicos",
|
||||
"term.uniqueArtists": "Artistas Únicos",
|
||||
"term.uniqueSongs": "Canciones Únicas",
|
||||
|
@ -221,7 +221,7 @@
|
|||
"home.recentlyPlayed": "Escuchado Recientemente",
|
||||
"home.recentlyAdded": "Agregado Recientemente",
|
||||
"home.artistsFeed": "Tu Feed de artistas",
|
||||
"home.artistsFeed.noArtist": "Sigue a algunos Artistas para ver sus últimos Lanzamientos",
|
||||
"home.artistsFeed.noArtist": "Sigue a algunos Artistas para ver sus Últimos Lanzamientos",
|
||||
"home.madeForYou": "Hecho para Ti",
|
||||
"home.friendsListeningTo": "Amigos Escuchando",
|
||||
"home.followedArtists": "Artistas Seguidos",
|
||||
|
@ -252,12 +252,12 @@
|
|||
"action.addToLibrary.error": "Error al agregar a la Biblioteca",
|
||||
"action.removeFromLibrary": "Eliminar de la Biblioteca",
|
||||
"action.removeFromLibrary.success": "Eliminado de la Biblioteca",
|
||||
"action.addToQueue": "Añadir a la cola",
|
||||
"action.addToQueue.success": "Agregado a la cola",
|
||||
"action.addToQueue.error": "Error al agregar a la cola",
|
||||
"action.removeFromQueue": "Eliminar de la cola",
|
||||
"action.removeFromQueue.success": "Eliminado de la cola",
|
||||
"action.removeFromQueue.error": "Error al eliminar de la cola",
|
||||
"action.addToQueue": "Agregar a la Cola",
|
||||
"action.addToQueue.success": "Agregado a la Cola",
|
||||
"action.addToQueue.error": "Error al Agregar a la Cola",
|
||||
"action.removeFromQueue": "Eliminar de la Cola",
|
||||
"action.removeFromQueue.success": "Eliminado de la Cola",
|
||||
"action.removeFromQueue.error": "Error al Eliminar de la Cola",
|
||||
"action.createPlaylist": "Crear una nueva lista de reproducción",
|
||||
"action.addToPlaylist": "Agregar a lista de reproducción",
|
||||
"action.removeFromPlaylist": "Eliminar de la lista de reproducción",
|
||||
|
@ -268,14 +268,14 @@
|
|||
"action.unfollow": "Dejar de Seguir",
|
||||
"action.unfollow.success": "Dejando de Seguir",
|
||||
"action.unfollow.error": "Error al dejar de Seguir",
|
||||
"action.playNext": "Reproducir siguiente",
|
||||
"action.playLater": "Reproducir más tarde",
|
||||
"action.playNext": "Reproducir Siguiente",
|
||||
"action.playLater": "Reproducir Más Tarde",
|
||||
"action.startRadio": "Iniciar Radio",
|
||||
"action.goToArtist": "Ir al artista",
|
||||
"action.goToAlbum": "Ir al álbum",
|
||||
"action.showInPlaylist": "Mostrar en lista de reproducción",
|
||||
"action.goToArtist": "Ir al Artista",
|
||||
"action.goToAlbum": "Ir al Álbum",
|
||||
"action.showInPlaylist": "Mostrar en Lista de Reproducción",
|
||||
"action.showInAppleMusic": "Mostrar en Apple Music",
|
||||
"action.moveToTop": "Mover fuera de la carpeta",
|
||||
"action.moveToTop": "Mover fuera de la Carpeta",
|
||||
"action.share": "Compartir",
|
||||
"action.rename": "Renombrar",
|
||||
"action.love": "Me Gusta",
|
||||
|
@ -283,9 +283,9 @@
|
|||
"action.dislike": "Recomendar menos este contenido",
|
||||
"action.undoDislike": "Recomendar mas este contenido",
|
||||
"action.showWebRemoteQR": "Web Remoto",
|
||||
"action.playTracksNext": "Reproducir ${app.selectedMediaItems.length} Pistas Siguientes",
|
||||
"action.playTracksLater": "Reproducir ${app.selectedMediaItems.length} Pistas mas tarde",
|
||||
"action.removeTracks": "Eliminar ${self.selectedItems.length} Pistas de la Cola",
|
||||
"action.playTracksNext": "Reproducir ${app.selectedMediaItems.length} Canciones Siguientes",
|
||||
"action.playTracksLater": "Reproducir ${app.selectedMediaItems.length} Canciones mas tarde",
|
||||
"action.removeTracks": "Eliminar ${self.selectedItems.length} Canciones de la Cola",
|
||||
"action.import": "Importar",
|
||||
"action.export": "Exportar",
|
||||
"action.showAlbum": "Mostrar Álbum Completo",
|
||||
|
@ -299,7 +299,7 @@
|
|||
"action.deletepreset": "Borrar Preset",
|
||||
"action.open": "Abrir",
|
||||
"action.close": "Cerrar",
|
||||
"action.relaunch.confirm": "¿Quieres reiniciar Cider?",
|
||||
"action.relaunch.confirm": "¿ Quieres reiniciar Cider ?",
|
||||
"action.cast.chromecast": "Chromecast",
|
||||
"action.cast.todevices": "Transmitir a los Dispositivos",
|
||||
"action.cast.stop": "Dejar de transmitir a todos los Dispositivos",
|
||||
|
@ -308,7 +308,7 @@
|
|||
"action.cast.scan": "Escanear",
|
||||
"action.cast.scanning": "Escaneando...",
|
||||
"action.createNew": "Crear Nuevo...",
|
||||
"action.openArtworkInBrowser": "Abrir Ilustración en el navegador",
|
||||
"action.openArtworkInBrowser": "Abrir Ilustración en el Navegador",
|
||||
"action.scrollToTop": "Ir al inicio",
|
||||
"menubar.options.view": "Ver",
|
||||
"menubar.options.reload": "Recargar",
|
||||
|
@ -396,17 +396,17 @@
|
|||
"settings.header.audio.quality.standard.description": "64 kbps",
|
||||
"settings.option.audio.seamlessTransition": "Transición de audio sin interrupciones",
|
||||
"settings.option.audio.enableAdvancedFunctionality": "Habilitar funcionalidad avanzada",
|
||||
"settings.option.audio.enableAdvancedFunctionality.description": "Habilitar la funcionalidad de AudioContext permitirá funciones de audio extendidas como normalización de audio, ecualizadores y visualizadores; sin embargo, en algunos sistemas esto puede causar interrupciones en las pistas de audio.",
|
||||
"settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cider cree que su PC no puede manejar estas funciones. ¿Estás seguro de que quieres continuar?",
|
||||
"settings.option.audio.enableAdvancedFunctionality.description": "Habilitar la funcionalidad de AudioContext permitirá funciones de audio extendidas como Normalización de Audio, Ecualizadores y Visualizadores. Sin embargo, en algunos sistemas esto puede causar interrupciones en las pistas de audio.",
|
||||
"settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cider cree que su PC no puede manejar estas funciones. ¿ Estás seguro de que quieres continuar ?",
|
||||
"settings.option.audio.audioLab": "Cider Audio Lab",
|
||||
"settings.option.audio.audioLab.description": "Una variedad de efectos de audio desarrollados internamente para Cider.",
|
||||
"settings.option.audio.audioLab.description": "Una variedad de efectos de Audio desarrollados internamente para Cider.",
|
||||
"settings.option.audio.audioLab.subheader": "Designed by Cider Acoustic Technologies in California",
|
||||
"settings.warn.audioLab.withoutAF": "Se requiere AudioContext (funcionalidad avanzada) para habilitar Laboratorio de audio de Cider.",
|
||||
"settings.warn.enableAdvancedFunctionality": "AudioContext (funcionalidad avanzada) es necesaria para habilitar esta característica.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Calidez analógica",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Simula la calidez analógica inspirada en el Korg Nutube 6P1",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Intensidad de calidez analógica",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Cambia la intensidad del procesamiento del módulo de Calidez analógica",
|
||||
"settings.warn.audioLab.withoutAF": "Se requiere AudioContext (funcionalidad avanzada) para habilitar Cider Audio Lab.",
|
||||
"settings.warn.enableAdvancedFunctionality": "AudioContext (funcionalidad avanzada) es necesaria para Habilitar esta Característica.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Calidez Analógica",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Simula la Calidez Analógica inspirada en el Korg Nutube 6P1",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Intensidad de Calidez Analógica",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Cambia la intensidad del procesamiento del módulo de Calidez Analógica",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Suave",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Calido",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer": "Cider Atmosphere Realizer™️",
|
||||
|
@ -470,7 +470,7 @@
|
|||
"settings.header.visual.animatedArtworkQuality.high": "Alto",
|
||||
"settings.header.visual.animatedArtworkQuality.veryHigh": "Muy alto",
|
||||
"settings.header.visual.animatedArtworkQuality.extreme": "Extremo",
|
||||
"settings.option.visual.animatedWindowBackground": "Fondo de ventana animado",
|
||||
"settings.option.visual.animatedWindowBackground": "Fondo de Ventana Animado",
|
||||
"settings.option.visual.hardwareAcceleration": "Aceleración de Hardware",
|
||||
"settings.option.visual.hardwareAcceleration.description": "Requiere reinicio",
|
||||
"settings.header.visual.hardwareAcceleration.default": "Por defecto",
|
||||
|
@ -481,9 +481,9 @@
|
|||
"settings.option.visual.theme.github.openfolder": "Abrir Carpeta de Temas",
|
||||
"settings.option.visual.theme.github.explore": "Explorar Temas de GitHub",
|
||||
"settings.header.visual.theme.github.page": "Temas de GitHub",
|
||||
"settings.option.visual.theme.github.install.confirm": "¿Está seguro de que desea instalar {{ repo }}?",
|
||||
"settings.option.visual.theme.github.install.confirm": "¿ Está seguro de que desea instalar {{ repo }} ?",
|
||||
"settings.prompt.visual.theme.github.URL": "Introduce la URL del tema que quieres instalar",
|
||||
"settings.prompt.visual.theme.uninstallTheme": "¿Estas seguro que lo quieres desinstalar {{ theme }}?",
|
||||
"settings.prompt.visual.theme.uninstallTheme": "¿ Estas seguro que lo quieres desinstalar {{ theme }} ?",
|
||||
"settings.option.visual.theme.checkForUpdates": "Buscar actualizaciones",
|
||||
"settings.header.visual.styles": "Estilos",
|
||||
"settings.option.visual.theme.manageStyles": "Gestionar Estilos",
|
||||
|
@ -608,7 +608,7 @@
|
|||
"oobe.previous": "Anterior",
|
||||
"oobe.done": "Hecho",
|
||||
"oobe.amupsell.title": "Antes de Empezar",
|
||||
"oobe.amupsell.text": "Cider Requiere una Suscripción paga Activa a Apple Music\nCider NO funcionará con Apple Music Voice Plan ni con algunas suscripciones de prueba promocionales. Si ya tiene una suscripción calificada de Apple Music, haga clic en Siguiente para continuar.",
|
||||
"oobe.amupsell.text": "Cider Requiere una Suscripción paga Activa a Apple Music\nCider NO funcionará con Apple Music Voice Plan ni con algunas suscripciones de prueba promocionales. Si ya tiene una suscripción calificada de Apple Music, haga click en Siguiente para continuar.",
|
||||
"oobe.amupsell.subscribeBtn": "Suscríbete a Apple Music",
|
||||
"oobe.amupsell.explainBtn": "Explique",
|
||||
"oobe.amupsell.subscribeUrl": "https://apple.co/3MdqJVQ",
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
"notification.updatingLibrarySongs": "Actualizando Canciones de la Biblioteca...",
|
||||
"notification.updatingLibraryAlbums": "Actualizando Álbumes de la Biblioteca...",
|
||||
"notification.updatingLibraryArtists": "Actualizando Artistas de la Biblioteca...",
|
||||
"term.variables": "Variables",
|
||||
"term.appleInc": "Apple Inc.",
|
||||
"term.appleMusic": "Apple Music",
|
||||
"term.applePodcasts": "Apple Podcasts",
|
||||
|
@ -20,37 +21,54 @@
|
|||
"term.accountSettings": "Configuración de la Cuenta",
|
||||
"term.logout": "Cerrar Sesión",
|
||||
"term.login": "Iniciar Sesión",
|
||||
"term.cast": "Transmitir",
|
||||
"term.quickNav": "Navegación rápida",
|
||||
"term.about": "Acerca de",
|
||||
"term.privateSession": "Sesión Privada",
|
||||
"term.disablePrivateSession": "deshabilitar Sesión Privada",
|
||||
"term.disablePrivateSession": "Deshabilitar Sesión Privada",
|
||||
"term.queue": "Cola",
|
||||
"term.autoplay": "Reproducción Automática",
|
||||
"term.lyrics": "Letras",
|
||||
"term.miniplayer": "Mini Reproductor",
|
||||
"term.miniplayer": "Mini-Reproductor",
|
||||
"term.history": "Historial",
|
||||
"term.search": "Buscar",
|
||||
"term.scroll": "Modo de Desplazamiento",
|
||||
"term.scroll.infinite": "Infinito",
|
||||
"term.scroll.paged": "${songsPerPage} por Página",
|
||||
"term.live": "LIVE",
|
||||
"term.showSearch": "Mostrar Barra de Búsqueda",
|
||||
"term.hideSearch": "Ocultar Barra de Búsqueda",
|
||||
"term.library": "Biblioteca",
|
||||
"term.listenNow": "Escuchar Ahora",
|
||||
"term.browse": "Explorar",
|
||||
"term.radio": "Radio",
|
||||
"term.recentlyAdded": "Agregadas Recientemente",
|
||||
"term.recentlyAdded": "Agregado Recientemente",
|
||||
"term.songs": "Canciones",
|
||||
"term.albums": "Álbumes",
|
||||
"term.artists": "Artistas",
|
||||
"term.podcasts": "Podcasts",
|
||||
"term.playlists": "Listas de Reproducción",
|
||||
"term.charts": "Tarjetas",
|
||||
"term.playlist": "Lista de Reproducción",
|
||||
"term.newPlaylist": "Nueva Lista de Reproducción",
|
||||
"term.newPlaylistFolder": "Nueva Carpeta de Listas de Reproducción",
|
||||
"term.createNewPlaylist": "Crear Nueva Lista de Reproducción",
|
||||
"term.createNewPlaylistFolder": "Crear Nueva Carpeta de Listas de Reproducción",
|
||||
"term.deletePlaylist": "Estas Seguro de Querer Eliminar esta Lista de Reproducción",
|
||||
"term.deletePlaylist": "¿Estas Seguro de Querer Eliminar esta Lista de Reproducción?",
|
||||
"term.navigateBack": "Navegar Hacia Atrás",
|
||||
"term.navigateForward": "Navegar Hacia Adelante",
|
||||
"term.play": "Reproducir",
|
||||
"term.playpause": "Reproducir/Pausar",
|
||||
"term.pause": "Pausar",
|
||||
"term.stop": "Detener",
|
||||
"term.previous": "Anterior",
|
||||
"term.next": "Siguiente",
|
||||
"term.shuffle": "Aleatorio",
|
||||
"term.enableShuffle": "Habilitar Reproducción Aleatoria",
|
||||
"term.disableShuffle": "Desactivar Reproducción Aleatoria",
|
||||
"term.repeat": "Repetir",
|
||||
"term.enableRepeatOne": "Habilitar Repetir Uno",
|
||||
"term.disableRepeatOne": "Deshabilitar Repetir Uno",
|
||||
"term.disableRepeat": "Deshabilitar Repetir",
|
||||
"term.volume": "Volumen",
|
||||
"term.mute": "Silenciar",
|
||||
"term.unmute": "De-silenciar",
|
||||
|
@ -72,6 +90,7 @@
|
|||
"term.viewAs": "Ver como",
|
||||
"term.viewAs.coverArt": "Portada",
|
||||
"term.viewAs.list": "Lista",
|
||||
"term.dynamic": "Dinámico",
|
||||
"term.size": "Tamaño",
|
||||
"term.size.normal": "Normal",
|
||||
"term.size.compact": "Compacto",
|
||||
|
@ -88,7 +107,7 @@
|
|||
"term.less": "Menos",
|
||||
"term.showMore": "Mostrar Más",
|
||||
"term.showLess": "Mostrar Menos",
|
||||
"term.topSongs": "Canciones Principales",
|
||||
"term.topSongs": "Mejores canciones",
|
||||
"term.latestReleases": "Últimos Lanzamientos",
|
||||
"term.time.added": "Agregado",
|
||||
"term.time.released": "Publicado",
|
||||
|
@ -113,12 +132,14 @@
|
|||
"one": "Segundo",
|
||||
"other": "Segundos"
|
||||
},
|
||||
"term.fullscreenView": "Vista de Pantalla Completa",
|
||||
"term.fullscreenView": "Pantalla Completa",
|
||||
"term.defaultView": "Vista Predeterminada",
|
||||
"term.audioSettings": "Configuración de Audio",
|
||||
"term.audioControls": "Configuración volumen",
|
||||
"term.clearAll": "Borrar todo",
|
||||
"term.recentStations": "Estaciones Recientes",
|
||||
"term.personalStations": "Estaciones Personales",
|
||||
"term.amLive": "Apple Music Live",
|
||||
"term.language": "Idioma",
|
||||
"term.funLanguages": "Idiomas Fun (Parodias)",
|
||||
"term.noLyrics": "Cargando... / Letras no encontradas./ Instrumental.",
|
||||
|
@ -130,7 +151,7 @@
|
|||
"term.socialTeam": "Equipo Social",
|
||||
"term.socials": "Redes Sociales",
|
||||
"term.contributors": "Contribuidores",
|
||||
"term.equalizer": "Equalizador",
|
||||
"term.equalizer": "Ecualizador",
|
||||
"term.reset": "Reiniciar",
|
||||
"term.tracks": "Pistas",
|
||||
"term.track": {
|
||||
|
@ -139,124 +160,176 @@
|
|||
},
|
||||
"term.videos": "Videos",
|
||||
"term.menu": "Menú",
|
||||
"term.themeManaged": "Administrado por un Tema",
|
||||
"term.check": "Comprobar",
|
||||
"term.aboutArtist": "Acerca de {{artistName}}",
|
||||
"term.topResult": "Mejor resultado",
|
||||
"term.sharedPlaylists": "Listas de reproducción compartidas",
|
||||
"term.topResult": "Mejor Resultado",
|
||||
"term.sharedPlaylists": "Listas de Reproducción Compartidas",
|
||||
"term.people": "Personas",
|
||||
"term.newpreset.name": "Nuevo nombre de preajuste de ecualizador",
|
||||
"term.addedpreset": "Preajuste agregado",
|
||||
"term.deletepreset.warn": "¿Estas seguro de que quieres eliminar este preajuste?",
|
||||
"term.deletedpreset": "Preajuste eliminado",
|
||||
"term.defaultPresets": "Preajustes predeterminados",
|
||||
"term.userPresets": "Preajustes de usuario",
|
||||
"term.newpreset.name": "Nuevo nombre de Preset de Ecualizador",
|
||||
"term.addedpreset": "Preset Agregado",
|
||||
"term.deletepreset.warn": "¿Estas seguro de que quieres eliminar este Preset?",
|
||||
"term.deletedpreset": "Preset Eliminado",
|
||||
"term.defaultPresets": "Preset Predeterminados",
|
||||
"term.userPresets": "Preset de Usuario",
|
||||
"term.requestError": "Hubo un problema con la solicitud.",
|
||||
"term.song.link.generate": "Obtener URL de la Canción compartida...",
|
||||
"term.musicVideos": "Videos de Música",
|
||||
"term.musicVideos": "Videos Musicales",
|
||||
"term.stations": "Estaciones",
|
||||
"term.curators": "Curadores",
|
||||
"term.appleCurators": "Curadores de Apple",
|
||||
"term.radioShows": "Programas de Radio",
|
||||
"term.recordLabels": "Etiquetas discográficas",
|
||||
"term.recordLabels": "Etiquetas Discográficas",
|
||||
"term.videoExtras": "Extras de Video",
|
||||
"term.top": "Top",
|
||||
"term.version": "Version",
|
||||
"term.noVideos": "No hay videos disponibles.",
|
||||
"term.plugin": "Plug-in",
|
||||
"term.pluginMenu": "Plug-in Menu",
|
||||
"term.pluginMenu.none": "Sin plugins interactivos",
|
||||
"term.replay": "Repetir",
|
||||
"term.uniqueAlbums": "Álbumes únicos",
|
||||
"term.uniqueArtists": "Artistas únicos",
|
||||
"term.uniqueSongs": "Canciones únicas",
|
||||
"term.topArtists": "Artistas Principales",
|
||||
"term.listenedTo": "Escuchado:",
|
||||
"term.version": "Versión",
|
||||
"term.noVideos": "No hay Videos Disponibles.",
|
||||
"term.plugins": "Plugins",
|
||||
"term.plugin": "Plugin",
|
||||
"term.pluginMenu": "Plugins Menú",
|
||||
"term.pluginMenu.none": "Sin Plugins Interactivos",
|
||||
"term.replay": "Replay",
|
||||
"term.uniqueAlbums": "Álbumes Únicos",
|
||||
"term.uniqueArtists": "Artistas Únicos",
|
||||
"term.uniqueSongs": "Canciones Únicas",
|
||||
"term.topArtists": "Mejores Artistas",
|
||||
"term.listenedTo": "Escuchando a:",
|
||||
"term.times": "Veces",
|
||||
"term.topAlbums": "Mejores álbumes",
|
||||
"term.topAlbums": "Mejores Álbumes",
|
||||
"term.plays": "Reproducciones",
|
||||
"term.topGenres": "Mejores Géneros",
|
||||
"term.confirmLogout": "¿Estás seguro de que quieres cerrar sesión?",
|
||||
"term.creditDesignedBy": "Diseñado por ${authorUsername}",
|
||||
"term.discNumber": "Disco ${discNumber}",
|
||||
"home.title": "Hogar",
|
||||
"term.reload" : "¿ Recargar Cider ?",
|
||||
"term.toggleprivate" : "Cambiar a Sesión Privada",
|
||||
"term.webremote" : "Web Remoto",
|
||||
"term.cast" : "Transmitir",
|
||||
"term.cast2" : "Transmitir a los Dispositivos",
|
||||
"term.quit" : "Salir",
|
||||
"term.zoomin" : "Acercar",
|
||||
"term.zoomout" : "Alejar",
|
||||
"term.zoomreset" : "Restablecer",
|
||||
"term.fullscreen" : "Pantalla Completa",
|
||||
"term.nowPlaying": "Reproduciendo Ahora",
|
||||
"home.syncFavorites": "Sincronizar Favoritos",
|
||||
"home.syncFavorites.gettingArtists": "Consiguiendo Artistas Favoritos...",
|
||||
"action.favorite": "Favorito",
|
||||
"action.removeFavorite": "Eliminar Favorito",
|
||||
"action.refresh": "Actualizar",
|
||||
"home.title": "Inicio",
|
||||
"home.recentlyPlayed": "Escuchado Recientemente",
|
||||
"home.recentlyAdded": "Agregado Recientemente",
|
||||
"home.artistsFeed": "Tu feed de artistas",
|
||||
"home.artistsFeed.noArtist": "Sigue a algunos artistas para ver sus últimos lanzamientos",
|
||||
"home.madeForYou": "Hecho para ti",
|
||||
"home.friendsListeningTo": "Amigos escuchando",
|
||||
"home.followedArtists": "Artistas seguidos",
|
||||
"error.appleMusicSubRequired": "Apple Music requiere una suscripción.",
|
||||
"home.artistsFeed": "Tu Feed de artistas",
|
||||
"home.artistsFeed.noArtist": "Sigue a algunos Artistas para ver sus Últimos Lanzamientos",
|
||||
"home.madeForYou": "Hecho para Ti",
|
||||
"home.friendsListeningTo": "Amigos Escuchando",
|
||||
"home.followedArtists": "Artistas Seguidos",
|
||||
"error.appleMusicSubRequired": "Apple Music Requiere una Suscripción.",
|
||||
"error.connectionError": "Hubo un problema al conectarse a Apple Music.",
|
||||
"error.noResults": "No hay resultados.",
|
||||
"error.noResults.description": "Prueba una nueva búsqueda",
|
||||
"error.noResults": "No hay Resultados.",
|
||||
"error.noResults.description": "Prueba una Nueva Búsqueda",
|
||||
"podcast.followOnCider": "Sigue en Cider",
|
||||
"podcast.followedOnCider": "Siguiendo en Cider",
|
||||
"podcast.subscribeOnItunes": "Suscríbete en iTunes",
|
||||
"podcast.subscribedOnItunes": "Suscrito en iTunes",
|
||||
"podcast.itunesStore": "Tienda de iTunes",
|
||||
"podcast.episodes": "Episodios",
|
||||
"podcast.playEpisode": "Reproducir episodio",
|
||||
"podcast.website": "Sitio web de podcasts",
|
||||
"action.addToLibrary": "Agregar a la biblioteca",
|
||||
"action.addToLibrary.success": "Agregado a la biblioteca",
|
||||
"action.addToLibrary.error": "Error al agregar a la biblioteca",
|
||||
"action.removeFromLibrary": "Eliminar de la biblioteca",
|
||||
"action.removeFromLibrary.success": "Eliminado de la biblioteca",
|
||||
"action.addToQueue": "Añadir a la cola",
|
||||
"action.addToQueue.success": "Agregado a la cola",
|
||||
"action.addToQueue.error": "Error al agregar a la cola",
|
||||
"action.removeFromQueue": "Eliminar de la cola",
|
||||
"action.removeFromQueue.success": "Eliminado de la cola",
|
||||
"action.removeFromQueue.error": "Error al eliminar de la cola",
|
||||
"podcast.playEpisode": "Reproducir Episodio",
|
||||
"podcast.website": "Sitio web de Podcasts",
|
||||
"action.hideLibrary": "Ocultar biblioteca",
|
||||
"action.showLibrary": "Mostrar biblioteca",
|
||||
"action.cut": "Cortar",
|
||||
"action.paste": "Pegar",
|
||||
"action.selectAll": "Seleccionar Todo",
|
||||
"action.delete": "Borrar",
|
||||
"action.edit": "Editar",
|
||||
"action.done": "Hecho",
|
||||
"action.submit": "Enviar",
|
||||
"action.editTracklist": "Editar Lista de Canciones",
|
||||
"action.addToLibrary": "Agregar a la Biblioteca",
|
||||
"action.addToLibrary.success": "Agregado a la Biblioteca",
|
||||
"action.addToLibrary.error": "Error al agregar a la Biblioteca",
|
||||
"action.removeFromLibrary": "Eliminar de la Biblioteca",
|
||||
"action.removeFromLibrary.success": "Eliminado de la Biblioteca",
|
||||
"action.addToQueue": "Agregar a la Cola",
|
||||
"action.addToQueue.success": "Agregado a la Cola",
|
||||
"action.addToQueue.error": "Error al Agregar a la Cola",
|
||||
"action.removeFromQueue": "Eliminar de la Cola",
|
||||
"action.removeFromQueue.success": "Eliminado de la Cola",
|
||||
"action.removeFromQueue.error": "Error al Eliminar de la Cola",
|
||||
"action.createPlaylist": "Crear una nueva lista de reproducción",
|
||||
"action.addToPlaylist": "Agregar a lista de reproducción",
|
||||
"action.removeFromPlaylist": "Eliminar de la lista de reproducción",
|
||||
"action.addToFavorites": "Agregar a favoritos",
|
||||
"action.addToFavorites": "Agregar a Favoritos",
|
||||
"action.follow": "Seguir",
|
||||
"action.follow.success": "Siguiendo",
|
||||
"action.follow.error": "Error al seguir",
|
||||
"action.unfollow": "Dejar de seguir",
|
||||
"action.unfollow.success": "Dejando de seguir",
|
||||
"action.unfollow.error": "Error al dejar de seguir",
|
||||
"action.playNext": "Reproducir siguiente",
|
||||
"action.playLater": "Reproducir más tarde",
|
||||
"action.follow.error": "Error al Seguir",
|
||||
"action.unfollow": "Dejar de Seguir",
|
||||
"action.unfollow.success": "Dejando de Seguir",
|
||||
"action.unfollow.error": "Error al dejar de Seguir",
|
||||
"action.playNext": "Reproducir Siguiente",
|
||||
"action.playLater": "Reproducir Más Tarde",
|
||||
"action.startRadio": "Iniciar Radio",
|
||||
"action.goToArtist": "Ir al artista",
|
||||
"action.goToAlbum": "Ir al álbum",
|
||||
"action.showInPlaylist": "Mostrar en lista de reproducción",
|
||||
"action.goToArtist": "Ir al Artista",
|
||||
"action.goToAlbum": "Ir al Álbum",
|
||||
"action.showInPlaylist": "Mostrar en Lista de Reproducción",
|
||||
"action.showInAppleMusic": "Mostrar en Apple Music",
|
||||
"action.moveToTop": "Mover fuera de la carpeta",
|
||||
"action.moveToTop": "Mover fuera de la Carpeta",
|
||||
"action.share": "Compartir",
|
||||
"action.rename": "Renombrar",
|
||||
"action.love": "Love",
|
||||
"action.unlove": "Unlove",
|
||||
"action.dislike": "Dislike",
|
||||
"action.undoDislike": "Undo dislike",
|
||||
"action.showWebRemoteQR": "Web Remota",
|
||||
"action.playTracksNext": "Reproducir ${app.selectedMediaItems.length} pistas siguientes",
|
||||
"action.playTracksLater": "Reproducir ${app.selectedMediaItems.length} pistas mas tarde",
|
||||
"action.removeTracks": "Eliminar ${self.selectedItems.length} pistas de la cola",
|
||||
"action.love": "Me Gusta",
|
||||
"action.unlove": "No Me Gusta",
|
||||
"action.dislike": "Recomendar menos este contenido",
|
||||
"action.undoDislike": "Recomendar mas este contenido",
|
||||
"action.showWebRemoteQR": "Web Remoto",
|
||||
"action.playTracksNext": "Reproducir ${app.selectedMediaItems.length} Pistas Siguientes",
|
||||
"action.playTracksLater": "Reproducir ${app.selectedMediaItems.length} Pistas mas tarde",
|
||||
"action.removeTracks": "Eliminar ${self.selectedItems.length} Pistas de la Cola",
|
||||
"action.import": "Importar",
|
||||
"action.export": "Exportar",
|
||||
"action.showAlbum": "Mostrar Album Completo",
|
||||
"action.showAlbum": "Mostrar Álbum Completo",
|
||||
"action.tray.minimize": "Minimizar a la bandeja",
|
||||
"action.tray.quit": "Abandonar",
|
||||
"action.tray.show": "Mostrar Cider",
|
||||
"action.tray.listento": "Escuchando a:",
|
||||
"action.update": "Actualizar",
|
||||
"action.install": "Instalar",
|
||||
"action.copy": "Copiar",
|
||||
"action.newpreset": "Nuevo preset...",
|
||||
"action.newpreset": "Nuevo Preset...",
|
||||
"action.deletepreset": "Borrar Preset",
|
||||
"action.open": "Abrir",
|
||||
"action.relaunch.confirm": "¿Quieres reabrir Cider?",
|
||||
"action.close": "Cerrar",
|
||||
"action.relaunch.confirm": "¿ Quieres reiniciar Cider ?",
|
||||
"action.cast.chromecast": "Chromecast",
|
||||
"action.cast.todevices": "Transmitir a los dispositivos",
|
||||
"action.cast.stop": "Dejar de transmitir a todos los dispositivos",
|
||||
"action.cast.todevices": "Transmitir a los Dispositivos",
|
||||
"action.cast.stop": "Dejar de transmitir a todos los Dispositivos",
|
||||
"action.cast.airplay": "AirPlay",
|
||||
"action.cast.airplay.underdevelopment": "AirPlay todavía está en desarrollo",
|
||||
"action.cast.scan": "Escanear",
|
||||
"action.cast.scanning": "Escaneando...",
|
||||
"action.createNew": "Crear Nuevo...",
|
||||
"action.openArtworkInBrowser": "Abrir Ilustración en el Navegador",
|
||||
"action.scrollToTop": "Ir al inicio",
|
||||
"menubar.options.view": "Ver",
|
||||
"menubar.options.reload": "Recargar",
|
||||
"menubar.options.forcereload": "Forzar Recarga",
|
||||
"menubar.options.toggledevtools": "Herramientas de Desarrollo",
|
||||
"menubar.options.window": "Ventana",
|
||||
"menubar.options.minimize": "Minimizar",
|
||||
"menubar.options.plugins": "Menú de Plugins",
|
||||
"menubar.options.controls": "Controles",
|
||||
"menubar.options.volumeup": "Subir Volumen",
|
||||
"menubar.options.volumedown": "Bajar Volumen",
|
||||
"menubar.options.account": "Cuenta",
|
||||
"menubar.options.signout": "Cerrar Sesión",
|
||||
"menubar.options.support": "Soporte",
|
||||
"menubar.options.report": "Reportar a...",
|
||||
"menubar.options.bug": "Bug",
|
||||
"menubar.options.feature": "Solicitud de características",
|
||||
"menubar.options.trans": "Solicitud de Informe/Traducción",
|
||||
"menubar.options.license": "Ver licencia",
|
||||
"menubar.options.conf": "Abrir archivo de configuración en el editor",
|
||||
"menubar.options.zoom": "Zoom",
|
||||
"settings.header.general": "General",
|
||||
"settings.header.general.description": "Ajuste la configuración general de Cider.",
|
||||
"settings.option.general.language": "Idioma",
|
||||
|
@ -266,18 +339,52 @@
|
|||
"settings.option.general.resumebehavior.locally.description": "Cider reanudará su última sesión en esta PC.",
|
||||
"settings.option.general.resumebehavior.history": "Histórico",
|
||||
"settings.option.general.resumebehavior.history.description": "Cider pondrá en cola la última canción de su historial general de Apple Music, en todos sus dispositivos.",
|
||||
"settings.option.general.resumetabs": "Abrir pestaña al iniciar",
|
||||
"settings.option.general.resumetabs.description": "Puede elegir qué pestaña desea abrir cuando inicie Cider.",
|
||||
"settings.option.general.resumetabs.dynamic": "Dinámico",
|
||||
"settings.option.general.resumetabs.dynamic.description": "Cider abrirá la pestaña que utilizó por última vez.",
|
||||
"settings.option.general.language.main": "Idiomas",
|
||||
"settings.option.general.language.fun": "Idiomas Fun (Parodias)",
|
||||
"settings.option.general.language.unsorted": "Sin Clasificar",
|
||||
"settings.option.general.customizeSidebar": "Personalizar elementos de la barra lateral",
|
||||
"settings.option.general.customizeSidebar.customize": "Personalizar",
|
||||
"settings.option.general.keybindings": "Combinaciones de Teclas",
|
||||
"settings.option.general.keybindings.library": "Biblioteca",
|
||||
"settings.option.general.keybindings.session": "Sesión",
|
||||
"settings.option.general.keybindings.control": "Controles",
|
||||
"settings.option.general.keybindings.interface": "Interfaz",
|
||||
"settings.option.general.keybindings.advanced": "Avanzado",
|
||||
"settings.option.general.keybindings.pressCombination": "Presione una combinación de dos teclas para actualizar la combinación de teclas.",
|
||||
"settings.option.general.keybindings.pressEscape": "Pulse la tecla Escape para volver.",
|
||||
"settings.notyf.general.keybindings.update.success": "Combinación de teclas actualizada correctamente",
|
||||
"settings.prompt.general.keybindings.update.success": "La combinación de teclas se actualizó correctamente. Pulsa OK para reiniciar Cider",
|
||||
"settings.option.general.themeUpdateNotification": "Buscar actualizaciones de temas automáticamente",
|
||||
"settings.option.general.showLovedTracksInline": "Mostrar pistas favoritas en la línea",
|
||||
"settings.description.search": "Buscar",
|
||||
"settings.description.albums": "Álbumes de la biblioteca",
|
||||
"settings.description.artists": "Artistas de la biblioteca",
|
||||
"settings.description.browse": "Navegar",
|
||||
"settings.description.private": "Cambiar a Sesión Privada",
|
||||
"settings.description.remote": "Web Remoto",
|
||||
"settings.description.audio": "Configuraciones de Audio",
|
||||
"settings.description.plugins": "Menú de Plugins",
|
||||
"settings.description.cast": "Transmitir a los Dispositivos",
|
||||
"settings.description.settings": "Configuraciones",
|
||||
"settings.description.developer": "Herramientas para Desarrolladores",
|
||||
"settings.description.listnow": "Escuchar Ahora",
|
||||
"settings.description.recentAdd": "Agregadas Recientemente",
|
||||
"settings.description.songs": "Canciones",
|
||||
"settings.notyf.updateCider.update-not-available": "No hay actualizaciones disponibles",
|
||||
"settings.notyf.updateCider.update-downloaded": "La actualización se ha descargado, reinicie para aplicarla",
|
||||
"settings.notyf.updateCider.update-downloaded": "La actualización se ha descargado, Reinicie para aplicarla",
|
||||
"settings.notyf.updateCider.update-timeout": "Tiempo de espera agotado para actualizar Cider",
|
||||
"settings.header.audio": "Audio",
|
||||
"settings.header.audio.description": "Ajuste la configuración de audio para Cider.",
|
||||
"settings.option.audio.volumeStep": "Paso de Volumen",
|
||||
"settings.option.audio.volumeStep": "Pasos de Volumen",
|
||||
"settings.option.audio.advanced": "Control de Volumen Avanzado",
|
||||
"settings.option.audio.maxVolume": "Volumen Máximo",
|
||||
"settings.option.audio.changePlaybackRate": "Cambiar la Velocidad de Reproducción",
|
||||
"settings.option.audio.playbackRate": "Velocidad de Reproducción",
|
||||
"settings.option.audio.playbackRate.change": "Cambiar",
|
||||
"settings.option.audio.quality": "Calidad de Audio",
|
||||
"settings.header.audio.quality.hireslossless": "Hi-Res Lossless",
|
||||
"settings.header.audio.quality.hireslossless.description": "arriba de 24-bit/192 kHz",
|
||||
|
@ -289,40 +396,69 @@
|
|||
"settings.header.audio.quality.standard.description": "64 kbps",
|
||||
"settings.option.audio.seamlessTransition": "Transición de audio sin interrupciones",
|
||||
"settings.option.audio.enableAdvancedFunctionality": "Habilitar funcionalidad avanzada",
|
||||
"settings.option.audio.enableAdvancedFunctionality.description": "Habilitar la funcionalidad de AudioContext permitirá funciones de audio extendidas como normalización de audio, ecualizadores y visualizadores; sin embargo, en algunos sistemas esto puede causar interrupciones en las pistas de audio.",
|
||||
"settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cider cree que su PC no puede manejar estas funciones. ¿Estás seguro de que quieres continuar?",
|
||||
"settings.option.audio.enableAdvancedFunctionality.description": "Habilitar la funcionalidad de AudioContext permitirá funciones de audio extendidas como Normalización de Audio, Ecualizadores y Visualizadores. Sin embargo, en algunos sistemas esto puede causar interrupciones en las pistas de audio.",
|
||||
"settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cider cree que su PC no puede manejar estas funciones. ¿ Estás seguro de que quieres continuar ?",
|
||||
"settings.option.audio.audioLab": "Cider Audio Lab",
|
||||
"settings.option.audio.audioLab.description": "Una variedad de efectos de audio desarrollados internamente para Cider.",
|
||||
"settings.warn.audioLab.withoutAF": "Se requiere AudioContext (funcionalidad avanzada) para habilitar Laboratorio de audio de Cider.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Calidez analógica",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Simula la calidez analógica inspirada en el Korg Nutube 6P1",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Intensidad de calidez analógica",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Cambia la intensidad del procesamiento del módulo de Calidez analógica",
|
||||
"settings.option.audio.audioLab.description": "Una variedad de efectos de Audio desarrollados internamente para Cider.",
|
||||
"settings.option.audio.audioLab.subheader": "Designed by Cider Acoustic Technologies in California",
|
||||
"settings.warn.audioLab.withoutAF": "Se requiere AudioContext (funcionalidad avanzada) para habilitar Cider Audio Lab.",
|
||||
"settings.warn.enableAdvancedFunctionality": "AudioContext (funcionalidad avanzada) es necesaria para Habilitar esta Característica.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Calidez Analógica",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Simula la Calidez Analógica inspirada en el Korg Nutube 6P1",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Intensidad de Calidez Analógica",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Cambia la intensidad del procesamiento del módulo de Calidez Analógica",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Suave",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Calido",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer": "Cider Atmosphere Realizer™️",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "Realiza una Atmósfera musical diferente modelada a partir de las configuraciones de audio de última generación.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode": "Cider Atmosphere Realizer™️ Mode",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "Cambia el modo de funcionamiento del módulo Atmosphere Realizer.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "Té De Espuma de Queso Hōjicha",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS": "Té con Leche de Tapioca Genmaicha",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_1": "Té De Espuma De Queso Con Sal de Roca",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "Té con Leche Uji Matcha",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "Jazmín Macchiato",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Té de leche de Hokkaido",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A": "Pastel Suave de Luz de Luna",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM": "Leche Creme Brûlée de Azúcar Morena",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500B": "Clafoutis de Cerezas",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500C": "Uji Matcha Mochi",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE": "Abrazo de Calidez",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Mejora la calidad de audio percibida del audio AAC de 256 kbps mediante el uso de un algoritmo en tiempo real que aprovecha los modelos psicoacústicos de la audición humana y las características de codificación AAC.",
|
||||
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP no es compatible con la espacialización. Desactive la espacialización para continuar.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Intensidad de CAP",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Mejora la calidad de audio percibida del codificador de audio en AAC mediante el uso de un algoritmo en 'Tiempo Real' que aprovecha los modelos psicoacústicos de la audición humana y las características de codificación de AAC.",
|
||||
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP no es compatible con la Espacialización. Desactive la Espacialización para continuar.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Fuerza de CAP",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Cambia la intensidad del procesamiento realizado en el audio. (Agresivo puede producir resultados no deseados)",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Estándar",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.adaptive": "Adaptativo",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.legacy": "Legacy",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agresivo",
|
||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalización de audio",
|
||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normaliza el volumen máximo de pistas individuales para crear una experiencia auditiva más uniforme. (No funciona en las pistas cargadas por el usuario)",
|
||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normaliza el volumen máximo de las Canciones individuales para crear una experiencia auditiva más uniforme. (No funciona en las Canciones cargadas por el usuario)",
|
||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Gestionado por AudioLab",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Efecto de preajuste de espacialización, deshabilita la configuración personalizable de la espacialización de audio. La espacialización debe estar habilitada como requisito previo.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Espacialización ajustada de Cider",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Efecto de Preajuste de espacialización, desactiva la configuración personalizable de espacialización de audio.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Perfil de espacialización de Cider",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Cambia el Perfil de Ajuste de Espacialización.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Estándar",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Cambia el Perfil de Ajuste de la Espacialización.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Estandar",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.soundstage": "Estudio de Sonido",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Separación",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Mínimo",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiófilo",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.diffused": "Difuso",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.bplk": "Encore",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.hw2k": "Expanded Encore",
|
||||
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "La espacialización no es compatible con CAP. Deshabilite CAP para continuar.",
|
||||
"settings.option.audio.dbspl.display": "Visualización de dB SPL",
|
||||
"settings.option.audio.dbspl.description": "(Solo para usuarios avanzados) Muestra dB SPL en lugar de dBFS en el control deslizante de Volumen.",
|
||||
"settings.option.audio.dbfs.calibration": "Calibración de 0 dBFS",
|
||||
"settings.option.audio.dbfs.description": "Ingrese el Pico de dB SPL con 'Ponderación Z' cuando Cider esté en 0 dBFS.",
|
||||
"settings.header.visual": "Visual",
|
||||
"settings.header.visual.description": "Ajuste la configuración visual de Cider.",
|
||||
"settings.option.visual.windowStyle": "Estilo de ventana",
|
||||
"settings.option.visual.windowBackgroundStyle": "Estilo de fondo de ventana",
|
||||
"settings.option.visual.windowStyle": "Estilo de Ventana",
|
||||
"settings.option.visual.windowBackgroundStyle": "Estilo de Fondo de Ventana",
|
||||
"settings.header.visual.windowBackgroundStyle.none": "Ninguno",
|
||||
"settings.header.visual.windowBackgroundStyle.artwork": "ilustracion",
|
||||
"settings.header.visual.windowBackgroundStyle.artwork": "ilustración",
|
||||
"settings.header.visual.windowBackgroundStyle.image": "Imagen",
|
||||
"settings.option.visual.animatedArtwork": "Ilustración Animada",
|
||||
"settings.header.visual.animatedArtwork.always": "Siempre",
|
||||
|
@ -334,19 +470,29 @@
|
|||
"settings.header.visual.animatedArtworkQuality.high": "Alto",
|
||||
"settings.header.visual.animatedArtworkQuality.veryHigh": "Muy alto",
|
||||
"settings.header.visual.animatedArtworkQuality.extreme": "Extremo",
|
||||
"settings.option.visual.animatedWindowBackground": "Fondo de ventana animado",
|
||||
"settings.option.visual.hardwareAcceleration": "Aceleracion de hardware",
|
||||
"settings.option.visual.animatedWindowBackground": "Fondo de Ventana Animado",
|
||||
"settings.option.visual.hardwareAcceleration": "Aceleración de Hardware",
|
||||
"settings.option.visual.hardwareAcceleration.description": "Requiere reinicio",
|
||||
"settings.header.visual.hardwareAcceleration.default": "Por defecto",
|
||||
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
|
||||
"settings.option.visual.uiscale": "Escalado de IU",
|
||||
"settings.header.visual.theme": "Tema",
|
||||
"settings.option.visual.theme.github.download": "Instalar desde la URL de GitHub",
|
||||
"settings.option.visual.theme.github.explore": "Explorar temas de GitHub",
|
||||
"settings.option.visual.theme.github.openfolder": "Abrir Carpeta de Temas",
|
||||
"settings.option.visual.theme.github.explore": "Explorar Temas de GitHub",
|
||||
"settings.header.visual.theme.github.page": "Temas de GitHub",
|
||||
"settings.option.visual.theme.github.install.confirm": "¿Está seguro de que desea instalar {{ repo }}?",
|
||||
"settings.prompt.visual.theme.github.URL": "Ingrese la URL del tema que desea instalar",
|
||||
"settings.notyf.visual.theme.install.success": "Tema instalado correctamente",
|
||||
"settings.notyf.visual.theme.install.error": "La instalación del tema falló",
|
||||
"settings.option.visual.theme.github.install.confirm": "¿ Está seguro de que desea instalar {{ repo }} ?",
|
||||
"settings.prompt.visual.theme.github.URL": "Introduce la URL del tema que quieres instalar",
|
||||
"settings.prompt.visual.theme.uninstallTheme": "¿ Estas seguro que lo quieres desinstalar {{ theme }} ?",
|
||||
"settings.option.visual.theme.checkForUpdates": "Buscar actualizaciones",
|
||||
"settings.header.visual.styles": "Estilos",
|
||||
"settings.option.visual.theme.manageStyles": "Gestionar Estilos",
|
||||
"settings.option.visual.theme.uninstall": "Desinstalar",
|
||||
"settings.option.visual.theme.viewInfo": "Ver Información",
|
||||
"settings.option.visual.theme.github.available": "Disponible",
|
||||
"settings.option.visual.theme.github.applied": "Aplicado",
|
||||
"settings.notyf.visual.theme.install.success": "Tema Instalado Correctamente",
|
||||
"settings.notyf.visual.theme.install.error": "La Instalación del Tema Falló",
|
||||
"settings.header.visual.plugin": "Plugin",
|
||||
"settings.option.visual.plugin.github.download": "Instalar desde la URL de GitHub",
|
||||
"settings.option.visual.plugin.github.explore": "Explorar Plugins de GitHub",
|
||||
|
@ -355,7 +501,7 @@
|
|||
"settings.prompt.visual.plugin.github.URL": "Ingrese la URL del tema que desea instalar",
|
||||
"settings.prompt.visual.plugin.github.success": "El Plugin instalado correctamente, Presione OK para reiniciar Cider",
|
||||
"settings.notyf.visual.plugin.install.success": "El Plugin instalado correctamente",
|
||||
"settings.notyf.visual.plugin.install.error": "La instalación del Plugin falló",
|
||||
"settings.notyf.visual.plugin.install.error": "La instalación del Plugin Falló",
|
||||
"settings.option.visual.theme.default": "Cider",
|
||||
"settings.option.visual.theme.dark": "Oscuro",
|
||||
"settings.option.visual.showPersonalInfo": "Mostrar información personal",
|
||||
|
@ -364,7 +510,7 @@
|
|||
"settings.option.window.openOnStartup": "Abrir Cider al Iniciar",
|
||||
"settings.option.window.openOnStartup.hidden": "Abrir oculto",
|
||||
"settings.option.window.useNativeTitleBar": "Usar barra de título nativa",
|
||||
"settings.option.window.windowControlStyle": "Estilo de control de ventanaEstilo de control de ventana",
|
||||
"settings.option.window.windowControlStyle": "Estilo de control de ventana",
|
||||
"settings.option.window.windowControlStyle.right": "Derecha",
|
||||
"settings.option.window.windowControlStyle.left": "Izquierda",
|
||||
"settings.header.lyrics": "Letras",
|
||||
|
@ -373,17 +519,30 @@
|
|||
"settings.option.lyrics.enableMusixmatchKaraoke": "Habilitar el modo Karaoke (solo Musixmatch)",
|
||||
"settings.option.lyrics.musixmatchPreferredLanguage": "Idioma preferido de traducción de Musixmatch",
|
||||
"settings.option.lyrics.enableYoutubeLyrics": "Habilitar letras de YouTube para videos musicales",
|
||||
"settings.option.lyrics.enableQQLyrics": "Habilitar letras de QQ",
|
||||
"settings.header.connectivity": "Conectividad",
|
||||
"settings.header.connectivity.description": "Ajuste la configuración de conectividad para Cider.",
|
||||
"settings.option.connectivity.playbackNotifications": "Notificaciones de Reproducción",
|
||||
"settings.option.connectivity.discordRPC": "Discord Rich Presence",
|
||||
"settings.option.connectivity.playbackNotifications": "Notificaciones de reproducción",
|
||||
"settings.option.connectivity.discordRPC.clearOnPause": "Borrar Discord Rich Presence en Pausa",
|
||||
"settings.option.connectivity.discordRPC.clientName": "Nombre del Cliente",
|
||||
"settings.option.connectivity.discordRPC.clearOnPause": "Borrar Discord Rich Presence en pausa",
|
||||
"settings.option.connectivity.discordRPC.hideButtons": "Ocultar botones en Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.hideTimestamp": "Ocultar Marca de Tiempo en Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.detailsFormat": "Formato de los detalles",
|
||||
"settings.option.connectivity.discordRPC.stateFormat": "Formato de Estado",
|
||||
"settings.option.connectivity.discordRPC.reload": "Recargar Discord RPC",
|
||||
"settings.option.connectivity.discordRPC.reconnectedToUser": "Discord RPC reconectando al usuario: {{user}} ({{userid}})",
|
||||
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling",
|
||||
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Retraso de Scrobble (%)",
|
||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Activar Last.fm Now Playing",
|
||||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Eliminar artistas destacados del título de la canción (Last.fm)",
|
||||
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filtrar pista en bucle (Last.fm)",
|
||||
"settings.option.connectivity.lastfmScrobble.filterLoop.description": "Evite que las pistas en bucle se scrobblen o se muestren en la lista Now Playing en Last.fm.",
|
||||
"settings.option.connectivity.lastfmScrobble.filterTypes": "Tipos de Filtros de Medios (Last.fm)",
|
||||
"settings.option.connectivity.lastfmScrobble.manualToken": "Ingrese el token de Last.fm Manualmente",
|
||||
"settings.notyf.connectivity.lastfmScrobble.connectError": "Last.fm Tiempo de Conexión agotado",
|
||||
"settings.notyf.connectivity.lastfmScrobble.connectSuccess": "Last.fm Conexión exitosa",
|
||||
"settings.notyf.connectivity.lastfmScrobble.connecting": "Conectando a Last.fm...",
|
||||
"settings.header.debug": "Debug",
|
||||
"settings.option.debug.copy_log": "Copiar Logs al portapapeles",
|
||||
"settings.option.debug.openAppData": "Abrir carpeta de Cider",
|
||||
|
@ -393,16 +552,25 @@
|
|||
"settings.option.experimental.reinstallwidevine.confirm": "¿Estás seguro de que quieres reinstalar Widevine?",
|
||||
"settings.option.experimental.unknownPlugin": "Fuentes desconocidas",
|
||||
"settings.option.experimental.unknownPlugin.description": "Permitir la instalación de Plugins desde otros repos que no sean el repositorio de Plugins de Cider",
|
||||
"settings.option.experimental.compactUI": "UI compacta",
|
||||
"settings.option.experimental.compactUI": "UI Compacto",
|
||||
"settings.option.window.close_button_hide": "El botón Cerrar oculta la aplicación",
|
||||
"settings.option.window.maxElementScale": "Escala Máxima de Elementos",
|
||||
"settings.option.experimental.inline_playlists": "Álbumes y listas de reproducción en línea",
|
||||
"settings.option.advanced.playlistTrackMapping": "Mapeo de pistas de listas de reproducción",
|
||||
"settings.option.advanced.playlistTrackMapping.description": "Habilita el escaneo profundo de las listas de reproducción para determinar qué pistas están en qué listas de reproducción. Los tiempos de creación de la caché de la lista de reproducción pueden aumentar significativamente.",
|
||||
"settings.option.visual.transparent": "Marco transparente",
|
||||
"settings.option.visual.transparent.description": "Necesita compatibilidad con temas, requiere reiniciar",
|
||||
"settings.option.visual.customAccentColor": "Color de Acento Personalizado",
|
||||
"settings.option.visual.accentColor": "Color de Acento",
|
||||
"settings.option.visual.purplePodcastPlaybackBar": "Barra de Reproducción Morada para Podcasts",
|
||||
"settings.option.visual.windowColor": "Color de Tinte de Ventana",
|
||||
"settings.header.visual.windowBackgroundStyle.color": "Matiz de Color",
|
||||
"settings.header.advanced": "Avanzado",
|
||||
"spatial.notTurnedOn": "La espacialización de audio está deshabilitada. Para usar, habilítelo primero.",
|
||||
"spatial.spatialProperties": "Propiedades de Espacializacion",
|
||||
"settings.header.connect": "Conectar",
|
||||
"settings.option.connect.link_account": "Habilitar sincronización con Cider Connect",
|
||||
"settings.option.connect.link_account.description": "Vincular su cuenta de Discord con Cider Connect le permite almacenar datos de usuario que incluyen configuraciones, ecualizadores y eventualmente más, una vez que haya terminado. (Trabajo en progreso)",
|
||||
"spatial.notTurnedOn": "La Espacialización de audio está deshabilitada. Para usar, habilítelo primero.",
|
||||
"spatial.spatialProperties": "Propiedades de Espacialización",
|
||||
"spatial.width": "Ancho",
|
||||
"spatial.height": "Alto",
|
||||
"spatial.depth": "Profundidad",
|
||||
|
@ -431,7 +599,46 @@
|
|||
"share.platform.whatsapp": "WhatsApp",
|
||||
"share.platform.messenger": "Messenger",
|
||||
"share.platform.email": "Email",
|
||||
"share.platform.songLink": "Copy with song.link",
|
||||
"share.platform.songLink": "Copiar con song.link",
|
||||
"share.platform.clipboard": "Copiar link",
|
||||
"about.thanks": "Muchas gracias al equipo de Cider Collective y a todos nuestros colaboradores."
|
||||
"about.thanks": "Muchas gracias al equipo de Cider Collective y a Todos nuestros colaboradores.",
|
||||
"oobe.yes": "Sí",
|
||||
"oobe.no": "No",
|
||||
"oobe.next": "Siguiente",
|
||||
"oobe.previous": "Anterior",
|
||||
"oobe.done": "Hecho",
|
||||
"oobe.amupsell.title": "Antes de Empezar",
|
||||
"oobe.amupsell.text": "Cider Requiere una Suscripción paga Activa a Apple Music\nCider NO funcionará con Apple Music Voice Plan ni con algunas suscripciones de prueba promocionales. Si ya tiene una suscripción calificada de Apple Music, haga click en Siguiente para continuar.",
|
||||
"oobe.amupsell.subscribeBtn": "Suscríbete a Apple Music",
|
||||
"oobe.amupsell.explainBtn": "Explique",
|
||||
"oobe.amupsell.subscribeUrl": "https://apple.co/3MdqJVQ",
|
||||
"oobe.amupsell.amWebUrl": "https://beta.music.apple.com/",
|
||||
"oobe.amupsell.promoExplained": "Algunas suscripciones de Apple Music promocionales y de prueba fuera de EE.UU. no tienen acceso a las API del reproductor web de Apple Music necesarias para que Cider funcione. Para verificar si su versión de prueba activa funcionará con Cider, vaya a <a href='{{ amWebUrl }}'>{{ amWebUrl }}</a> inicie sesión e intente reproducir música. Si funciona, ¡genial! Está listo para usar Cider, sin embargo, si no considera suscribirse a Apple Music aquí: <a href='{{ subscribeUrl }}'>{{ subscribeUrl }}</a>",
|
||||
"oobe.intro.title": "Bienvenido a Cider",
|
||||
"oobe.intro.subtitle": "",
|
||||
"oobe.intro.text": "Configuremos algunas cosas para que puedas usar Cider como quieras. Siempre puede cambiar esta configuración más tarde.",
|
||||
"oobe.general.title": "General",
|
||||
"oobe.general.subtitle": "",
|
||||
"oobe.general.text": "",
|
||||
"oobe.audio.title": "Audio",
|
||||
"oobe.audio.subtitle": "",
|
||||
"oobe.audio.text": "Cider cuenta con una pila de audio diseñada y afinada a medida que brinda una experiencia de audio rica y de alta calidad.\nCon Cider Adrenaline, Atmosphere Realizer y Spatialized Audio.\nPara habilitar esta funcionalidad, \"Funcionalidad de audio avanzada\" debe estar habilitada.\nHabilitar audio avanzado La funcionalidad le dará acceso a estas mejoras en Cider Audio Labs, que se encuentra en la configuración de la aplicación.",
|
||||
"oobe.audio.advancedFunctionality": "",
|
||||
"oobe.visual.title": "Visual",
|
||||
"oobe.visual.subtitle": "",
|
||||
"oobe.visual.text": "",
|
||||
"oobe.visual.layout.text": "Cider presenta dos diseños de ventana diferentes.\nMaverick es un diseño similar a iTunes con el reproductor en la parte superior de la ventana.\nMojave es un nuevo giro creado por Cider Collective.\n\nPuedes cambiar el diseño en cualquier momento en la configuración.",
|
||||
"oobe.visual.suggestingThemes": "La tematización es una excelente forma de personalizar tu experiencia. Aquí hay algunos que sugerimos: ",
|
||||
"oobe.visual.suggestingThemes.subtext": "(Estos temas se descargarán de GitHub)",
|
||||
"oobe.visual.suggestingThemes.default": "Cider",
|
||||
"oobe.visual.suggestingThemes.default.text": "El clásico tema de Cider.",
|
||||
"oobe.visual.suggestingThemes.dark": "Oscuro",
|
||||
"oobe.visual.suggestingThemes.dark.text": "Oscurisimo",
|
||||
"oobe.visual.suggestingThemes.community1": "Groovy",
|
||||
"oobe.visual.suggestingThemes.community1.text": "Un tema influenciado por WinUI",
|
||||
"oobe.visual.suggestingThemes.community2": "iTheme",
|
||||
"oobe.visual.suggestingThemes.community2.text": " El clásico diseño de frutas grandes.",
|
||||
"oobe.visual.suggestingThemes.community3": "Dracula",
|
||||
"oobe.visual.suggestingThemes.community3.text": "El icónico esquema de color de Drácula.",
|
||||
"oobe.amsignin.title": ""
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
"notification.updatingLibrarySongs": "Обновление медиатеки песен...",
|
||||
"notification.updatingLibraryAlbums": "Обновление медиатеки альбомов...",
|
||||
"notification.updatingLibraryArtists": "Обновление медиатеки артистов...",
|
||||
"term.variables": "Переменные",
|
||||
"term.appleInc": "Apple Inc.",
|
||||
"term.appleMusic": "Apple Music",
|
||||
"term.applePodcasts": "Подкасты Apple",
|
||||
|
@ -18,17 +19,24 @@
|
|||
"term.discord": "Discord",
|
||||
"term.learnMore": "Узнать больше",
|
||||
"term.accountSettings": "Настройки аккаунта",
|
||||
"term.logout": "Выйти",
|
||||
"term.logout": "Выйти из аккаунта",
|
||||
"term.login": "Войти",
|
||||
"term.cast": "Транслировать",
|
||||
"term.quickNav": "Быстрая навигация",
|
||||
"term.about": "О Cider",
|
||||
"term.privateSession": "Частная сессия",
|
||||
"term.disablePrivateSession": "Выключить частную сессию",
|
||||
"term.queue": "Очередь",
|
||||
"term.autoplay": "Автовоспроизведение",
|
||||
"term.lyrics": "Текст",
|
||||
"term.miniplayer": "Мини-проигрыватель",
|
||||
"term.history": "История",
|
||||
"term.search": "Поиск",
|
||||
"term.scroll": "Прокрутка",
|
||||
"term.scroll.infinite": "Бесконечная",
|
||||
"term.scroll.paged": "${songsPerPage} на страницу",
|
||||
"term.live": "LIVE",
|
||||
"term.showSearch": "Показать панель поиска",
|
||||
"term.hideSearch": "Скрыть панель поиска",
|
||||
"term.library": "Медиатека",
|
||||
"term.listenNow": "Слушайте сейчас",
|
||||
"term.browse": "Обзор",
|
||||
|
@ -39,18 +47,28 @@
|
|||
"term.artists": "Артисты",
|
||||
"term.podcasts": "Подкасты",
|
||||
"term.playlists": "Плейлисты",
|
||||
"term.charts": "Чарты",
|
||||
"term.playlist": "Плейлист",
|
||||
"term.newPlaylist": "Новый Плейлист",
|
||||
"term.newPlaylistFolder": "Новая Папка Плейлиста",
|
||||
"term.createNewPlaylist": "Создать новый плейлист",
|
||||
"term.createNewPlaylistFolder": "Создать новую папку",
|
||||
"term.deletePlaylist": "Вы уверены, что хотите удалить этот плейлист?",
|
||||
"term.navigateBack": "Назад",
|
||||
"term.navigateForward": "Вперед",
|
||||
"term.play": "Воспроизвести",
|
||||
"term.playpause": "Воспроизвести/Пауза",
|
||||
"term.pause": "Пауза",
|
||||
"term.stop": "Остановить",
|
||||
"term.previous": "Предыдущий",
|
||||
"term.next": "Следующий",
|
||||
"term.shuffle": "Перемешать",
|
||||
"term.enableShuffle": "Перемешать",
|
||||
"term.disableShuffle": "Перемешать",
|
||||
"term.repeat": "Повторять",
|
||||
"term.enableRepeatOne": "Включить повтор одной композиции",
|
||||
"term.disableRepeatOne": "Выключить повтор одной композиции",
|
||||
"term.disableRepeat": "Выключить повторение",
|
||||
"term.volume": "Громкость",
|
||||
"term.mute": "Заглушить",
|
||||
"term.unmute": "Включить звук",
|
||||
|
@ -72,6 +90,7 @@
|
|||
"term.viewAs": "Показывать",
|
||||
"term.viewAs.coverArt": "Обложки",
|
||||
"term.viewAs.list": "Список",
|
||||
"term.dynamic": "Динамический",
|
||||
"term.size": "Размер",
|
||||
"term.size.normal": "Обычный",
|
||||
"term.size.compact": "Компактный",
|
||||
|
@ -113,12 +132,14 @@
|
|||
"few": "секунды",
|
||||
"other": "секунд"
|
||||
},
|
||||
"term.fullscreenView": "Полноэкранное отображение",
|
||||
"term.fullscreenView": "Полноэкранный режим",
|
||||
"term.defaultView": "Стандартное отображение",
|
||||
"term.audioSettings": "Настройки звука",
|
||||
"term.audioControls": "Настройка громкости",
|
||||
"term.clearAll": "Очистить",
|
||||
"term.recentStations": "Вы недавно слушали",
|
||||
"term.personalStations": "Персональные станции",
|
||||
"term.amLive": "Apple Music Live",
|
||||
"term.language": "Язык",
|
||||
"term.funLanguages": "Забавные",
|
||||
"term.noLyrics": "Текст песни не найден.",
|
||||
|
@ -139,6 +160,7 @@
|
|||
},
|
||||
"term.videos": "Видео",
|
||||
"term.menu": "Меню",
|
||||
"term.themeManaged": "Управляется темой",
|
||||
"term.check": "Проверить",
|
||||
"term.aboutArtist": "О {{artistName}}",
|
||||
"term.topResult": "Топ результатов",
|
||||
|
@ -162,7 +184,8 @@
|
|||
"term.top": "Top",
|
||||
"term.version": "Версия",
|
||||
"term.noVideos": "Видео не найдено.",
|
||||
"term.plugin": "Плагины",
|
||||
"term.plugins": "Плагины",
|
||||
"term.plugin": "Плагин",
|
||||
"term.pluginMenu": "Меню плагинов",
|
||||
"term.pluginMenu.none": "Нет плагинов",
|
||||
"term.replay": "Мой год",
|
||||
|
@ -186,6 +209,22 @@
|
|||
"term.confirmLogout": "Вы уверены, что хотите выйти?",
|
||||
"term.creditDesignedBy": "Разработано ${authorUsername}",
|
||||
"term.discNumber": "Диск ${discNumber}",
|
||||
"term.reload" : "Перезагрузить Cider?",
|
||||
"term.toggleprivate" : "Переключить частную сессию",
|
||||
"term.webremote" : "Web Remote",
|
||||
"term.cast" : "Транслировать",
|
||||
"term.cast2" : "Трансляция на устройства",
|
||||
"term.quit" : "Выход",
|
||||
"term.zoomin" : "Приблизить",
|
||||
"term.zoomout" : "Отдалить",
|
||||
"term.zoomreset" : "Сбросить масштаб",
|
||||
"term.fullscreen" : "Полный экран",
|
||||
"term.nowPlaying": "Сейчас играет",
|
||||
"home.syncFavorites": "Синхронизировать",
|
||||
"home.syncFavorites.gettingArtists": "Получение отслеживаемых исполнителей...",
|
||||
"action.favorite": "Отслеживать",
|
||||
"action.removeFavorite": "Перестать отслеживать",
|
||||
"action.refresh": "Обновить",
|
||||
"home.title": "Главная",
|
||||
"home.recentlyPlayed": "Недавно прослушанные",
|
||||
"home.recentlyAdded": "Недавно добавленные",
|
||||
|
@ -206,6 +245,16 @@
|
|||
"podcast.episodes": "Выпуски радиошоу",
|
||||
"podcast.playEpisode": "Воспроизвести",
|
||||
"podcast.website": "Веб-сайт",
|
||||
"action.hideLibrary": "Скрыть библиотеку",
|
||||
"action.showLibrary": "Показать библиотеку",
|
||||
"action.cut": "Вырезать",
|
||||
"action.paste": "Вставить",
|
||||
"action.selectAll": "Выбрать всё",
|
||||
"action.delete": "Удалить",
|
||||
"action.edit": "Изменить",
|
||||
"action.done": "Готово",
|
||||
"action.submit": "Подтвердить",
|
||||
"action.editTracklist": "Редактировать треклист",
|
||||
"action.addToLibrary": "Добавить в медиатеку",
|
||||
"action.addToLibrary.success": "Добавлено в медиатеку",
|
||||
"action.addToLibrary.error": "Ошибка Добавления в медиатику",
|
||||
|
@ -241,7 +290,7 @@
|
|||
"action.unlove": "Больше не нравится",
|
||||
"action.dislike": "Меньше подобных рекомендаций",
|
||||
"action.undoDislike": "Вернуть подобные рекомендации",
|
||||
"action.showWebRemoteQR": "Веб-интерфейс",
|
||||
"action.showWebRemoteQR": "Web Remote",
|
||||
"action.playTracksNext": "Воспроизвести ${app.selectedMediaItems.length} песен следующими",
|
||||
"action.playTracksLater": "Воспроизвести ${app.selectedMediaItems.length} песен позже",
|
||||
"action.removeTracks": "Удалить ${self.selectedItems.length} песен из очереди",
|
||||
|
@ -249,13 +298,15 @@
|
|||
"action.export": "Экспорт",
|
||||
"action.showAlbum": "Показать весь альбом",
|
||||
"action.tray.minimize": "Свернуть в трей",
|
||||
"action.tray.quit": "Выйти",
|
||||
"action.tray.show": "Показать Cider",
|
||||
"action.tray.listento": "Listen To:",
|
||||
"action.update": "Обновить",
|
||||
"action.install": "Установить",
|
||||
"action.copy": "Скопировать",
|
||||
"action.newpreset": "Новый пресет...",
|
||||
"action.deletepreset": "Удалить пресет",
|
||||
"action.open": "Открыть",
|
||||
"action.close": "Закрыть",
|
||||
"action.relaunch.confirm": "Вы хотите перезапустить Cider?",
|
||||
"action.cast.chromecast": "Chromecast",
|
||||
"action.cast.todevices": "Транслировать на устройства",
|
||||
|
@ -266,6 +317,27 @@
|
|||
"action.cast.scanning": "Поиск...",
|
||||
"action.createNew": "Создать новый...",
|
||||
"action.openArtworkInBrowser": "Открыть обложку в браузере",
|
||||
"action.scrollToTop": "Scroll to top",
|
||||
"menubar.options.view": "View",
|
||||
"menubar.options.reload": "Перезагрузить",
|
||||
"menubar.options.forcereload": "Жесткая перезагрузка",
|
||||
"menubar.options.toggledevtools": "Toggle Developer Tools",
|
||||
"menubar.options.window": "Window",
|
||||
"menubar.options.minimize": "Minimize",
|
||||
"menubar.options.plugins": "Меню плагинов",
|
||||
"menubar.options.controls": "Управление",
|
||||
"menubar.options.volumeup": "Громче",
|
||||
"menubar.options.volumedown": "Тише",
|
||||
"menubar.options.account": "Аккаунт",
|
||||
"menubar.options.signout": "Выйти из аккаунта",
|
||||
"menubar.options.support": "Поддержать",
|
||||
"menubar.options.report": "Сообщить о...",
|
||||
"menubar.options.bug": "Баг",
|
||||
"menubar.options.feature": "Feature Request",
|
||||
"menubar.options.trans": "Translation Report/Request",
|
||||
"menubar.options.license": "Просмотреть лицензию",
|
||||
"menubar.options.conf": "Открыть файл конфигурации в редакторе",
|
||||
"menubar.options.zoom": "Zoom",
|
||||
"settings.header.general": "Общие",
|
||||
"settings.header.general.description": "Настройка общих параметров Cider.",
|
||||
"settings.option.general.language": "Язык",
|
||||
|
@ -275,18 +347,52 @@
|
|||
"settings.option.general.resumebehavior.locally.description": "Cider возобновит ваш последний сеанс на этом компьютере.",
|
||||
"settings.option.general.resumebehavior.history": "История",
|
||||
"settings.option.general.resumebehavior.history.description": "Cider поставит в очередь последнюю песню из вашей общей истории Apple Music на разных устройствах.",
|
||||
"settings.option.general.resumetabs" : "Раздел при запуске",
|
||||
"settings.option.general.resumetabs.description" : "Вы можете выбрать, какой раздел будет открыться при запуске Cider.",
|
||||
"settings.option.general.resumetabs.dynamic" : "Динамически",
|
||||
"settings.option.general.resumetabs.dynamic.description" : "Cider откроет последний использованный раздел.",
|
||||
"settings.option.general.language.main": "Языки",
|
||||
"settings.option.general.language.fun": "Забавные языки",
|
||||
"settings.option.general.language.unsorted": "Неотсортированные",
|
||||
"settings.option.general.customizeSidebar": "Настроить элементы боковой панели",
|
||||
"settings.option.general.customizeSidebar.customize": "Настроить",
|
||||
"settings.option.general.keybindings": "Сочетания клавиш",
|
||||
"settings.option.general.keybindings.library": "Библиотека",
|
||||
"settings.option.general.keybindings.session": "Сессия",
|
||||
"settings.option.general.keybindings.control": "Элементы управления",
|
||||
"settings.option.general.keybindings.interface": "Интерфейс",
|
||||
"settings.option.general.keybindings.advanced": "Расширенные",
|
||||
"settings.option.general.keybindings.pressCombination": "Нажмите комбинацию двух клавиш, чтобы обновить привязку клавиш.",
|
||||
"settings.option.general.keybindings.pressEscape": "Нажмите клавишу Escape, чтобы вернуться.",
|
||||
"settings.notyf.general.keybindings.update.success": "Комбинация клавиш успешно обновлена",
|
||||
"settings.prompt.general.keybindings.update.success": "Комбинация клавиш успешно обновлена. Нажмите OK, чтобы перезапустить Cider",
|
||||
"settings.option.general.themeUpdateNotification": "Автоматически проверять наличие обновлений темы",
|
||||
"settings.option.general.showLovedTracksInline": "Показывать любимые треки в строке",
|
||||
"settings.description.search": "Поиск",
|
||||
"settings.description.albums": "Альбомы медиатеки",
|
||||
"settings.description.artists": "Артисты",
|
||||
"settings.description.browse": "Обзор",
|
||||
"settings.description.private": "Переключить частную сессию",
|
||||
"settings.description.remote": "Web Remote",
|
||||
"settings.description.audio": "Настройки аудио",
|
||||
"settings.description.plugins": "Меню плагинов",
|
||||
"settings.description.cast": "Трансляция на устройства",
|
||||
"settings.description.settings": "Настройки",
|
||||
"settings.description.developer": "Инструменты разработчика",
|
||||
"settings.description.listnow": "Сейчас играет",
|
||||
"settings.description.recentAdd": "Недавно добавлено",
|
||||
"settings.description.songs": "Песни",
|
||||
"settings.notyf.updateCider.update-not-available": "Нет доступных обновлений",
|
||||
"settings.notyf.updateCider.update-downloaded": "Обновление загружено, перезапустите, чтобы обновить",
|
||||
"settings.notyf.updateCider.update-timeout": "Время ожидания обновления истекло",
|
||||
"settings.header.audio": "Звук",
|
||||
"settings.header.audio.description": "Настройка звука Cider.",
|
||||
"settings.option.audio.volumeStep": "Шаг громкости",
|
||||
"settings.option.audio.advanced": "Расширенные настройки громкости",
|
||||
"settings.option.audio.maxVolume": "Максимальная громкость",
|
||||
"settings.option.audio.changePlaybackRate": "Изменить скорость воспроизведения",
|
||||
"settings.option.audio.playbackRate": "Скорость воспроизведения",
|
||||
"settings.option.audio.playbackRate.change": "Изменить",
|
||||
"settings.option.audio.quality": "Качество звука",
|
||||
"settings.header.audio.quality.hireslossless": "Высокое разрешение, без потерь",
|
||||
"settings.header.audio.quality.hireslossless.description": "ALAC до 24 бит/192 кГц",
|
||||
|
@ -295,26 +401,45 @@
|
|||
"settings.header.audio.quality.high": "Высокое качество",
|
||||
"settings.header.audio.quality.high.description": "AAC 256 кб/с",
|
||||
"settings.header.audio.quality.standard": "Высокая эффективность",
|
||||
"settings.header.audio.quality.standard.description": "НЕ-ААС для экономии трафика(64 кб/с)",
|
||||
"settings.header.audio.quality.standard.description": "64 кб/с",
|
||||
"settings.option.audio.seamlessTransition": "Плавный переход между песнями",
|
||||
"settings.option.audio.enableAdvancedFunctionality": "Включить расширенный функционал",
|
||||
"settings.option.audio.enableAdvancedFunctionality.description": "Включение функции AudioContext позволит использовать расширенные функции звука, такие как нормализация звука, эквалайзеры и визуализаторы, однако в некоторых системах это может вызвать заикание звука.",
|
||||
"settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cider считает, что ваш компьютер не справится с этими функциями. Вы уверены что хотите продолжить?",
|
||||
"settings.option.audio.audioLab": "Cider Audio Lab",
|
||||
"settings.option.audio.audioLab.description": "Ассортимент звуковых обработок собственной разработки для Cider.",
|
||||
"settings.option.audio.audioLab.subheader": "Разработано Cider Acoustic Technologies в Калифорнии",
|
||||
"settings.warn.audioLab.withoutAF": "AudioContext (Расширенный функционал) требуется для включения Cider Audio Laboratory.",
|
||||
"settings.warn.enableAdvancedFunctionality": "Для включения этой функции требуется AudioContext (расширенный функционал).",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Аналоговое звучание",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Имитирует аналоговое звучание по образцу Korg Nutube 6P1",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Интенсивность аналогового звучания",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Изменяет интенсивность Аналогового звучания.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Обычная",
|
||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Сильнее",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer": "Cider Atmosphere Realizer™️",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "Реализует другую музыкальную атмосферу, созданную по образцу современных аудиосистем.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode": "Режим работы Cider Atmosphere Realizer™️",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "Изменяет режим работы Atmosphere Realizer.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "Hōjicha Cheese Foam Tea",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS": "Genmaicha Tapioca Milk Tea",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_1": "Rock Salt Cheese Foam Tea",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "Uji Matcha Milk Tea",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "Jasmine Macchiato",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Hokkaido Milk Tea",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A": "Moonlight Softcake",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM": "Brown Sugar Creme Brûlée Milk",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500B": "Clafoutis aux Cerises",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500C": "Uji Matcha Mochi",
|
||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE": "Cuddle Warmth",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Улучшает воспринимаемое качество звука AAC 256 кбит/с за счет использования алгоритма реального времени, использующего как психоакустические модели человеческого слуха, так и характеристики кодирования AAC.",
|
||||
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP не совместим с пространственным звучанием. Пожалуйста, отключите пространственное звучание, чтобы продолжить.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Режим CAP",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Изменяет режим обработки звука. (Режим агрессии может привести к нежелаемым результатам)",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Стандартный",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.adaptive": "Адаптивный",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.legacy": "Legacy",
|
||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Агрессивный",
|
||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Нормализация звука",
|
||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Нормализует пиковую громкость для отдельных треков, чтобы создать более однородное впечатление от прослушивания.",
|
||||
|
@ -324,8 +449,18 @@
|
|||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Профиль пространственного звучания Cider",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Изменяет профиль пространственного звучания.",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Стандарт",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.soundstage": "Звуковая сцена",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Separation",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Минимальный",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Аудиофил",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.diffused": "Рассеянный",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.bplk": "Encore",
|
||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.hw2k": "Expanded Encore",
|
||||
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Пространственная обработка несовместима с CAP. Пожалуйста, отключите CAP, чтобы продолжить.",
|
||||
"settings.option.audio.dbspl.display": "Отображение dB SPL",
|
||||
"settings.option.audio.dbspl.description": "(Только для опытных пользователей) Отображение dB SPL вместо dBFS на ползунке громкости.",
|
||||
"settings.option.audio.dbfs.calibration": "0 dBFS Калибровка",
|
||||
"settings.option.audio.dbfs.description": "Введите пиковый Z-взвешенный уровень звукового давления в дБ, когда Cider находится на уровне 0 дБ полной шкалы.",
|
||||
"settings.header.visual": "Внешний вид",
|
||||
"settings.header.visual.description": "Настройка внешнего вида Cider.",
|
||||
"settings.option.visual.windowStyle": "Стиль окна",
|
||||
|
@ -351,10 +486,19 @@
|
|||
"settings.option.visual.uiscale": "Размер интерфейса",
|
||||
"settings.header.visual.theme": "Тема",
|
||||
"settings.option.visual.theme.github.download": "Установить с GitHub",
|
||||
"settings.option.visual.theme.github.openfolder": "Открыть папку с темами",
|
||||
"settings.option.visual.theme.github.explore": "Исследовать темы с GitHub",
|
||||
"settings.header.visual.theme.github.page": "Темы с GitHub",
|
||||
"settings.option.visual.theme.github.install.confirm": "Вы уверены, что хотите установить {{ repo }}?",
|
||||
"settings.prompt.visual.theme.github.URL": "Введите URL темы, которую хотите установить",
|
||||
"settings.prompt.visual.theme.uninstallTheme": "Вы уверены, что хотите удалить {{ theme }}?",
|
||||
"settings.option.visual.theme.checkForUpdates": "Проверить наличие обновлений",
|
||||
"settings.header.visual.styles": "Стили",
|
||||
"settings.option.visual.theme.manageStyles": "Управление стилями",
|
||||
"settings.option.visual.theme.uninstall": "Удалить",
|
||||
"settings.option.visual.theme.viewInfo": "Просмотреть информацию",
|
||||
"settings.option.visual.theme.github.available": "Доступные",
|
||||
"settings.option.visual.theme.github.applied": "Применённые",
|
||||
"settings.notyf.visual.theme.install.success": "Тема успешно установлена",
|
||||
"settings.notyf.visual.theme.install.error": "Не удалось установить тему",
|
||||
"settings.header.visual.plugin": "Плагин",
|
||||
|
@ -383,17 +527,30 @@
|
|||
"settings.option.lyrics.enableMusixmatchKaraoke": "Включить режим караоке (только с Musixmatch)",
|
||||
"settings.option.lyrics.musixmatchPreferredLanguage": "Предпочтительный язык перевода Musixmatch",
|
||||
"settings.option.lyrics.enableYoutubeLyrics": "Включить Youtube Lyrics для музыкальных клипов",
|
||||
"settings.option.lyrics.enableQQLyrics": "Получать текст песен из QQ Lyrics",
|
||||
"settings.header.connectivity": "Прочее",
|
||||
"settings.header.connectivity.description": "Настройка прочих параметров Cider.",
|
||||
"settings.option.connectivity.discordRPC": "Discord Rich Presence",
|
||||
"settings.option.connectivity.playbackNotifications": "Уведомления о воспроизведении",
|
||||
"settings.option.connectivity.discordRPC": "Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.clientName": "Название клиента",
|
||||
"settings.option.connectivity.discordRPC.clearOnPause": "Отключать Discord Rich Presence на паузе",
|
||||
"settings.option.connectivity.discordRPC.hideButtons": "Скрыть кнопки в Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.hideTimestamp": "Скрыть отметку времени в Discord Rich Presence",
|
||||
"settings.option.connectivity.discordRPC.detailsFormat": "Формат деталей",
|
||||
"settings.option.connectivity.discordRPC.stateFormat": "Формат состояния",
|
||||
"settings.option.connectivity.discordRPC.reload": "Перезагрузить DiscordRPC",
|
||||
"settings.option.connectivity.discordRPC.reconnectedToUser": "DiscordRPC переподключен к пользователю: {{user}} ({{userid}})",
|
||||
"settings.option.connectivity.lastfmScrobble": "Last.fm cкробблинг",
|
||||
"settings.option.connectivity.lastfmScrobble.delay": "Частота скробблинга Last.fm (%)",
|
||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Включить Last.fm Сейчас играет",
|
||||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Удалять фит-исполнителей из названия песни (Last.fm)",
|
||||
"settings.option.connectivity.lastfmScrobble.filterLoop": "Фильтровать зацикленный трек (Last.fm)",
|
||||
"settings.option.connectivity.lastfmScrobble.filterLoop.description": "Предотвращение скробблинга или отображения зацикленных треков в списке «Сейчас исполняется» на Last.fm.",
|
||||
"settings.option.connectivity.lastfmScrobble.filterTypes": "Фильтровать медиа типы (Last.fm)",
|
||||
"settings.option.connectivity.lastfmScrobble.manualToken": "Ввести токен Last.fm вручную",
|
||||
"settings.notyf.connectivity.lastfmScrobble.connectError": "Last.fm Время соединения истекло",
|
||||
"settings.notyf.connectivity.lastfmScrobble.connectSuccess": "Last.fm Соединение успешно",
|
||||
"settings.notyf.connectivity.lastfmScrobble.connecting": "Подключение к Last.fm...",
|
||||
"settings.header.debug": "Debug",
|
||||
"settings.option.debug.copy_log": "Копировать логи в буфер обмена",
|
||||
"settings.option.debug.openAppData": "Открыть папку Cider",
|
||||
|
@ -405,12 +562,21 @@
|
|||
"settings.option.experimental.unknownPlugin.description": "Разрешить установку плагинов из репозиториев, отличных от репозитория плагинов Cider",
|
||||
"settings.option.experimental.compactUI": "Компактный интерфейс",
|
||||
"settings.option.window.close_button_hide": "Кнопка «Закрыть» скрывает приложение",
|
||||
"settings.option.window.maxElementScale": "Максимальный масштаб элемента",
|
||||
"settings.option.experimental.inline_playlists": "Встроенные плейлисты и альбомы",
|
||||
"settings.option.advanced.playlistTrackMapping": "Сканирование песен в плейлистах",
|
||||
"settings.option.advanced.playlistTrackMapping.description": "Включает глубокое сканирование плейлистов, чтобы определить, какие треки находятся в каких плейлистах. Время сборки кеша плейлиста может значительно увеличиться.",
|
||||
"settings.option.visual.transparent": "Прозрачность",
|
||||
"settings.option.visual.transparent.description": "Прозрачность окна (требуется поддержка Тем, требуется перезапуск)",
|
||||
"settings.option.visual.customAccentColor": "Пользовательский основной цвет",
|
||||
"settings.option.visual.accentColor": "Основной цвет",
|
||||
"settings.option.visual.purplePodcastPlaybackBar": "Фиолетовая полоса воспроизведения для подкастов",
|
||||
"settings.option.visual.windowColor": "Цветовой оттенок",
|
||||
"settings.header.visual.windowBackgroundStyle.color": "Цвет",
|
||||
"settings.header.advanced": "Расширенные",
|
||||
"settings.header.connect": "Sync",
|
||||
"settings.option.connect.link_account": "Enable Sync with Cider Connect",
|
||||
"settings.option.connect.link_account.description": "Linking your Discord account with Cider Connect allows you to store userdata including Settings, EQ's, and eventually more once finished. (Work In Progress)",
|
||||
"spatial.notTurnedOn": "Пространственное аудио отключено. Чтобы использовать, сначала включите его.",
|
||||
"spatial.spatialProperties": "Настройка пространственного аудио",
|
||||
"spatial.width": "Ширина",
|
||||
|
@ -443,5 +609,44 @@
|
|||
"share.platform.email": "Email",
|
||||
"share.platform.songLink": "Скопировать с song.link",
|
||||
"share.platform.clipboard": "Скопировать ссылку",
|
||||
"about.thanks": "Большое спасибо команде Cider Collective и всем нашим вкладчикам."
|
||||
"about.thanks": "Большое спасибо команде Cider Collective и всем нашим вкладчикам.",
|
||||
"oobe.yes": "Да",
|
||||
"oobe.no": "Нет",
|
||||
"oobe.next": "Следующий",
|
||||
"oobe.previous": "Предыдущий",
|
||||
"oobe.done": "Готово",
|
||||
"oobe.amupsell.title": "Прежде чем мы начнем",
|
||||
"oobe.amupsell.text": "Для Cider требуется действующая платная подписка на Apple Music\nCider не будет работать с тарифным планом Apple Music Voice или некоторыми рекламными пробными подписками. Если у вас уже есть соответствующая подписка Apple Music, нажмите «Далее», чтобы продолжить.",
|
||||
"oobe.amupsell.subscribeBtn": "Подпишитесь на Apple Music",
|
||||
"oobe.amupsell.explainBtn": "Объяснять",
|
||||
"oobe.amupsell.subscribeUrl": "https://apple.co/3MdqJVQ",
|
||||
"oobe.amupsell.amWebUrl": "https://beta.music.apple.com/",
|
||||
"oobe.amupsell.promoExplained": "Некоторые рекламные и пробные подписки на Apple Music за пределами США не имеют доступа к необходимым API-интерфейсам Apple Music Web Player, необходимым для работы Cider. Чтобы проверить, будет ли ваша действующая пробная версия работать с Cider, перейдите на страницу <a href='{{ amWebUrl }}'>{{ amWebUrl }}</a>, войдите в систему и попробуйте включить музыку. Если это работает, отлично! Однако вы готовы использовать Cider, если он не рассматривает возможность подписки на Apple Music здесь: <a href='{{ subscribeUrl }}'>{{ subscribeUrl }}</a>",
|
||||
"oobe.intro.title": "Добро пожаловать в Cider",
|
||||
"oobe.intro.subtitle": "",
|
||||
"oobe.intro.text": "Давайте настроим кое-что, чтобы вы могли использовать Cider, как хотите. Вы всегда можете изменить эти настройки позже.",
|
||||
"oobe.general.title": "Основные",
|
||||
"oobe.general.subtitle": "",
|
||||
"oobe.general.text": "",
|
||||
"oobe.audio.title": "Аудио",
|
||||
"oobe.audio.subtitle": "",
|
||||
"oobe.audio.text": "В Cider используется специально настроенный и разработанный звуковой стек, который обеспечивает богатое высококачественное звучание.\nВключая Cider Adrenaline, Atmosphere Realizer и Spatialized Audio.\nДля включения этой функции необходимо включить \"Расширенные функции звука\".\nВключение расширенного звука Функциональность даст вам доступ к этим улучшениям в Cider Audio Labs, которые можно найти в настройках приложения.",
|
||||
"oobe.audio.advancedFunctionality": "",
|
||||
"oobe.visual.title": "Visual",
|
||||
"oobe.visual.subtitle": "",
|
||||
"oobe.visual.text": "",
|
||||
"oobe.visual.layout.text": "В Cider есть два разных макета окна.\nMaverick – это макет, похожий на iTunes, с проигрывателем в верхней части окна.\nMojave – это новый вариант, созданный Cider Collective.\n\nВы можете изменить макет в любое время в настройках.",
|
||||
"oobe.visual.suggestingThemes": "Темы — отличный способ персонализировать ваш опыт. Вот некоторые из них, которые мы предлагаем: ",
|
||||
"oobe.visual.suggestingThemes.subtext": "(Эти темы будут загружены с GitHub)",
|
||||
"oobe.visual.suggestingThemes.default": "Cider",
|
||||
"oobe.visual.suggestingThemes.default.text": "Классическая тема Cider.",
|
||||
"oobe.visual.suggestingThemes.dark": "Dark",
|
||||
"oobe.visual.suggestingThemes.dark.text": "Darkness.",
|
||||
"oobe.visual.suggestingThemes.community1": "Groovy",
|
||||
"oobe.visual.suggestingThemes.community1.text": "Тема под влиянием WinUI",
|
||||
"oobe.visual.suggestingThemes.community2": "iTheme",
|
||||
"oobe.visual.suggestingThemes.community2.text": "The classic big fruit layout.",
|
||||
"oobe.visual.suggestingThemes.community3": "Dracula",
|
||||
"oobe.visual.suggestingThemes.community3.text": "Культовая цветовая гамма Дракулы.",
|
||||
"oobe.amsignin.title": ""
|
||||
}
|
||||
|
|
|
@ -563,6 +563,7 @@
|
|||
"settings.option.visual.customAccentColor": "Custom Accent Color",
|
||||
"settings.option.visual.accentColor": "Accent Color",
|
||||
"settings.option.visual.purplePodcastPlaybackBar": "Purple Playback Bar for Podcasts",
|
||||
"settings.option.visual.compactArtistHeader": "Compact Artist Header",
|
||||
"settings.option.visual.windowColor": "Window Tint Color",
|
||||
"settings.header.visual.windowBackgroundStyle.color": "Color Tint",
|
||||
"settings.header.advanced": "Advanced",
|
||||
|
|
|
@ -125,6 +125,7 @@ export class BrowserWindow {
|
|||
"components/hello-world",
|
||||
"components/inline-collection-list",
|
||||
"components/settings-window",
|
||||
"components/pagination",
|
||||
"components/settings-keybinds",
|
||||
"components/settings-themes",
|
||||
"components/settings-themes-github",
|
||||
|
|
|
@ -147,17 +147,22 @@ export class Store {
|
|||
},
|
||||
"libraryPrefs": {
|
||||
"songs": {
|
||||
"scroll": "infinite",
|
||||
"scroll": "paged",
|
||||
"sort": "name",
|
||||
"sortOrder": "asc",
|
||||
"size": "normal"
|
||||
},
|
||||
"albums": {
|
||||
"scroll": "paged",
|
||||
"sort": "name",
|
||||
"sortOrder": "asc",
|
||||
"viewAs": "covers"
|
||||
},
|
||||
"localPaths": []
|
||||
"playlists": {
|
||||
"scroll": "infinite"
|
||||
},
|
||||
"localPaths": [],
|
||||
"pageSize": 250
|
||||
},
|
||||
"audio": {
|
||||
"volume": 1,
|
||||
|
|
|
@ -64,6 +64,15 @@ export class wsapi {
|
|||
electron.ipcMain.on('wsapi-returnvolumeMax', (_event: any, arg: any) => {
|
||||
this.returnmaxVolume(JSON.parse(arg));
|
||||
});
|
||||
electron.ipcMain.on('wsapi-libraryStatus', (_event: any, inLibrary: boolean, rating: number) => {
|
||||
this.returnLibraryStatus(inLibrary, rating);
|
||||
});
|
||||
electron.ipcMain.on('wsapi-rate', (_event: any, kind: string, id: string, rating: number) => {
|
||||
this.returnRatingStatus(kind, id, rating);
|
||||
});
|
||||
electron.ipcMain.on('wsapi-change-library', (_event: any, kind: string, id: string, shouldAdd: boolean) => {
|
||||
this.returnLibraryChange(kind, id, shouldAdd);
|
||||
});
|
||||
this.wss = new WebSocketServer({
|
||||
port: this.port,
|
||||
perMessageDeflate: {
|
||||
|
@ -242,6 +251,15 @@ export class wsapi {
|
|||
case "get-currentmediaitem":
|
||||
this._win.webContents.executeJavaScript(`wsapi.getPlaybackState()`);
|
||||
break;
|
||||
case "library-status":
|
||||
this._win.webContents.executeJavaScript(`wsapi.getLibraryStatus("${data.type}", "${data.id}")`);
|
||||
break;
|
||||
case "rating":
|
||||
this._win.webContents.executeJavaScript(`wsapi.rate("${data.type}", "${data.id}", ${data.rating})`);
|
||||
break;
|
||||
case "change-library":
|
||||
this._win.webContents.executeJavaScript(`wsapi.changeLibrary("${data.type}", "${data.id}", ${data.add})`);
|
||||
break;
|
||||
case "quit":
|
||||
electron.app.quit();
|
||||
break;
|
||||
|
@ -317,4 +335,35 @@ export class wsapi {
|
|||
client.send(JSON.stringify(response));
|
||||
});
|
||||
}
|
||||
|
||||
returnLibraryStatus(inLibrary: boolean, rating: number) {
|
||||
const response: standardResponse = {
|
||||
status: 0, data: {
|
||||
inLibrary, rating
|
||||
}, message: "OK", type: "libraryStatus"
|
||||
}
|
||||
this.clients.forEach(function each(client: any) {
|
||||
client.send(JSON.stringify(response));
|
||||
});
|
||||
}
|
||||
|
||||
returnRatingStatus(kind: string, id: string, rating: number) {
|
||||
const response: standardResponse = {
|
||||
status: 0, data: { kind, id, rating },
|
||||
message: "OK", type: "rate"
|
||||
};
|
||||
this.clients.forEach(function each(client: any) {
|
||||
client.send(JSON.stringify(response));
|
||||
});
|
||||
}
|
||||
|
||||
returnLibraryChange(kind: string, id: string, shouldAdd: boolean) {
|
||||
const response: standardResponse = {
|
||||
status: 0, data: { kind, id, add: shouldAdd },
|
||||
message: "OK", type: "change-library"
|
||||
};
|
||||
this.clients.forEach(function each(client: any) {
|
||||
client.send(JSON.stringify(response));
|
||||
});
|
||||
}
|
||||
}
|
|
@ -50,7 +50,7 @@ const CiderAudio = {
|
|||
connectContext: function (mediaElem) {
|
||||
if (!CiderAudio.context) {
|
||||
CiderAudio.context = new window.AudioContext({ sampleRate: 96000, latencyHint: "playback"}); // Don't ever remove the sample rate arg. Ask Maikiwi.
|
||||
app.lyricOffset = CiderAudio.context.baseLatency
|
||||
app.lyricOffset = CiderAudio.context.baseLatency + CiderAudio.context.outputLatency
|
||||
}
|
||||
if (!CiderAudio.source) {
|
||||
CiderAudio.source = CiderAudio.context.createMediaElementSource(mediaElem);
|
||||
|
|
|
@ -2381,3 +2381,13 @@ input[type=checkbox][switch]:checked:active::before {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.listennow-chip.circle {
|
||||
border-radius: 50%;
|
||||
div {
|
||||
border-radius: 50%;
|
||||
}
|
||||
img {
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
|
@ -302,16 +302,23 @@
|
|||
min-width: 120px;
|
||||
}
|
||||
}
|
||||
|
||||
.categories{
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(200px, 1fr));
|
||||
gap: 1rem;
|
||||
}
|
||||
.cd-mediaitem-square.mediaitem-brick {
|
||||
width: 530px !important;
|
||||
|
||||
width: 100% !important;
|
||||
height: 168px;
|
||||
padding-block: 0.5rem;
|
||||
.artwork-container .artwork {
|
||||
height: 168px !important;
|
||||
width: 507px !important;
|
||||
width: 100% !important;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.info-rect{
|
||||
height: max-content;
|
||||
}
|
||||
.title {
|
||||
font-weight: bold;
|
||||
justify-content: left;
|
||||
|
@ -1233,6 +1240,10 @@
|
|||
min-height: 80vh;
|
||||
}
|
||||
|
||||
&.animated .artist-header-compact {
|
||||
min-height: 40vh;
|
||||
}
|
||||
|
||||
.artist-header {
|
||||
//background: linear-gradient(45deg, var(--keyColor), #0e0e0e);
|
||||
color: white;
|
||||
|
|
|
@ -16,7 +16,6 @@ const app = new Vue({
|
|||
drawertest: false,
|
||||
platform: "",
|
||||
mk: {},
|
||||
quickPlayQuery: "",
|
||||
pluginInstalled: false,
|
||||
pluginMenuEntries: [],
|
||||
lz: ipcRenderer.sendSync("get-i18n", "en_US"),
|
||||
|
@ -131,16 +130,13 @@ const app = new Vue({
|
|||
webremoteqr: "",
|
||||
mxmtoken: "",
|
||||
mkIsReady: false,
|
||||
playerReady: false,
|
||||
animateBackground: false,
|
||||
currentArtUrl: '',
|
||||
currentArtUrlRaw: '',
|
||||
lyricon: false,
|
||||
currentTrackID: '',
|
||||
currentTrackIDBG: '',
|
||||
lyrics: [],
|
||||
currentLyricsLine: 0,
|
||||
lyriccurrenttime: 0,
|
||||
richlyrics: [],
|
||||
lyricsMediaItem: {},
|
||||
lyricsDebug: {
|
||||
|
@ -280,12 +276,6 @@ const app = new Vue({
|
|||
}, false)
|
||||
},
|
||||
methods: {
|
||||
hotReload() {
|
||||
this.appVisible = false
|
||||
setTimeout(() => {
|
||||
this.appVisible = true
|
||||
}, 1000)
|
||||
},
|
||||
setWindowHash(route = "") {
|
||||
window.location.hash = `#${route}`;
|
||||
},
|
||||
|
@ -1023,7 +1013,7 @@ const app = new Vue({
|
|||
try {localStorage.setItem("playingBitrate", app.mk.nowPlayingItem.flavor)}
|
||||
catch(e) {}
|
||||
}
|
||||
if (!app.cfg.audio.normalization || app.cfg.advanced.AudioContext === true) { CiderAudio.hierarchical_loading(); }
|
||||
if (!app.cfg.audio.normalization && app.cfg.advanced.AudioContext === false) { CiderAudio.hierarchical_loading(); }
|
||||
|
||||
else {
|
||||
// get unencrypted audio previews to get SoundCheck's normalization tag
|
||||
|
@ -3945,7 +3935,7 @@ const app = new Vue({
|
|||
if (width) {
|
||||
width = parseInt(width * window.devicePixelRatio)
|
||||
}
|
||||
let newurl = `${url.replace('{w}', width ?? height).replace('{h}', height).replace('{f}', "webp").replace('{c}', ((width === 900) ? "sr" : "cc"))}`;
|
||||
let newurl = `${url.replace('{w}', width ?? height).replace('{h}', height).replace('{f}', "webp").replace('{c}', ((width === 900 || width === 380 || width === 600 ) ? "sr" : "cc"))}`;
|
||||
|
||||
if (newurl.includes("900x516")) {
|
||||
newurl = newurl.replace("900x516cc", "900x516sr").replace("900x516bb", "900x516sr");
|
||||
|
|
|
@ -118,6 +118,76 @@ const wsapi = {
|
|||
},
|
||||
getmaxVolume() {
|
||||
ipcRenderer.send('wsapi-returnvolumeMax',JSON.stringify(app.cfg.audio.maxVolume));
|
||||
},
|
||||
getLibraryStatus(kind, id) {
|
||||
if (kind === undefined || id === "no-id-found") return;
|
||||
|
||||
let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind;
|
||||
app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/?ids[${truekind}]=${id}`, {
|
||||
relate: "library",
|
||||
fields: "inLibrary"
|
||||
}).then(data => {
|
||||
const res = data.data.data[0];
|
||||
const inLibrary = res && res.attributes && res.attributes.inLibrary;
|
||||
|
||||
app.getRating({ type: truekind, id: id }).then(rating => {
|
||||
ipcRenderer.send('wsapi-libraryStatus', inLibrary, rating);
|
||||
})
|
||||
})
|
||||
},
|
||||
rate(kind, id, rating) {
|
||||
if (kind === undefined || id === "no-id-found") return;
|
||||
|
||||
let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind;
|
||||
|
||||
if (rating === 0) {
|
||||
app.mk.api.v3.music(`/v1/me/ratings/${truekind}/${id}`, {}, {
|
||||
fetchOptions: {
|
||||
method: "DELETE",
|
||||
}
|
||||
}).then(function () {
|
||||
ipcRenderer.send('wsapi-rate', kind, id, rating);
|
||||
})
|
||||
} else {
|
||||
app.mk.api.v3.music(`/v1/me/ratings/${truekind}/${id}`, {}, {
|
||||
fetchOptions: {
|
||||
method: "PUT",
|
||||
body: JSON.stringify({
|
||||
"type": "rating",
|
||||
"attributes": {
|
||||
"value": rating
|
||||
}
|
||||
})
|
||||
}
|
||||
}).then(function () {
|
||||
ipcRenderer.send('wsapi-rate', kind, id, rating);
|
||||
})
|
||||
}
|
||||
},
|
||||
changeLibrary(kind, id, shouldAdd) {
|
||||
if (shouldAdd) {
|
||||
app.addToLibrary(id);
|
||||
ipcRenderer.send('wsapi-change-library', kind, id, shouldAdd);
|
||||
} else {
|
||||
let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind;
|
||||
|
||||
app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/?ids[${truekind}]=${id}`, {
|
||||
relate: "library",
|
||||
fields: "inLibrary"
|
||||
})
|
||||
.then(res => {
|
||||
res = res.data.data[0]
|
||||
if (res && res.relationships && res.relationships.library && res.relationships.library.data) {
|
||||
const item = res.relationships.library.data[0];
|
||||
|
||||
if (item) {
|
||||
app.removeFromLibrary(kind, item.id)
|
||||
}
|
||||
|
||||
ipcRenderer.send('wsapi-change-library', kind, id, shouldAdd);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1815,7 +1815,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
|||
position : absolute;
|
||||
z-index : 1000;
|
||||
opacity : 1;
|
||||
background : rgba(30, 30, 30, 0.8);
|
||||
background-image: linear-gradient(180deg, transparent, rgba(30, 30, 30, 0.8));
|
||||
justify-content: center;
|
||||
align-items : center;
|
||||
display : none;
|
||||
|
|
|
@ -2,8 +2,18 @@
|
|||
<div v-observe-visibility="{callback: visibilityChanged}">
|
||||
<template v-if="isVisible && recom.attributes.display.kind != 'MusicSuperHeroShelf'">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h3 @click="navigateContent(recom?.relationships['primary-content']?.data[0] ?? recom?.attributes?.title?.contentIds[0] ?? '')" style="width: fit-content;" :class="{'item-navigate' : (recom?.attributes?.title?.contentIds?.length ?? 0) > 0 | recom?.relationships['primary-content']?.data?.length > 0}">
|
||||
<div class="col" v-if="recom?.relationships['primary-content']?.data?.length > 0" style="display: flex; margin-block:1rem;">
|
||||
<div @click="navigateContent(recom?.relationships['primary-content']?.data[0] ?? recom?.attributes?.title?.contentIds[0] ?? '')" class="listennow-chip" style="height: 40px;width: 40px;align-self: center;margin-right: 10px;" :class="{ 'circle': recom?.relationships['primary-content']?.data[0]?.type == 'artists' }">
|
||||
<mediaitem-artwork v-if="recom?.relationships['primary-content']?.data[0]?.attributes?.artwork != null" :url="recom?.relationships['primary-content']?.data[0]?.attributes?.artwork?.url" :size="100"></mediaitem-artwork>
|
||||
</div>
|
||||
<div @click="navigateContent(recom?.relationships['primary-content']?.data[0] ?? recom?.attributes?.title?.contentIds[0] ?? '')" style="width: fit-content;" :class="{'item-navigate' : (recom?.attributes?.title?.contentIds?.length ?? 0) > 0 | recom?.relationships['primary-content']?.data?.length > 0}">
|
||||
<span style="opacity: 0.5; font-weight: bold;"> {{ recom.attributes.titleWithoutName.stringForDisplay }} </span>
|
||||
<h3 style="margin-block: 0"> {{ recom?.relationships['primary-content']?.data[0].attributes?.name ?? recom.attributes.title.stringForDisplay.replace(recom.attributes.titleWithoutName.stringForDisplay, '') }}</h3>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col" v-else style="display: flex; margin-block:1rem;">
|
||||
<h3 @click="navigateContent(recom?.relationships['primary-content']?.data[0] ?? recom?.attributes?.title?.contentIds[0] ?? '')" style="width: fit-content; margin-block:0;" :class="{'item-navigate' : (recom?.attributes?.title?.contentIds?.length ?? 0) > 0 | recom?.relationships['primary-content']?.data?.length > 0}">
|
||||
{{ recom.attributes.title ? recom.attributes.title.stringForDisplay : " "}}</h3>
|
||||
</div>
|
||||
<div class="col-auto cider-flex-center" v-if="recom.relationships.contents.data.length >= 10">
|
||||
|
|
|
@ -92,6 +92,11 @@
|
|||
type: Boolean,
|
||||
default: false,
|
||||
required: false
|
||||
},
|
||||
imageformat: {
|
||||
type: String,
|
||||
default: 'cc',
|
||||
required: false
|
||||
},
|
||||
'contextExt': { type: Object, required: false },
|
||||
},
|
||||
|
@ -242,11 +247,11 @@
|
|||
getArtworkUrl(size = -1, includeUrl = false) {
|
||||
let artwork = this.item?.attributes?.artwork ? this.item?.attributes?.artwork?.url : (this.item?.attributes?.editorialArtwork?.subscriptionCover?.url ?? '')
|
||||
if (size != -1) {
|
||||
artwork = artwork.replace('{w}', size).replace('{h}', size).replace('{f}', "webp").replace('{c}', ((size === 900) ? "sr" : "cc"))
|
||||
artwork = artwork.replace('{w}', size).replace('{h}', size).replace('{f}', "webp").replace('{c}', (size === 900 || size === 380 || size === 600 ) ? "sr" : this.imageformat);
|
||||
}
|
||||
switch (this.kind) {
|
||||
case "385":
|
||||
artwork = this.item.attributes.editorialArtwork?.subscriptionHero?.url ?? (this.item.attributes.artwork?.url ?? (this.item.relationships?.contents?.data[0]?.attributes?.editorialArtwork?.subscriptionHero?.url ?? ''))
|
||||
artwork = (this.item.attributes.editorialArtwork?.subscriptionHero?.url ?? (this.item.attributes.artwork?.url ?? (this.item.relationships?.contents?.data[0]?.attributes?.editorialArtwork?.subscriptionHero?.url ?? ''))).replace('{c}', (size === 900 || size === 380 || size === 600 ) ? "sr" : this.imageformat);
|
||||
break;
|
||||
}
|
||||
if (!includeUrl) {
|
||||
|
|
175
src/renderer/views/components/pagination.ejs
Normal file
175
src/renderer/views/components/pagination.ejs
Normal file
|
@ -0,0 +1,175 @@
|
|||
<script type="text/x-template" id="pagination">
|
||||
<div class="row" style="margin-bottom: 16px" v-if="!isInfinite">
|
||||
<button
|
||||
class="col md-btn page-btn"
|
||||
:disabled="effectivePage === 1"
|
||||
@click="goToPage(1)"
|
||||
>
|
||||
<img class="md-ico-first"/>
|
||||
</button>
|
||||
<button
|
||||
class="col md-btn page-btn prev"
|
||||
:disabled="effectivePage === 1"
|
||||
@click="goToPrevious()"
|
||||
>
|
||||
<img class="md-ico-prev"/>
|
||||
</button>
|
||||
<button
|
||||
:class="`col md-btn page-btn${ isCurrentPage(page) ? ' md-btn-primary': ''}`"
|
||||
@click="goToPage(page)"
|
||||
v-for="page in pagesToShow"
|
||||
>{{ page }}</button>
|
||||
<button
|
||||
class="col md-btn page-btn next"
|
||||
:disabled="effectivePage === numPages"
|
||||
@click="goToNext()"
|
||||
>
|
||||
<img class="md-ico-next"/>
|
||||
</button>
|
||||
<button
|
||||
class="col md-btn page-btn last"
|
||||
:disabled="effectivePage === numPages"
|
||||
@click="goToEnd()"
|
||||
>
|
||||
<img class="md-ico-last"/>
|
||||
</button>
|
||||
<div class="col page-btn" style="min-width: 12em;">
|
||||
<input type="number" min="1" :max="numPages" :value="effectivePage" @change="changePage" />
|
||||
<span>/ {{ numPages }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<script>
|
||||
Vue.component('pagination', {
|
||||
template: "#pagination",
|
||||
props: {
|
||||
'length': { type: Number, required: true },
|
||||
'pageSize': { type: Number, required: true },
|
||||
'scroll': { type: String, required: true },
|
||||
'scrollSelector': { type: String, required: true }
|
||||
},
|
||||
data: function () {
|
||||
return { currentPage: 1 }
|
||||
},
|
||||
mounted() {
|
||||
document.querySelector(this.scrollSelector)
|
||||
.addEventListener("scroll", this.handleScroll)
|
||||
},
|
||||
destroyed() {
|
||||
document.querySelector(this.scrollSelector)
|
||||
.removeEventListener("scroll", this.handleScroll)
|
||||
},
|
||||
watch: {
|
||||
'length': function () {
|
||||
if (this.isInfinite) {
|
||||
// If a search reduces the number of things to show, we want to limit
|
||||
// the number of songs shown as well. This is to prevent you scrolling
|
||||
// to load your entire library, searching for one song, and then having
|
||||
// th re-render the entire library
|
||||
if (this.currentPage > this.numPages) {
|
||||
this.currentPage = this.numPages;
|
||||
this.$emit("onRangeChange", this.currentRange);
|
||||
}
|
||||
} else {
|
||||
this.$emit("onRangeChange", this.currentRange);
|
||||
}
|
||||
},
|
||||
'scroll': function () {
|
||||
// When changing modes, set the page to 1. This is primarily to
|
||||
// prevent going to a high page (e.g., 50) and then switching to infinite
|
||||
// and showing 12.5k songs
|
||||
this.currentPage = 1;
|
||||
this.$emit("onRangeChange", this.currentRange);
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isInfinite: function () {
|
||||
return this.scroll === "infinite"
|
||||
},
|
||||
currentRange: function () {
|
||||
if (this.isInfinite) {
|
||||
return [0, this.currentPage * this.pageSize];
|
||||
} else {
|
||||
const startingPage = Math.min(this.numPages, this.currentPage);
|
||||
|
||||
return [
|
||||
(startingPage - 1) * this.pageSize,
|
||||
startingPage * this.pageSize
|
||||
];
|
||||
}
|
||||
},
|
||||
effectivePage: function () {
|
||||
return Math.min(this.currentPage, this.numPages)
|
||||
},
|
||||
numPages: function () {
|
||||
return Math.ceil(this.length / this.pageSize) || 1;
|
||||
},
|
||||
pagesToShow: function () {
|
||||
let start = this.currentPage - 2;
|
||||
let end = this.currentPage + 2;
|
||||
|
||||
if (start < 1) {
|
||||
end += (1 - start);
|
||||
start = 1;
|
||||
}
|
||||
|
||||
const endDifference = end - this.numPages;
|
||||
if (endDifference > 0) {
|
||||
end = this.numPages;
|
||||
start = Math.max(1, start - endDifference);
|
||||
}
|
||||
|
||||
const array = [];
|
||||
for (let idx = start; idx <= end; idx++) {
|
||||
array.push(idx);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// Infinite Scrolling
|
||||
handleScroll: function (event) {
|
||||
if (this.isInfinite &&
|
||||
this.currentPage < this.numPages &&
|
||||
event.target.scrollTop >= event.target.scrollHeight - event.target.clientHeight) {
|
||||
this.currentPage += 1;
|
||||
this.$emit("onRangeChange", this.currentRange);
|
||||
}
|
||||
},
|
||||
// Pagination
|
||||
isCurrentPage: function (idx) {
|
||||
return idx === this.currentPage ||
|
||||
(idx === this.numPages && this.currentPage > this.numPages);
|
||||
},
|
||||
changePage: function (event) {
|
||||
const value = event.target.valueAsNumber;
|
||||
|
||||
if (!isNaN(value) && value >= 1 && value <= this.numPages) {
|
||||
this.currentPage = value;
|
||||
this.$emit("onRangeChange", this.currentRange);
|
||||
}
|
||||
},
|
||||
goToPage: function (page) {
|
||||
this.currentPage = page;
|
||||
this.$emit("onRangeChange", this.currentRange);
|
||||
},
|
||||
goToPrevious: function () {
|
||||
if (this.currentPage > 1) {
|
||||
this.currentPage -= 1;
|
||||
this.$emit("onRangeChange", this.currentRange);
|
||||
}
|
||||
},
|
||||
goToNext: function () {
|
||||
if (this.currentPage < this.numPages) {
|
||||
this.currentPage += 1;
|
||||
this.$emit("onRangeChange", this.currentRange);
|
||||
}
|
||||
},
|
||||
goToEnd: function () {
|
||||
this.currentPage = this.numPages;
|
||||
this.$emit("onRangeChange", this.currentRange);
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
|
@ -547,6 +547,14 @@
|
|||
:disabled="app.cfg.visual.customAccentColor" switch/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('settings.option.visual.compactArtistHeader')}}
|
||||
</div>
|
||||
<div class="md-option-segment_auto">
|
||||
<input type="checkbox" v-model="app.cfg.visual.compactArtistHeader" switch/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('settings.option.visual.hardwareAcceleration')}}<br>
|
||||
|
@ -1247,6 +1255,27 @@
|
|||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="md-option-line">
|
||||
<div class="md-option-segment">
|
||||
{{$root.getLz('settings.option.general.pagination')}}<br>
|
||||
<small>
|
||||
{{$root.getLz('settings.options.general.pagination.description')}}<br>
|
||||
</small>
|
||||
</div>
|
||||
<div class="md-option-segment md-option-segment_auto">
|
||||
<label>
|
||||
<select class="md-select" style="width:180px;"
|
||||
v-model.number="$root.cfg.libraryPrefs.pageSize" type="number">
|
||||
<option value="50">50</option>
|
||||
<option value="100">100</option>
|
||||
<option value="250">250</option>
|
||||
<option value="500">500</option>
|
||||
<option value="1000">1000</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<script type="text/x-template" id="cider-artist">
|
||||
<div class="content-inner artist-page"
|
||||
:class="[(data.attributes.editorialVideo && (data.attributes.editorialVideo.motionArtistWide16x9 || data.attributes.editorialVideo.motionArtistFullscreen16x9) || hasHero()) ? 'animated' : '']">
|
||||
<div class="artist-header" :key="data.id" v-observe-visibility="{callback: isHeaderVisible}">
|
||||
<div :class="['artist-header', { 'artist-header-compact': app.cfg.visual.compactArtistHeader }]" :key="data.id" v-observe-visibility="{callback: isHeaderVisible}">
|
||||
<animatedartwork-view
|
||||
:priority="true"
|
||||
v-if="hasAnimated()"
|
||||
|
|
|
@ -107,6 +107,12 @@
|
|||
<img :class="(!inLibrary) ? 'md-ico-add' : 'md-ico-remove'">
|
||||
{{app.getLz('term.confirm')}}
|
||||
</button>
|
||||
<select v-if="shouldPaginate" class="md-select" v-model="prefs.scroll">
|
||||
<optgroup :label="app.getLz('term.scroll')">
|
||||
<option value="infinite">{{app.getLz('term.scroll.infinite')}}</option>
|
||||
<option value="paged">{{app.getLz('term.scroll.paged').replace("${songsPerPage}", pageSize)}}</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
<div style="display: flex; float: right;">
|
||||
<button :style="{ 'background': '#' + hasHeroObject()?.textColor4 ?? '' }" :class="['search-btn', showSearch ? 'active' : '']" @click="toggleSearch()" :aria-label="showSearch ? app.getLz('term.hideSearch') : app.getLz('term.showSearch')">
|
||||
<svg-icon :style="{ 'width': '15px', 'background-color': '#' + hasHeroObject()?.bgColor ?? '' }" :url="showSearch ? './assets/search-alt.svg' : './assets/search.svg'">
|
||||
|
@ -161,6 +167,12 @@
|
|||
<img :class="(!inLibrary) ? 'md-ico-add' : 'md-ico-remove'">
|
||||
{{app.getLz('term.confirm')}}
|
||||
</button>
|
||||
<select v-if="shouldPaginate" class="md-select" v-model="prefs.scroll">
|
||||
<optgroup :label="app.getLz('term.scroll')">
|
||||
<option value="infinite">{{app.getLz('term.scroll.infinite')}}</option>
|
||||
<option value="paged">{{app.getLz('term.scroll.paged').replace("${songsPerPage}", pageSize)}}</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto cider-flex-center">
|
||||
|
@ -172,7 +184,7 @@
|
|||
</div>
|
||||
<div class="playlist-body scrollbody">
|
||||
<b-tabs pills class="track-pills pilldim fancy-pills" align="center" content-class="mt-3" :nav-wrapper-class="navClass(data)">
|
||||
<b-tab :title="$root.getLz('term.tracks')">
|
||||
<b-tab :title="$root.getLz('term.tracks')" id="songList">
|
||||
<div @wheel="minClass(true)" @scroll="minClass(true)">
|
||||
<div class="">
|
||||
<div style="width:100%" @click="minClass(true)">
|
||||
|
@ -186,18 +198,27 @@
|
|||
class="search-input"
|
||||
ref="search-bar">
|
||||
</div>
|
||||
<pagination
|
||||
v-if="shouldPaginate"
|
||||
style="margin-top: 10px"
|
||||
:length="hasNestedPlaylist ? nestedDisplayLength: displayListing.length"
|
||||
:pageSize="pageSize"
|
||||
:scroll="prefs.scroll"
|
||||
scrollSelector="#songList"
|
||||
@onRangeChange="onRangeChange"
|
||||
/>
|
||||
<draggable :options="{disabled: !editing}"
|
||||
v-model="data.relationships.tracks.data" @start="drag=true"
|
||||
@end="drag=false;put()">
|
||||
<template v-if="!hasNestedPlaylist">
|
||||
<mediaitem-list-item :item="item" :parent="getItemParent(data)" :index="index"
|
||||
<mediaitem-list-item :item="item" :parent="getItemParent(data)" :index="index + start"
|
||||
:showIndex="true"
|
||||
:showIndexPlaylist="(data.attributes.playParams?.kind ?? data.type ?? '').includes('playlist')"
|
||||
:context-ext="buildContextMenu()"
|
||||
v-for="(item,index) in displayListing"></mediaitem-list-item>
|
||||
v-for="(item,index) in currentSlice"></mediaitem-list-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div v-for="disc in nestedPlaylist">
|
||||
<div v-for="disc in nestedSlices">
|
||||
<div class="playlist-time">{{($root.getLz("term.discNumber") ??
|
||||
"").replace("${discNumber}",disc.disc)}}
|
||||
</div>
|
||||
|
@ -278,6 +299,7 @@
|
|||
props: ["data"],
|
||||
|
||||
data: function () {
|
||||
const pageSize = this.$root.cfg.libraryPrefs.pageSize;
|
||||
return {
|
||||
editorialNotesExpanded: false,
|
||||
drag: false,
|
||||
|
@ -291,6 +313,7 @@
|
|||
headerVisible: true,
|
||||
useArtistChip: false,
|
||||
nestedPlaylist: [],
|
||||
nestedDisplayLength: 0,
|
||||
classes: [],
|
||||
editing: false,
|
||||
inPlaylist: false,
|
||||
|
@ -298,6 +321,10 @@
|
|||
displayListing: [],
|
||||
hasNestedPlaylist: false,
|
||||
showSearch: false,
|
||||
pageSize: pageSize,
|
||||
start: 0,
|
||||
end: pageSize,
|
||||
prefs: this.$root.cfg.libraryPrefs.playlists
|
||||
}
|
||||
},
|
||||
mounted: function () {
|
||||
|
@ -346,7 +373,48 @@
|
|||
deep: true
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
currentSlice() {
|
||||
return this.displayListing.slice(this.start, this.end);
|
||||
},
|
||||
nestedSlices() {
|
||||
if (this.shouldPaginate) {
|
||||
let songsSeen = 0;
|
||||
const discs = [];
|
||||
|
||||
for (const disc of this.nestedPlaylist) {
|
||||
songsSeen += disc.tracks.length;
|
||||
|
||||
if (songsSeen >= this.end) {
|
||||
discs.push({
|
||||
disc: disc.disc,
|
||||
tracks: disc.tracks.slice(0, this.end + disc.tracks.length - songsSeen)
|
||||
})
|
||||
break;
|
||||
} else if (songsSeen > this.start) {
|
||||
discs.push({
|
||||
disc: disc.disc,
|
||||
tracks: disc.tracks.slice(this.start - songsSeen)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return discs;
|
||||
} else {
|
||||
return this.nestedPlaylist
|
||||
}
|
||||
},
|
||||
shouldPaginate() {
|
||||
const result = this.data.relationships.tracks.data.length > this.pageSize
|
||||
console.log(result)
|
||||
return result
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onRangeChange(newRange) {
|
||||
this.start = newRange[0];
|
||||
this.end = newRange[1];
|
||||
},
|
||||
isAlbum() {
|
||||
return (this.data.attributes?.playParams?.kind ?? this.data.type ?? '').includes('album')
|
||||
},
|
||||
|
@ -372,6 +440,8 @@
|
|||
},
|
||||
generateNestedPlaylist(songlists) {
|
||||
this.nestedPlaylist = [];
|
||||
this.nestedDisplayLength = songlists.length;
|
||||
|
||||
if (this.data?.type?.includes("album")) {
|
||||
let discs = songlists.map(x => {
|
||||
return x.attributes.discNumber
|
||||
|
|
|
@ -46,17 +46,33 @@
|
|||
</optgroup>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col">
|
||||
<select class="md-select" v-model="prefs.scroll">
|
||||
<optgroup :label="app.getLz('term.scroll')">
|
||||
<option value="infinite">{{app.getLz('term.scroll.infinite')}}</option>
|
||||
<option value="paged">{{app.getLz('term.scroll.paged').replace("${songsPerPage}", pageSize)}}</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<pagination
|
||||
:length="app.library.albums.displayListing.length
|
||||
"
|
||||
:pageSize="pageSize"
|
||||
:scroll="prefs.scroll"
|
||||
scrollSelector="#app-content"
|
||||
@onRangeChange="onRangeChange"
|
||||
/>
|
||||
<div class="well">
|
||||
<div class="albums-square-container">
|
||||
<div>
|
||||
<mediaitem-square v-if="prefs.viewAs == 'covers'" :size="'300'" :item="item" v-for="item in library.albums.displayListing">
|
||||
<mediaitem-square v-if="prefs.viewAs == 'covers'" :size="'300'" :item="item" v-for="item in currentSlice">
|
||||
</mediaitem-square>
|
||||
</div>
|
||||
</div>
|
||||
<mediaitem-list-item v-if="prefs.viewAs == 'list'" :show-duration="false" :show-meta-data="true" :show-library-status="false" :item="item" v-for="item in library.albums.displayListing">
|
||||
<mediaitem-list-item v-if="prefs.viewAs == 'list'" :show-duration="false" :show-meta-data="true" :show-library-status="false" :item="item" v-for="item in currentSlice">
|
||||
</mediaitem-list-item>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -65,21 +81,34 @@
|
|||
Vue.component('cider-library-albums', {
|
||||
template: '#cider-library-albums',
|
||||
data: function () {
|
||||
const pageSize = this.$root.cfg.libraryPrefs.pageSize;
|
||||
return {
|
||||
library: this.$root.library,
|
||||
mediaItemSize: "compact",
|
||||
prefs: this.$root.cfg.libraryPrefs.albums,
|
||||
app : this.$root
|
||||
app: this.$root,
|
||||
pageSize: pageSize,
|
||||
start: 0,
|
||||
end: pageSize
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.$root.getLibraryAlbumsFull(null, 1);
|
||||
this.$root.getAlbumSort();
|
||||
this.$root.searchLibraryAlbums(1);
|
||||
this.$root.getLibrarySongsFull() ;
|
||||
this.$root.getLibrarySongsFull();
|
||||
this.$root.searchLibraryAlbums(1);
|
||||
},
|
||||
computed: {
|
||||
currentSlice: function () {
|
||||
return this.library.albums.displayListing.slice(this.start, this.end);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onRangeChange: function (newRange) {
|
||||
this.start = newRange[0];
|
||||
this.end = newRange[1];
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
|
@ -64,45 +64,13 @@
|
|||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="margin-bottom: 16px" v-if="!isInfinite">
|
||||
<button
|
||||
class="col md-btn page-btn"
|
||||
:disabled="currentPage === 1"
|
||||
@click="goToPage(1)"
|
||||
>
|
||||
<img class="md-ico-first"/>
|
||||
</button>
|
||||
<button
|
||||
class="col md-btn page-btn prev"
|
||||
:disabled="currentPage === 1"
|
||||
@click="goToPrevious()"
|
||||
>
|
||||
<img class="md-ico-prev"/>
|
||||
</button>
|
||||
<button
|
||||
:class="`col md-btn page-btn${ isCurrentPage(page) ? ' md-btn-primary': ''}`"
|
||||
@click="goToPage(page)"
|
||||
v-for="page in pagesToShow"
|
||||
>{{ page }}</button>
|
||||
<button
|
||||
class="col md-btn page-btn next"
|
||||
:disabled="currentPage === numPages"
|
||||
@click="goToNext()"
|
||||
>
|
||||
<img class="md-ico-next"/>
|
||||
</button>
|
||||
<button
|
||||
class="col md-btn page-btn last"
|
||||
:disabled="currentPage === numPages"
|
||||
@click="goToEnd()"
|
||||
>
|
||||
<img class="md-ico-last"/>
|
||||
</button>
|
||||
<div class="col page-btn" style="min-width: 12em;">
|
||||
<input type="number" min="1" :max="numPages" :value="currentPage" @change="changePage" />
|
||||
<span>/ {{ numPages }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<pagination
|
||||
:length="library.songs.displayListing.length"
|
||||
:pageSize="pageSize"
|
||||
:scroll="prefs.scroll"
|
||||
scrollSelector="#app-content"
|
||||
@onRangeChange="onRangeChange"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div v-if="library.songs.downloadState == 3">Library contains no songs.</div>
|
||||
|
@ -119,125 +87,31 @@
|
|||
Vue.component('cider-library-songs', {
|
||||
template: '#cider-library-songs',
|
||||
data: function () {
|
||||
const pageSize = this.$root.cfg.libraryPrefs.pageSize;
|
||||
return {
|
||||
// currentPage is oneIndexed
|
||||
currentPage: 1,
|
||||
library: this.$root.library,
|
||||
mediaItemSize: "compact",
|
||||
pageSize: 250,
|
||||
prefs: this.$root.cfg.libraryPrefs.songs,
|
||||
app: this.$root
|
||||
app: this.$root,
|
||||
pageSize: pageSize,
|
||||
start: 0,
|
||||
end: pageSize
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
document.querySelector("#app-content")
|
||||
.addEventListener("scroll", this.handleScroll)
|
||||
this.$root.getLibrarySongsFull()
|
||||
},
|
||||
destroyed() {
|
||||
document.querySelector("#app-content")
|
||||
.removeEventListener("scroll", this.handleScroll)
|
||||
},
|
||||
watch: {
|
||||
'library.songs.displayListing.length': function () {
|
||||
if (this.isInfinite) {
|
||||
// If a search reduces the number of things to show, we want to limit
|
||||
// the number of songs shown as well. This is to prevent you scrolling
|
||||
// to load your entire library, searching for one song, and then having
|
||||
// th re-render the entire library
|
||||
if (this.currentPage > this.numPages) {
|
||||
this.currentPage = this.numPages;
|
||||
}
|
||||
}
|
||||
},
|
||||
'prefs.scroll': function () {
|
||||
// When changing modes, set the page to 1. This is primarily to
|
||||
// prevent going to a high page (e.g., 50) and then switching to infinite
|
||||
// and showing 12.5k songs
|
||||
this.currentPage = 1;
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isInfinite: function () {
|
||||
return this.prefs.scroll === "infinite"
|
||||
},
|
||||
currentSlice: function () {
|
||||
if (this.isInfinite) {
|
||||
return this.library.songs.displayListing.slice(
|
||||
0, this.currentPage * this.pageSize
|
||||
);
|
||||
} else {
|
||||
const startingPage = Math.min(this.numPages, this.currentPage);
|
||||
|
||||
return this.library.songs.displayListing.slice(
|
||||
(startingPage - 1) * this.pageSize,
|
||||
startingPage * this.pageSize
|
||||
);
|
||||
}
|
||||
},
|
||||
numPages: function () {
|
||||
return Math.ceil(this.library.songs.displayListing.length / this.pageSize) || 1;
|
||||
},
|
||||
pagesToShow: function () {
|
||||
let start = this.currentPage - 2;
|
||||
let end = this.currentPage + 2;
|
||||
|
||||
if (start < 1) {
|
||||
end += (1 - start);
|
||||
start = 1;
|
||||
}
|
||||
|
||||
const endDifference = end - this.numPages;
|
||||
if (endDifference > 0) {
|
||||
end = this.numPages;
|
||||
start = Math.max(1, start - endDifference);
|
||||
}
|
||||
|
||||
const array = [];
|
||||
for (let idx = start; idx <= end; idx++) {
|
||||
array.push(idx);
|
||||
}
|
||||
return array;
|
||||
return this.library.songs.displayListing.slice(this.start, this.end);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// Infinite Scrolling
|
||||
handleScroll: function (event) {
|
||||
if (this.isInfinite &&
|
||||
this.currentPage < this.numPages &&
|
||||
event.target.scrollTop >= event.target.scrollHeight - event.target.clientHeight) {
|
||||
this.currentPage += 1;
|
||||
}
|
||||
onRangeChange: function (newRange) {
|
||||
this.start = newRange[0];
|
||||
this.end = newRange[1];
|
||||
},
|
||||
// Pagination
|
||||
isCurrentPage: function (idx) {
|
||||
return idx === this.currentPage ||
|
||||
(idx === this.numPages && this.currentPage > this.numPages);
|
||||
},
|
||||
changePage: function (event) {
|
||||
const value = event.target.valueAsNumber;
|
||||
|
||||
if (!isNaN(value) && value >= 1 && value <= this.numPages) {
|
||||
this.currentPage = value;
|
||||
}
|
||||
},
|
||||
goToPage: function (page) {
|
||||
this.currentPage = page;
|
||||
},
|
||||
goToPrevious: function () {
|
||||
if (this.currentPage > 1) {
|
||||
this.currentPage -= 1;
|
||||
}
|
||||
},
|
||||
goToNext: function () {
|
||||
if (this.currentPage < this.numPages) {
|
||||
this.currentPage += 1;
|
||||
}
|
||||
},
|
||||
goToEnd: function () {
|
||||
this.currentPage = this.numPages;
|
||||
},
|
||||
// Miscellaneous
|
||||
play: function () {
|
||||
function shuffleArray(array) {
|
||||
for (var i = array.length - 1; i > 0; i--) {
|
||||
|
|
|
@ -119,7 +119,7 @@
|
|||
</div>
|
||||
</template>
|
||||
</div>
|
||||
<div v-else>
|
||||
<div v-else >
|
||||
<div v-if="categoriesReady || getCategories()">
|
||||
<div>
|
||||
<div class="col" v-if="categoriesView != null && categoriesView != [] && categoriesView[0].attributes != null && categoriesView[0].attributes.title != null">
|
||||
|
@ -131,7 +131,9 @@
|
|||
<!-- <mediaitem-square :kind="'385'" size="600" v-for="item in recentlyPlayed.limit(10)" :item="item" :imagesize="800"></mediaitem-square>-->
|
||||
<h3>{{categoriesView[0].attributes.title.stringForDisplay ?? ""}}</h3>
|
||||
</div>
|
||||
<mediaitem-square :kind="'385'" size="600"
|
||||
</div>
|
||||
<div class="categories">
|
||||
<mediaitem-square :kind="'385'" :imageformat="'bb'" size="600"
|
||||
:item="item ? (item.attributes.kind ? item : ((item.relationships && item.relationships.contents ) ? item.relationships.contents.data[0] : item)) : []"
|
||||
:imagesize="800"
|
||||
v-for="item of getFlattenedCategories()">
|
||||
|
|
|
@ -24,7 +24,11 @@ var app = new Vue({
|
|||
lyricsScrollingBlocked: false,
|
||||
queue: {},
|
||||
lowerPanelState: "controls",
|
||||
userInteraction: false
|
||||
userInteraction: false,
|
||||
status: {
|
||||
inLibrary: false,
|
||||
rating: 0
|
||||
}
|
||||
},
|
||||
queue: {
|
||||
temp: []
|
||||
|
@ -246,6 +250,17 @@ var app = new Vue({
|
|||
id: id
|
||||
}))
|
||||
},
|
||||
getLibraryStatus(type, id) {
|
||||
if (type !== undefined && id !== "no-id-found") {
|
||||
socket.send(JSON.stringify({
|
||||
action: "library-status",
|
||||
type: type,
|
||||
id: id
|
||||
}))
|
||||
} else {
|
||||
this.player.status = {};
|
||||
}
|
||||
},
|
||||
searchQuery() {
|
||||
if (this.search.query.length == 0) {
|
||||
this.search.state = 0;
|
||||
|
@ -412,8 +427,8 @@ var app = new Vue({
|
|||
this.getQueue()
|
||||
},
|
||||
queueMove(evt) {
|
||||
console.log(evt)
|
||||
console.log(`new: ${evt.moved.newIndex} old: ${evt.moved.oldIndex}`)
|
||||
// console.log(evt)
|
||||
// console.log(`new: ${evt.moved.newIndex} old: ${evt.moved.oldIndex}`)
|
||||
this.queue.temp.splice(evt.moved.newIndex, 0, this.queue.temp.splice(evt.moved.oldIndex, 1)[0])
|
||||
socket.send(JSON.stringify({
|
||||
action: "queue-move",
|
||||
|
@ -557,11 +572,9 @@ var app = new Vue({
|
|||
}
|
||||
|
||||
socket.onmessage = (e) => {
|
||||
console.log(e.data)
|
||||
const response = JSON.parse(e.data);
|
||||
switch (response.type) {
|
||||
default: console.log(response);
|
||||
break;
|
||||
default: break;
|
||||
case "musickitapi.search":
|
||||
self.showArtist(response.data["artists"][0]["id"]);
|
||||
break;
|
||||
|
@ -577,6 +590,7 @@ var app = new Vue({
|
|||
}
|
||||
break;
|
||||
case "queue":
|
||||
// console.log(response.data);
|
||||
self.player.queue = response.data;
|
||||
self.queue.temp = response.data["_queueItems"];
|
||||
self.$forceUpdate()
|
||||
|
@ -601,6 +615,27 @@ var app = new Vue({
|
|||
case "maxVolume":
|
||||
this.player.maxVolume = response.data;
|
||||
break;
|
||||
case "libraryStatus":
|
||||
this.player.status = response.data;
|
||||
break;
|
||||
case "rate":
|
||||
var params = this.player.currentMediaItem.playParams;
|
||||
if (params && params.id === response.data.id && params.kind === response.data.kind) {
|
||||
this.player.status = {
|
||||
rating: response.data.rating,
|
||||
inLibrary: this.player.status.inLibrary
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "change-library":
|
||||
var params = this.player.currentMediaItem.playParams;
|
||||
if (params && params.id === response.data.id && params.kind === response.data.kind) {
|
||||
this.player.status = {
|
||||
rating: this.player.status.rating,
|
||||
inLibrary: response.data.add
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
// console.log(e.data);
|
||||
}
|
||||
|
@ -608,6 +643,8 @@ var app = new Vue({
|
|||
updatePlaybackState(mediaitem) {
|
||||
var lyricsDisplayed = this.screen == "lyrics" || this.player.lowerPanelState == "lyrics"
|
||||
if (this.player.currentMediaItem["isrc"] != mediaitem["isrc"]) {
|
||||
this.getLibraryStatus(mediaitem.playParams.kind, mediaitem.playParams.id)
|
||||
|
||||
if (lyricsDisplayed) {
|
||||
this.getLyrics()
|
||||
}
|
||||
|
@ -617,6 +654,39 @@ var app = new Vue({
|
|||
}
|
||||
this.player.currentMediaItem = mediaitem
|
||||
},
|
||||
openSongMenu() {
|
||||
const params = this.player.currentMediaItem.playParams;
|
||||
|
||||
if (params) {
|
||||
this.getLibraryStatus(params.kind, params.id);
|
||||
}
|
||||
|
||||
this.player.songActions = true;
|
||||
},
|
||||
rate(rating) {
|
||||
const params = this.player.currentMediaItem.playParams;
|
||||
|
||||
if (params && params.kind !== undefined && params.id !== "no-id-found") {
|
||||
socket.send(JSON.stringify({
|
||||
action: "rating",
|
||||
type: params.kind,
|
||||
id: params.id,
|
||||
rating: rating
|
||||
}))
|
||||
}
|
||||
},
|
||||
toLibrary(shouldAdd) {
|
||||
const params = this.player.currentMediaItem.playParams;
|
||||
|
||||
if (params && params.kind !== undefined && params.id !== "no-id-found") {
|
||||
socket.send(JSON.stringify({
|
||||
action: "change-library",
|
||||
type: params.kind,
|
||||
id: params.id,
|
||||
add: shouldAdd
|
||||
}))
|
||||
}
|
||||
},
|
||||
quit() {
|
||||
socket.send(JSON.stringify({
|
||||
action: "quit"
|
||||
|
|
|
@ -838,6 +838,15 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
|||
cursor: pointer;
|
||||
}
|
||||
|
||||
.context-menu .context-menu-item:disabled {
|
||||
cursor: default;
|
||||
filter: brightness(125%);
|
||||
}
|
||||
|
||||
.context-menu .context-menu-item:active:disabled {
|
||||
filter: brightness(125%);
|
||||
}
|
||||
|
||||
.context-menu .context-menu-item:active {
|
||||
filter: brightness(75%);
|
||||
}
|
||||
|
|
|
@ -130,8 +130,8 @@
|
|||
{{ player.currentMediaItem.artistName }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto nopadding player-more-container" v-if="false" style="">
|
||||
<button @click="player.songActions = true;" class="player-more-button">...</button>
|
||||
<div class="col-auto nopadding player-more-container" style="">
|
||||
<button @click="openSongMenu()" class="player-more-button">...</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -525,7 +525,8 @@
|
|||
|
||||
</div>
|
||||
<div class="md-body context-menu-body">
|
||||
<button class="context-menu-item context-menu-item--left" v-if="false">
|
||||
<button class="context-menu-item context-menu-item--left" v-if="!player.status.inLibrary"
|
||||
@click="toLibrary(true)">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
Add To Library
|
||||
|
@ -535,7 +536,19 @@
|
|||
</div>
|
||||
</div>
|
||||
</button>
|
||||
<button class="context-menu-item context-menu-item--left" v-if="false">
|
||||
<button class="context-menu-item context-menu-item--left" v-if="player.status.inLibrary"
|
||||
@click="toLibrary(false)">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
Remove From Library
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
➖
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
<button class="context-menu-item context-menu-item--left" :disabled="player.status.rating === 1"
|
||||
@click="rate(1)">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
Love
|
||||
|
@ -545,7 +558,29 @@
|
|||
</div>
|
||||
</div>
|
||||
</button>
|
||||
<button class="context-menu-item context-menu-item--left">
|
||||
<button class="context-menu-item context-menu-item--left" :disabled="player.status.rating === 0"
|
||||
@click="rate(0)">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
Remove Rating
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
❌
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
<button class="context-menu-item context-menu-item--left"
|
||||
:disabled="player.status.rating === -1" @click="rate(-1)">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
Dislike
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
👎
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
<button class="context-menu-item context-menu-item--left" v-if="false">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
Share
|
||||
|
@ -555,7 +590,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</button>
|
||||
<button class="context-menu-item context-menu-item--left">
|
||||
<button class="context-menu-item context-menu-item--left" v-if="false">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
Open in {{ musicAppVariant() }}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"electronVersion": "19.0.3",
|
||||
"electronVersion": "19.0.8",
|
||||
"electronDownload": {
|
||||
"version": "19.0.3+wvcus",
|
||||
"version": "20.0.0-beta.11+wvcus",
|
||||
"mirror": "https://github.com/castlabs/electron-releases/releases/download/v"
|
||||
},
|
||||
"appId": "cider",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue