Compare commits

..

10 Commits

Author SHA1 Message Date
exttex 53f6b760fe 1.1.24 - FLAC for HiFi users 2021-07-25 16:20:11 +02:00
exttex 6302f54fbd Revert to encrypted 2021-07-19 21:14:54 +02:00
exttex 5b3185c0f4 1.1.21 2021-07-02 19:29:57 +02:00
exttex 9974c1ea63 1.1.20 - self describing code (jk read telegram changelog) 2021-06-01 18:24:44 +02:00
exttex 15f7638854 1.1.19 - minor changes 2021-04-16 21:17:24 +02:00
exttex 85f293893a 1.1.18 - imagine useful commit messages 2021-04-01 19:47:42 +02:00
exttex 984a5d9296 New git 2021-03-16 20:47:07 +01:00
exttex 227f22180a 1.1.17 2021-02-26 16:09:32 +01:00
exttex 025569bbb7 1.1.16 2021-02-07 15:20:15 +01:00
exttex babaa68d91 1.1.15 - importer fixes, queue virtual scroller 2021-01-26 20:13:01 +01:00
72 changed files with 21407 additions and 3460 deletions

3
.gitignore vendored
View File

@ -7,3 +7,6 @@ app/client/node_modules/
electron_dist/ electron_dist/
freezer-*.tgz freezer-*.tgz
translations.zip translations.zip
package-lock.json
app/package-lock.json
app/client/package-lock.json

View File

@ -2,7 +2,7 @@ const {app, BrowserWindow, ipcMain, Tray, Menu, session, dialog, shell, nativeTh
const {createServer} = require('./src/server'); const {createServer} = require('./src/server');
const path = require('path'); const path = require('path');
const arg = require('arg'); const arg = require('arg');
const { exit } = require('process'); const { exit, platform } = require('process');
const packageJson = require('./package.json'); const packageJson = require('./package.json');
const chalk = require('chalk'); const chalk = require('chalk');
const {Settings} = require('./src/settings'); const {Settings} = require('./src/settings');
@ -117,13 +117,14 @@ async function createWindow() {
minHeight: 600, minHeight: 600,
resizable: true, resizable: true,
autoHideMenuBar: true, autoHideMenuBar: true,
frame: false, frame: settings.nativeTopBar,
icon: assetPath("icon.png"), icon: assetPath("icon.png"),
title: 'Freezer', title: 'Freezer',
webPreferences: { webPreferences: {
enableRemoteModule: true, enableRemoteModule: true,
nodeIntegration: true, nodeIntegration: true,
devTools: true devTools: true,
contextIsolation: false
} }
}); });
@ -174,6 +175,10 @@ if (!singleInstanceLock) {
//Create window //Create window
app.on('ready', async () => { app.on('ready', async () => {
//No mac
if (platform == 'darwin')
process.exit(-1);
await startServer(); await startServer();
//Server mode //Server mode
if (args['--server']) return; if (args['--server']) return;

File diff suppressed because it is too large Load Diff

View File

@ -11,15 +11,15 @@
}, },
"dependencies": { "dependencies": {
"@mdi/font": "^5.9.55", "@mdi/font": "^5.9.55",
"axios": "^0.19.2", "axios": "^0.21.1",
"roboto-fontface": "*", "roboto-fontface": "*",
"socket.io-client": "^4.1.2",
"vue": "^2.6.12", "vue": "^2.6.12",
"vue-esc": "^3.0.1", "vue-esc": "^3.0.1",
"vue-i18n": "^8.22.4", "vue-i18n": "^8.22.4",
"vue-router": "^3.4.9", "vue-router": "^3.4.9",
"vue-socket.io": "^3.0.10",
"vuedraggable": "^2.24.3", "vuedraggable": "^2.24.3",
"vuetify": "^2.4.2" "vuetify": "^2.5.1"
}, },
"devDependencies": { "devDependencies": {
"@intlify/vue-i18n-loader": "^1.0.0", "@intlify/vue-i18n-loader": "^1.0.0",
@ -33,7 +33,7 @@
"vue-cli-plugin-i18n": "~1.0.1", "vue-cli-plugin-i18n": "~1.0.1",
"vue-cli-plugin-vuetify": "^2.0.9", "vue-cli-plugin-vuetify": "^2.0.9",
"vue-template-compiler": "^2.6.12", "vue-template-compiler": "^2.6.12",
"vuetify-loader": "^1.3.0" "vuetify-loader": "^1.7.2"
}, },
"eslintConfig": { "eslintConfig": {
"root": true, "root": true,

View File

@ -1,12 +1,13 @@
<template> <template>
<div> <div :class='{"enable-bgi": $root.settings.backgroundImage}'>
<v-app v-esc='closePlayer'> <v-app v-esc='closePlayer'>
<v-system-bar <v-system-bar
:color='$root.settings.lightTheme ? "#f5f5f5" : "#121212"' :color='$root.settings.lgbtMode ? null : $root.settings.lightTheme ? "#f5f5f5" : "#121212"'
app app
class='topbar' class='topbar'
v-if='$root.settings.electron' :class='{"lgbt-header": $root.settings.lgbtMode}'
v-if='$root.settings.electron && !$root.settings.nativeTopBar'
height='28'> height='28'>
<v-spacer></v-spacer> <v-spacer></v-spacer>
@ -18,8 +19,15 @@
</v-system-bar> </v-system-bar>
<!-- Fullscreen player overlay --> <!-- Fullscreen player overlay -->
<v-overlay :value='showPlayer' opacity='1.00' z-index="100"> <v-overlay
<FullscreenPlayer @close='closePlayer' @volumeChange='volume = $root.volume'></FullscreenPlayer> :dark='!$root.settings.lightTheme'
:light='$root.settings.lightTheme' :value='showPlayer'
:opacity='$root.settings.backgroundImage ? 0.0 : 1.0'
z-index="100"
:color='$root.settings.lightTheme ? "#ffffff" : "#212121"'>
<img :src='backgroundSrc' class='wallpaper-overlay' v-if='$root.settings.backgroundImage'>
<FullscreenPlayer @close='closePlayer' @volumeChange='volume = $root.volume'></FullscreenPlayer>
</v-overlay> </v-overlay>
<!-- Drawer/Navigation --> <!-- Drawer/Navigation -->
@ -149,7 +157,7 @@
</v-list> </v-list>
</v-navigation-drawer> </v-navigation-drawer>
<v-app-bar app dense color='#1e1e1e'> <v-app-bar app dense :color='$root.settings.lightTheme ? null : "#1e1e1e"'>
<v-btn icon @click='previous'> <v-btn icon @click='previous'>
<v-icon>mdi-arrow-left</v-icon> <v-icon>mdi-arrow-left</v-icon>
@ -172,6 +180,7 @@
:loading='searchLoading' :loading='searchLoading'
@keyup='search' @keyup='search'
ref='searchBar' ref='searchBar'
:background-color='$root.settings.lightTheme ? "#ffffff00" : "#00000000"'
v-model='searchQuery' v-model='searchQuery'
:search-input.sync='searchInput' :search-input.sync='searchInput'
:items='suggestions' :items='suggestions'
@ -181,12 +190,12 @@
</v-app-bar> </v-app-bar>
<!-- Main --> <!-- Main -->
<img :src='backgroundSrc' class='wallpaper' v-if='$root.settings.backgroundImage'>
<v-main> <v-main>
<v-container <v-container
class='overflow-y-auto' class='overflow-y-auto'
fluid :class='{"main-container": $root.topBar, "main-container-notop": !$root.topBar}'
style='height: calc(100vh - 140px);'> :fluid='fluidContainer'>
<keep-alive include='Search,PlaylistPage,HomeScreen,DeezerPage'> <keep-alive include='Search,PlaylistPage,HomeScreen,DeezerPage'>
<router-view></router-view> <router-view></router-view>
</keep-alive> </keep-alive>
@ -295,8 +304,12 @@
<style lang='scss'> <style lang='scss'>
@import 'styles/scrollbar.scss'; @import 'styles/scrollbar.scss';
.v-navigation-drawer__content { .v-navigation-drawer__content {
overflow-y: hidden !important; overflow-y: hidden !important;
} }
.enable-bgi {
@import 'styles/bg-image.scss';
}
</style> </style>
<style lang='scss' scoped> <style lang='scss' scoped>
.seekbar { .seekbar {
@ -312,6 +325,33 @@
.topbarbutton { .topbarbutton {
-webkit-app-region: no-drag; -webkit-app-region: no-drag;
} }
.wallpaper {
width: 100vw;
height: 100vh;
z-index: -100;
position: absolute;
object-fit: fill;
}
.wallpaper-overlay {
width: 100vw;
height: 100vh;
z-index: -100;
position: absolute;
object-fit: fill;
}
.main-container {
height: calc(100vh - 140px);
}
.main-container-notop {
height: calc(100vh - 118px);
}
.lgbt-header button {
color: #000 !important;
}
</style> </style>
<script> <script>
@ -335,7 +375,8 @@ export default {
cancelSuggestions: false, cancelSuggestions: false,
globalSnackbar: false, globalSnackbar: false,
version: null, version: null,
updateAvailable: false updateAvailable: false,
fluidContainer: window.innerWidth < 1300
} }
}, },
methods: { methods: {
@ -451,7 +492,13 @@ export default {
if (p > 100) if (p > 100)
p = 100; p = 100;
return Math.round(p); return Math.round(p);
} },
//Get background src
backgroundSrc() {
if (this.$root.settings.backgroundImage && this.$root.settings.backgroundImage.startsWith("http"))
return this.$root.settings.backgroundImage;
return process.env.NODE_ENV === 'development' ? "http://localhost:10069/background" : "/background";
},
}, },
async mounted() { async mounted() {
//Scroll on volume //Scroll on volume
@ -478,7 +525,7 @@ export default {
// /search // /search
document.addEventListener('keypress', (e) => { document.addEventListener('keypress', (e) => {
if (e.keyCode != 47) return; if (e.key != '/' || e.target.nodeName == "INPUT") return;
this.$refs.searchBar.focus(); this.$refs.searchBar.focus();
setTimeout(() => { setTimeout(() => {
if (this.searchQuery.startsWith('/')) this.searchQuery = this.searchQuery.substring(1); if (this.searchQuery.startsWith('/')) this.searchQuery = this.searchQuery.substring(1);
@ -489,6 +536,11 @@ export default {
if (this.$root.loadingPromise) await this.$root.loadingPromise; if (this.$root.loadingPromise) await this.$root.loadingPromise;
this.volume = this.$root.volume; this.volume = this.$root.volume;
//Limit content width on large displays
window.addEventListener('resize', () => {
this.fluidContainer = window.innerWidth < 1300;
});
//Check for update //Check for update
this.checkUpdate(); this.checkUpdate();
}, },

View File

@ -25,7 +25,7 @@
dense dense
:label='$t("Search")' :label='$t("Search")'
solo solo
class='mx-2 mt-1' class='mx-2'
v-model='searchQuery' v-model='searchQuery'
></v-text-field> ></v-text-field>
</div> </div>

View File

@ -25,7 +25,7 @@
dense dense
:label='$t("Search")' :label='$t("Search")'
solo solo
class='mx-2 mt-1' class='mx-2'
v-model='searchQuery' v-model='searchQuery'
></v-text-field> ></v-text-field>
</div> </div>

View File

@ -27,7 +27,7 @@
dense dense
:label='$t("Search")' :label='$t("Search")'
solo solo
class='mx-2 mt-1' class='mx-2'
v-model='searchQuery' v-model='searchQuery'
></v-text-field> ></v-text-field>
</div> </div>

View File

@ -19,7 +19,7 @@
dense dense
:label='$t("Search")' :label='$t("Search")'
solo solo
class='mx-2 mt-1' class='mx-2'
v-model='searchQuery' v-model='searchQuery'
></v-text-field> ></v-text-field>
</div> </div>
@ -69,7 +69,6 @@ export default {
}, },
methods: { methods: {
scroll(event) { scroll(event) {
console.log(event);
let loadOffset = event.target.scrollHeight - event.target.offsetHeight - 150; let loadOffset = event.target.scrollHeight - event.target.offsetHeight - 150;
if (event.target.scrollTop > loadOffset) { if (event.target.scrollTop > loadOffset) {
if (!this.loading) this.load(); if (!this.loading) this.load();

View File

@ -9,7 +9,7 @@
v-for='(lyric, index) in lyrics.lyrics' v-for='(lyric, index) in lyrics.lyrics'
:key='lyric.offset' :key='lyric.offset'
class='my-6 mx-4 pa-2 rounded' class='my-6 mx-4 pa-2 rounded'
:class='{"grey darken-3": playingNow(index)}' :class='{"grey darken-3": (playingNow(index) && !$root.settings.lightTheme), "grey lighten-1": (playingNow(index) && $root.settings.lightTheme)}'
@click='seekTo(index)'> @click='seekTo(index)'>
<span <span
class='my-8' class='my-8'

View File

@ -26,9 +26,13 @@
</v-list-item-action> </v-list-item-action>
<v-list-item-action> <v-list-item-action>
<!-- Quick add to playlist --> <!-- Quick add to playlist -->
<v-btn @click.stop='popup = true' icon> <v-btn @click.stop='popup = true' icon v-if='!removeQueue'>
<v-icon>mdi-playlist-plus</v-icon> <v-icon>mdi-playlist-plus</v-icon>
</v-btn> </v-btn>
<!-- Remove from queue -->
<v-btn @click.stop='$emit("removeQueue")' icon v-if='removeQueue' color='red'>
<v-icon>mdi-close</v-icon>
</v-btn>
</v-list-item-action> </v-list-item-action>
<v-list-item-action> <v-list-item-action>
<!-- Context menu --> <!-- Context menu -->
@ -186,6 +190,10 @@ export default {
ripple: { ripple: {
type: Boolean, type: Boolean,
default: true default: true
},
removeQueue: {
type: Boolean,
default: false
} }
}, },
methods: { methods: {

View File

@ -11,6 +11,6 @@ export default new Vuetify({
dark: true, dark: true,
options: { options: {
customProperties: true customProperties: true
} },
} }
}); });

View File

@ -137,5 +137,35 @@
"Content country": "بلد المحتوى", "Content country": "بلد المحتوى",
"Website": "الموقع الالكتروني", "Website": "الموقع الالكتروني",
"Visit website": "زيارة الموقع الإلكتروني", "Visit website": "زيارة الموقع الإلكتروني",
"New update available:": "تحديث جديد متوفر:" "New update available:": "تحديث جديد متوفر:",
"Shuffle": "خلط عشوائي",
"Download album cover": "تنزيل صورة الألبوم",
"Art Resolution": "دقة صورة الالبوم",
"Public": "عامة",
"Private": "خاص",
"Collaborative": "التعاونيه",
"Edit playlist": "تعديل قائمة التشغيل",
"Save": "حفظ",
"Edit": "حرّر",
"Importer": "المستورد",
"Enter URL": "أدخل الرابط",
"Currently only Spotify is supported and limited to 100 tracks.": "حاليا فقط يدعم سبوتيقاي ومحدود إلى 100 اغنية.",
"Import into playlist": "استيراد إلى قائمة التشغيل",
"Keep sidebar open": "إبقاء الشريط الجانبي مفتوح",
"WARNING: Might require reload to work properly!": "تحذير: قد تتطلب إعادة تحميل للعمل بشكل صحيح!",
"An error occured, URL might be invalid or unsupported.": "حدث خطأ، قد يكون الرابط غير صالح أو غير مدعوم.",
"Top tracks": "افضل الاغاني",
"Show all top tracks": "عرض كل الاغاني المفضلة",
"Singles": "الأغاني",
"Album:": "ألبوم:",
"Artists:": "الفنانين:",
"Yes": "نعم",
"No": "لا",
"Download Filename": "تنزيل اسم الملف",
"Language": "اللغة",
"Background Image": "صورة الخلفية",
"Enter URL or absolute path. WARNING: Requires reload!": "أدخل عنوان URL أو المسار المطلق. تحذير: يتطلب إعادة التحميل!",
"LGBT Mode": "وضع LGBT",
"Native top bar": "الشريط العلوي الأصلي",
"Requires restart of Freezer!": "يتطلب إعادة تشغيل فريزر!"
} }

View File

@ -1,141 +1,171 @@
{ {
"Home": "Home", "Home": "Aniciu",
"Browse": "Browse", "Browse": "Restolar",
"Library": "Library", "Library": "Biblioteca",
"Tracks": "Tracks", "Tracks": "Pistes",
"Playlists": "Playlists", "Playlists": "Llistes",
"Albums": "Albums", "Albums": "Álbumes",
"Artists": "Artists", "Artists": "Artistes",
"More": "More", "More": "Más",
"Settings": "Settings", "Settings": "Axustes",
"Downloads": "Downloads", "Downloads": "Descargues",
"Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", "Search or paste Deezer URL. Use / to quickly focus.": "Busca o apiega una URL de Deezer. Usa «/» pa enfocar aína esta barra.",
"Play": "Play", "Play": "Reproducir",
"Add to library": "Add to library", "Add to library": "Amestar a la biblioteca",
"Download": "Download", "Download": "Baxar",
"fans": "fans", "fans": "siguidores",
"tracks": "tracks", "tracks": "pistes",
"Quality": "Quality", "Quality": "Calidá",
"Estimated size:": "Estimated size:", "Estimated size:": "Tamañu estimáu:",
"Start downloading": "Start downloading", "Start downloading": "Aniciar la descarga",
"Cancel": "Cancel", "Cancel": "Encaboxar",
"Stream logging is disabled!": "Stream logging is disabled!", "Stream logging is disabled!": "¡El rexistru de tresmisiones ta desactiváu!",
"Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", "Enable it in settings for history to work properly.": "Actívalu nos axustes pa que l'historial funcione afayadizamente.",
"History": "History", "History": "Historial",
"Create new playlist": "Create new playlist", "Create new playlist": "Crear una llista",
"TRACKS": "TRACKS", "TRACKS": "PISTES",
"Sort by": "Sort by", "Sort by": "Ordenar por",
"Date Added": "Date Added", "Date Added": "Data d'amiestu",
"Name (A-Z)": "Name (A-Z)", "Name (A-Z)": "Nome (A-Z)",
"Artist (A-Z)": "Artist (A-Z)", "Artist (A-Z)": "Artista (A-Z)",
"Album (A-Z)": "Album (A-Z)", "Album (A-Z)": "Álbum (A-Z)",
"Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", "Error loading lyrics or lyrics not found!": "¡Hebo un fallu al cargar la lletra o nun s'atopó!",
"Create playlist": "Create playlist", "Create playlist": "Creación d'una llista",
"Create": "Create", "Create": "Crear",
"Add to playlist": "Add to playlist", "Add to playlist": "Amestar a una llista",
"Create new": "Create new", "Create new": "Crear una",
"Remove": "Remove", "Remove": "Quitar",
"Play next": "Play next", "Play next": "Reproducir darréu",
"Add to queue": "Add to queue", "Add to queue": "Amestar a la cola",
"Remove from library": "Remove from library", "Remove from library": "Quitar de la biblioteca",
"Remove from playlist": "Remove from playlist", "Remove from playlist": "Quitar de la llista",
"Play track mix": "Play track mix", "Play track mix": "Reproducir el mecíu de pistes",
"Go to": "Go to", "Go to": "Dir a",
"Track Mix": "Track Mix", "Track Mix": "Mecíu de pistes",
"Duration": "Duration", "Duration": "Duración",
"Released": "Released", "Released": "Data de llanzamientu",
"Disk": "Disk", "Disk": "Discu",
"albums": "albums", "albums": "álbumes",
"Play top": "Play top", "Play top": "Reproducir lo destacao",
"Radio": "Radio", "Radio": "Radio",
"Show all albums": "Show all albums", "Show all albums": "Amosar tolos álbumes",
"Show all singles": "Show all singles", "Show all singles": "Amosar tolos singles",
"Show more": "Show more", "Show more": "Amosar más",
"Downloaded": "Downloaded", "Downloaded": "Baxó",
"Queue": "Queue", "Queue": "Cola",
"Total": "Total", "Total": "En total",
"Stop": "Stop", "Stop": "Parar",
"Start": "Start", "Start": "Aniciar",
"Show folder": "Show folder", "Show folder": "Amosar la carpeta",
"Clear queue": "Clear queue", "Clear queue": "Llimpiar la cola",
"Playing from": "Playing from", "Playing from": "Reproduciendo dende",
"Info": "Info", "Info": "Información",
"Lyrics": "Lyrics", "Lyrics": "Lletra",
"Track number": "Track number", "Track number": "Númberu de la pista",
"Disk number": "Disk number", "Disk number": "Númberu del discu",
"Explicit": "Explicit", "Explicit": "+18",
"Source": "Source", "Source": "Orixe",
"ID": "ID", "ID": "ID",
"Error logging in!": "Error logging in!", "Error logging in!": "¡Hebo un fallu al aniciar sesión!",
"Please try again later, or try another account.": "Please try again later, or try another account.", "Please try again later, or try another account.": "Volvi tentalo dempués o prueba con otra cuenta, por favor.",
"Logout": "Logout", "Logout": "Zarrar sesión",
"Login using browser": "Login using browser", "Login using browser": "Aniciar sesión col restolador",
"Please login using your Deezer account:": "Please login using your Deezer account:", "Please login using your Deezer account:": "Usa la to cuenta de Deezer…",
"...or paste your ARL/Token below:": "...or paste your ARL/Token below:", "...or paste your ARL/Token below:": "…o apiega la ARL/pase embaxo:",
"ARL/Token": "ARL/Token", "ARL/Token": "ARL/Pase",
"Login": "Login", "Login": "Aniciar sesión",
"By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", "By using this program, you disagree with Deezer's ToS.": "Col usu d'esti programa refugues los Términos del Serviciu de Deezer.",
"Only in Electron version!": "Only in Electron version!", "Only in Electron version!": "¡Namás na versión d'Electron!",
"Search results for:": "Search results for:", "Search results for:": "Resultaos pa la busca de:",
"Error loading data!": "Error loading data!", "Error loading data!": "¡Hebo un fallu al cargar los datos!",
"Try again later!": "Try again later!", "Try again later!": "¡Volvi tentalo dempués!",
"Search": "Search", "Search": "Buscar",
"Streaming Quality": "Streaming Quality", "Streaming Quality": "Calidá de les tresmisiones",
"Download Quality": "Download Quality", "Download Quality": "Calidá de les descargues",
"Downloads Directory": "Downloads Directory", "Downloads Directory": "Direutoriu de les descargues",
"Simultaneous downloads": "Simultaneous downloads", "Simultaneous downloads": "Descargues simultánees",
"Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", "Always show download confirm dialog before downloading.": "Amosar siempres el diálogu de confirmación de les descargues enantes de baxar.",
"Show download dialog": "Show download dialog", "Show download dialog": "Amosar el diálogu de descarga",
"Create folders for artists": "Create folders for artists", "Create folders for artists": "Crear carpetes pa los artistes",
"Create folders for albums": "Create folders for albums", "Create folders for albums": "Crear carpetes pa los álbumes",
"Download lyrics": "Download lyrics", "Download lyrics": "Baxar les lletres",
"Variables": "Variables", "Variables": "Variables",
"UI": "UI", "UI": "IU",
"Show autocomplete in search": "Show autocomplete in search", "Show autocomplete in search": "Amosar el completáu automáticu na busca",
"Integrations": "Integrations", "Integrations": "Integraciones",
"This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", "This allows listening history, flow and recommendations to work properly.": "Esto permite que l'historial, fluxu y recomendaciones d'escuches funcionen afayadizamente.",
"Log track listens to Deezer": "Log track listens to Deezer", "Log track listens to Deezer": "Rexistrar les pistes sentíes en Deezer",
"Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", "Connect your LastFM account to allow scrobbling.": "Conecta la to cuenta de LastFM pa permitir la sincronización de pistes.",
"Login with LastFM": "Login with LastFM", "Login with LastFM": "Aniciar sesión en LastFM",
"Disconnect LastFM": "Disconnect LastFM", "Disconnect LastFM": "Desconectase de LastFM",
"Requires restart to apply!": "Requires restart to apply!", "Requires restart to apply!": "¡Rique'l reaniciu p'aplicar!",
"Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", "Enable Discord Rich Presence, requires restart to toggle!": "Activa la presencia arriquecida de Discord. ¡Rique reaniciar l'aplicación p'alternar!",
"Discord Rich Presence": "Discord Rich Presence", "Discord Rich Presence": "Presencia arriquecida de Discord",
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", "Enable Discord join button for syncing tracks, requires restart to toggle!": "Activa'l botón de xunión de Discord pa sincronizar pistes. ¡Rique reaniciar l'aplicación p'alternar!",
"Discord Join Button": "Discord Join Button", "Discord Join Button": "Botón de xunión de Discord",
"Other": "Other", "Other": "Otres opciones",
"Minimize to tray": "Minimize to tray", "Minimize to tray": "Minimizar a la bandexa",
"Don't minimize to tray": "Don't minimize to tray", "Don't minimize to tray": "Nun minimiza a la bandexa",
"Close on exit": "Close on exit", "Close on exit": "Zarrar al colar",
"Settings saved!": "Settings saved!", "Settings saved!": "¡Guardáronse los axustes!",
"Available only in Electron version!": "Available only in Electron version!", "Available only in Electron version!": "¡Namás disponible na versión d'Electron!",
"Crossfade (ms)": "Crossfade (ms)", "Crossfade (ms)": "Transición (ms)",
"Select primary color": "Select primary color", "Select primary color": "Esbillar el color primariu",
"Light theme": "Light theme", "Light theme": "Estilu claru",
"Create folders for playlists": "Create folders for playlists", "Create folders for playlists": "Crear carpetes pa les llistes",
"About": "About", "About": "Tocante a",
"Links:": "Links:", "Links:": "Enllaces:",
"Telegram Releases": "Telegram Releases", "Telegram Releases": "Llanzamientos en Telegram",
"Telegram Group": "Telegram Group", "Telegram Group": "Grupu de Telegram",
"Discord": "Discord", "Discord": "Discord",
"Telegram Android Group": "Telegram Android Group", "Telegram Android Group": "Grupu d'Android en Telegram",
"Credits:": "Credits:", "Credits:": "Creitos:",
"Agree": "Agree", "Agree": "Acepto",
"Dismiss": "Dismiss", "Dismiss": "Escartar",
"Added to playlist!": "Added to playlist!", "Added to playlist!": "¡Amestóse a la llista!",
"Added to library!": "Added to library!", "Added to library!": "¡Amestóse a la biblioteca!",
"Removed from library!": "Removed from library!", "Removed from library!": "¡Quitóse de la biblioteca!",
"Removed from playlist!": "Removed from playlist!", "Removed from playlist!": "¡Quitóse de la llista!",
"Playlist deleted!": "Playlist deleted!", "Playlist deleted!": "¡Desanicióse la llista!",
"Delete": "Delete", "Delete": "Desaniciar",
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?", "Are you sure you want to delete this playlist?": "¿De xuru que quies desaniciar esta llista?",
"Force white tray icon": "Force white tray icon", "Force white tray icon": "Forciar l'iconu de la bandexa blancu",
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.", "Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Forcia l'iconu (blancu) predetermináu de la bandexa si nun se detecta correutamente l'estilu. Rique'l reaniciu.",
"Share": "Share", "Share": "Compartir",
"Settings quality": "Settings quality", "Settings quality": "Axustes de la calidá",
"Content language": "Content language", "Content language": "Llingua del conteníu",
"Content country": "Content country", "Content country": "País del conteníu",
"Website": "Website", "Website": "Sitiu web",
"Visit website": "Visit website", "Visit website": "Visitar el sitiu web",
"New update available:": "New update available:" "New update available:": "Anovamientu disponible:",
"Shuffle": "Al debalu",
"Download album cover": "Baxar la portada de los álbumes",
"Art Resolution": "Resolución",
"Public": "Pública",
"Private": "Privada",
"Collaborative": "En comuña",
"Edit playlist": "Edición d'una llista",
"Save": "Guardar",
"Edit": "Editar",
"Importer": "Importador",
"Enter URL": "Introduz una URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Anguaño namás se sofita Spotify y con una llende de 100 pistes.",
"Import into playlist": "Importar a una llista",
"Keep sidebar open": "Caltener la barra llateral abierta",
"WARNING: Might require reload to work properly!": "ALVERTENCIA: ¡Reanicia l'aplicación pa que funcione afayadizamente!",
"An error occured, URL might be invalid or unsupported.": "Asocedió un fallu, quiciabes la URL nun seya válida o nun se sofite.",
"Top tracks": "Pistes destacaes",
"Show all top tracks": "Amosar toles pistes destacaes",
"Singles": "Singles",
"Album:": "Álbum:",
"Artists:": "Artistes:",
"Yes": "Sí",
"No": "Non",
"Download Filename": "Nome de les descargues",
"Language": "Llingua",
"Background Image": "Imaxe del fondu",
"Enter URL or absolute path. WARNING: Requires reload!": "Introduz una URL o un camín absolutu. ALVERTENCIA: ¡Ha reaniciase l'aplicación!",
"LGBT Mode": "Mou LGBT",
"Native top bar": "Barra cimera nativa",
"Requires restart of Freezer!": "¡Tienes de reaniciar Freezer!"
} }

View File

@ -0,0 +1,171 @@
{
"Home": "Home",
"Browse": "Browse",
"Library": "Library",
"Tracks": "Tracks",
"Playlists": "Playlists",
"Albums": "Albums",
"Artists": "Artists",
"More": "More",
"Settings": "Settings",
"Downloads": "Downloads",
"Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.",
"Play": "Play",
"Add to library": "Add to library",
"Download": "Download",
"fans": "fans",
"tracks": "tracks",
"Quality": "Quality",
"Estimated size:": "Estimated size:",
"Start downloading": "Start downloading",
"Cancel": "Cancel",
"Stream logging is disabled!": "Stream logging is disabled!",
"Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.",
"History": "History",
"Create new playlist": "Create new playlist",
"TRACKS": "TRACKS",
"Sort by": "Sort by",
"Date Added": "Date Added",
"Name (A-Z)": "Name (A-Z)",
"Artist (A-Z)": "Artist (A-Z)",
"Album (A-Z)": "Album (A-Z)",
"Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!",
"Create playlist": "Create playlist",
"Create": "Create",
"Add to playlist": "Add to playlist",
"Create new": "Create new",
"Remove": "Remove",
"Play next": "Play next",
"Add to queue": "Add to queue",
"Remove from library": "Remove from library",
"Remove from playlist": "Remove from playlist",
"Play track mix": "Play track mix",
"Go to": "Go to",
"Track Mix": "Track Mix",
"Duration": "Duration",
"Released": "Released",
"Disk": "Disk",
"albums": "albums",
"Play top": "Play top",
"Radio": "Radio",
"Show all albums": "Show all albums",
"Show all singles": "Show all singles",
"Show more": "Show more",
"Downloaded": "Downloaded",
"Queue": "Queue",
"Total": "Total",
"Stop": "Stop",
"Start": "Start",
"Show folder": "Show folder",
"Clear queue": "Clear queue",
"Playing from": "Playing from",
"Info": "Info",
"Lyrics": "Lyrics",
"Track number": "Track number",
"Disk number": "Disk number",
"Explicit": "Explicit",
"Source": "Source",
"ID": "ID",
"Error logging in!": "Error logging in!",
"Please try again later, or try another account.": "Please try again later, or try another account.",
"Logout": "Logout",
"Login using browser": "Login using browser",
"Please login using your Deezer account:": "Please login using your Deezer account:",
"...or paste your ARL/Token below:": "...or paste your ARL/Token below:",
"ARL/Token": "ARL/Token",
"Login": "Login",
"By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.",
"Only in Electron version!": "Only in Electron version!",
"Search results for:": "Search results for:",
"Error loading data!": "Error loading data!",
"Try again later!": "Try again later!",
"Search": "Search",
"Streaming Quality": "Streaming Quality",
"Download Quality": "Download Quality",
"Downloads Directory": "Downloads Directory",
"Simultaneous downloads": "Simultaneous downloads",
"Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.",
"Show download dialog": "Show download dialog",
"Create folders for artists": "Create folders for artists",
"Create folders for albums": "Create folders for albums",
"Download lyrics": "Download lyrics",
"Variables": "Variables",
"UI": "UI",
"Show autocomplete in search": "Show autocomplete in search",
"Integrations": "Integrations",
"This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.",
"Log track listens to Deezer": "Log track listens to Deezer",
"Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.",
"Login with LastFM": "Login with LastFM",
"Disconnect LastFM": "Disconnect LastFM",
"Requires restart to apply!": "Requires restart to apply!",
"Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!",
"Discord Rich Presence": "Discord Rich Presence",
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!",
"Discord Join Button": "Discord Join Button",
"Other": "Other",
"Minimize to tray": "Minimize to tray",
"Don't minimize to tray": "Don't minimize to tray",
"Close on exit": "Close on exit",
"Settings saved!": "Settings saved!",
"Available only in Electron version!": "Available only in Electron version!",
"Crossfade (ms)": "Crossfade (ms)",
"Select primary color": "Select primary color",
"Light theme": "Light theme",
"Create folders for playlists": "Create folders for playlists",
"About": "About",
"Links:": "Links:",
"Telegram Releases": "Telegram Releases",
"Telegram Group": "Telegram Group",
"Discord": "Discord",
"Telegram Android Group": "Telegram Android Group",
"Credits:": "Credits:",
"Agree": "Agree",
"Dismiss": "Dismiss",
"Added to playlist!": "Added to playlist!",
"Added to library!": "Added to library!",
"Removed from library!": "Removed from library!",
"Removed from playlist!": "Removed from playlist!",
"Playlist deleted!": "Playlist deleted!",
"Delete": "Delete",
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?",
"Force white tray icon": "Force white tray icon",
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.",
"Share": "Share",
"Settings quality": "Settings quality",
"Content language": "Content language",
"Content country": "Content country",
"Website": "Website",
"Visit website": "Visit website",
"New update available:": "New update available:",
"Shuffle": "Shuffle",
"Download album cover": "Download album cover",
"Art Resolution": "Art Resolution",
"Public": "Public",
"Private": "Private",
"Collaborative": "Collaborative",
"Edit playlist": "Edit playlist",
"Save": "Save",
"Edit": "Edit",
"Importer": "Importer",
"Enter URL": "Enter URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Currently only Spotify is supported and limited to 100 tracks.",
"Import into playlist": "Import into playlist",
"Keep sidebar open": "Keep sidebar open",
"WARNING: Might require reload to work properly!": "WARNING: Might require reload to work properly!",
"An error occured, URL might be invalid or unsupported.": "An error occured, URL might be invalid or unsupported.",
"Top tracks": "Top tracks",
"Show all top tracks": "Show all top tracks",
"Singles": "Singles",
"Album:": "Album:",
"Artists:": "Artists:",
"Yes": "Yes",
"No": "No",
"Download Filename": "Download Filename",
"Language": "Language",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

View File

@ -137,5 +137,35 @@
"Content country": "Content country", "Content country": "Content country",
"Website": "Website", "Website": "Website",
"Visit website": "Visit website", "Visit website": "Visit website",
"New update available:": "New update available:" "New update available:": "New update available:",
"Shuffle": "Shuffle",
"Download album cover": "Download album cover",
"Art Resolution": "Art Resolution",
"Public": "Public",
"Private": "Private",
"Collaborative": "Collaborative",
"Edit playlist": "Edit playlist",
"Save": "Save",
"Edit": "Edit",
"Importer": "Importer",
"Enter URL": "Enter URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Currently only Spotify is supported and limited to 100 tracks.",
"Import into playlist": "Import into playlist",
"Keep sidebar open": "Keep sidebar open",
"WARNING: Might require reload to work properly!": "WARNING: Might require reload to work properly!",
"An error occured, URL might be invalid or unsupported.": "An error occured, URL might be invalid or unsupported.",
"Top tracks": "Top tracks",
"Show all top tracks": "Show all top tracks",
"Singles": "Singles",
"Album:": "Album:",
"Artists:": "Artists:",
"Yes": "Yes",
"No": "No",
"Download Filename": "Download Filename",
"Language": "Language",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
} }

View File

@ -1,15 +1,15 @@
{ {
"Home": "Start", "Home": "Startseite",
"Browse": "Durchsuchen", "Browse": "Durchsuchen",
"Library": "Mediathek", "Library": "Mediathek",
"Tracks": "Songs", "Tracks": "Songs",
"Playlists": "Playlists", "Playlists": "Playlists",
"Albums": "Alben", "Albums": "Alben",
"Artists": "Künstler*innen", "Artists": "Künstler",
"More": "Mehr", "More": "Mehr",
"Settings": "Einstellungen", "Settings": "Einstellungen",
"Downloads": "Downloads", "Downloads": "Downloads",
"Search or paste Deezer URL. Use / to quickly focus.": "Suche oder füge eine Deezer URL ein. Benutze \"/\" um schnell zu fokussieren.", "Search or paste Deezer URL. Use / to quickly focus.": "Suchen oder Deezer URL einfügen. Benutze \"/\", um schnell zu fokussieren.",
"Play": "Wiedergeben", "Play": "Wiedergeben",
"Add to library": "Zur Mediathek hinzufügen", "Add to library": "Zur Mediathek hinzufügen",
"Download": "Download", "Download": "Download",
@ -27,7 +27,7 @@
"Sort by": "Sortieren nach", "Sort by": "Sortieren nach",
"Date Added": "Hinzugefügt am", "Date Added": "Hinzugefügt am",
"Name (A-Z)": "Name (A-Z)", "Name (A-Z)": "Name (A-Z)",
"Artist (A-Z)": "Künstler*innen (A-Z)", "Artist (A-Z)": "Künstler (A-Z)",
"Album (A-Z)": "Album (A-Z)", "Album (A-Z)": "Album (A-Z)",
"Error loading lyrics or lyrics not found!": "Fehler beim Laden der Songtexte bzw. Songtexte nicht gefunden!", "Error loading lyrics or lyrics not found!": "Fehler beim Laden der Songtexte bzw. Songtexte nicht gefunden!",
"Create playlist": "Playlist erstellen", "Create playlist": "Playlist erstellen",
@ -54,7 +54,7 @@
"Downloaded": "Heruntergeladen", "Downloaded": "Heruntergeladen",
"Queue": "Wiedergabeliste", "Queue": "Wiedergabeliste",
"Total": "Gesamt", "Total": "Gesamt",
"Stop": "Stop", "Stop": "Stopp",
"Start": "Start", "Start": "Start",
"Show folder": "Ordner anzeigen", "Show folder": "Ordner anzeigen",
"Clear queue": "Warteschleife löschen", "Clear queue": "Warteschleife löschen",
@ -66,12 +66,12 @@
"Explicit": "Explizit", "Explicit": "Explizit",
"Source": "Quelle", "Source": "Quelle",
"ID": "ID", "ID": "ID",
"Error logging in!": "Fehler beim einloggen!", "Error logging in!": "Fehler beim Einloggen!",
"Please try again later, or try another account.": "Bitte versuche es später noch einmal oder versuche es mit einem anderen Konto.", "Please try again later, or try another account.": "Bitte versuche es später noch einmal oder versuche es mit einem anderen Konto.",
"Logout": "Abmelden", "Logout": "Abmelden",
"Login using browser": "Anmeldung über Browser", "Login using browser": "Anmeldung über Browser",
"Please login using your Deezer account:": "Bitte melde dich mit deinem Deezer-Konto an:", "Please login using your Deezer account:": "Bitte melde dich mit deinem Deezer-Konto an:",
"...or paste your ARL/Token below:": "...oder füge dein ARL/Token unten ein:", "...or paste your ARL/Token below:": "...oder füge deine ARL/deinen Token unten ein:",
"ARL/Token": "ARL/Token", "ARL/Token": "ARL/Token",
"Login": "Anmeldung", "Login": "Anmeldung",
"By using this program, you disagree with Deezer's ToS.": "Durch die Verwendung dieses Programms lehnst du die Nutzungsbedingungen von Deezer ab.", "By using this program, you disagree with Deezer's ToS.": "Durch die Verwendung dieses Programms lehnst du die Nutzungsbedingungen von Deezer ab.",
@ -86,26 +86,26 @@
"Simultaneous downloads": "Gleichzeitige Downloads", "Simultaneous downloads": "Gleichzeitige Downloads",
"Always show download confirm dialog before downloading.": "Downloadbestätigungsdialog immer vor dem Download anzeigen.", "Always show download confirm dialog before downloading.": "Downloadbestätigungsdialog immer vor dem Download anzeigen.",
"Show download dialog": "Download-Dialog anzeigen", "Show download dialog": "Download-Dialog anzeigen",
"Create folders for artists": "Ordner für Künstler*innen erstellen", "Create folders for artists": "Ordner für Künstler erstellen",
"Create folders for albums": "Ordner für Alben erstellen", "Create folders for albums": "Ordner für Alben erstellen",
"Download lyrics": "Download Lyrics", "Download lyrics": "Lyrics herunterladen",
"Variables": "Variablen", "Variables": "Variablen",
"UI": "Benutzeroberfläche", "UI": "Benutzeroberfläche",
"Show autocomplete in search": "Auto-Vervollständigung in der Suche anzeigen", "Show autocomplete in search": "Auto-Vervollständigung in der Suche anzeigen",
"Integrations": "Integrationen", "Integrations": "Integrationen",
"This allows listening history, flow and recommendations to work properly.": "Dies ermöglicht, dass der Wiedergabeverlauf, Flow und Empfehlungen korrekt funktionieren.", "This allows listening history, flow and recommendations to work properly.": "Dies ermöglicht, dass der Wiedergabeverlauf, Flow und Empfehlungen korrekt funktionieren.",
"Log track listens to Deezer": "Prokotolliere gehörte Titel auf Deezer", "Log track listens to Deezer": "Prokotolliere gehörte Songs auf Deezer",
"Connect your LastFM account to allow scrobbling.": "Verbinde dein LastFM-Konto, um das Scrobbling zu erlauben.", "Connect your LastFM account to allow scrobbling.": "Verbinde dein LastFM-Konto, um das Scrobbling zu erlauben.",
"Login with LastFM": "Anmelden mit LastFM", "Login with LastFM": "Anmelden mit LastFM",
"Disconnect LastFM": "Disconnect LastFM", "Disconnect LastFM": "LastFM trennen",
"Requires restart to apply!": "Erfordert einen Neustart der App!", "Requires restart to apply!": "Erfordert einen Neustart der App!",
"Enable Discord Rich Presence, requires restart to toggle!": "Discord Rich Presence aktivieren, erfordert einen Neustart zum Umschalten!", "Enable Discord Rich Presence, requires restart to toggle!": "Discord Rich Presence aktivieren, erfordert einen Neustart zum Umschalten!",
"Discord Rich Presence": "Discord Rich Presence", "Discord Rich Presence": "Discord Rich Presence",
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Aktiviere Discord Join für die Synchronisierung von Titel, benötigt einen Neustart zum Umschalten!", "Enable Discord join button for syncing tracks, requires restart to toggle!": "Aktiviere Discord Join für die Synchronisierung von Titel, benötigt einen Neustart zum Umschalten!",
"Discord Join Button": "Discord Join Button", "Discord Join Button": "Discord Join Button",
"Other": "Andere", "Other": "Andere",
"Minimize to tray": "In Statusleiste minimieren", "Minimize to tray": "In die Statusleiste minimieren",
"Don't minimize to tray": "Nicht in Statusleiste minimieren", "Don't minimize to tray": "Nicht in die Statusleiste minimieren",
"Close on exit": "Beim Beenden schließen", "Close on exit": "Beim Beenden schließen",
"Settings saved!": "Einstellungen gespeichert!", "Settings saved!": "Einstellungen gespeichert!",
"Available only in Electron version!": "Nur in der Electron-Version verfügbar!", "Available only in Electron version!": "Nur in der Electron-Version verfügbar!",
@ -116,14 +116,14 @@
"About": "Über", "About": "Über",
"Links:": "Links:", "Links:": "Links:",
"Telegram Releases": "Telegram Veröffentlichungen", "Telegram Releases": "Telegram Veröffentlichungen",
"Telegram Group": "Telegram Gruppe", "Telegram Group": "Telegram-Gruppe",
"Discord": "Discord", "Discord": "Discord",
"Telegram Android Group": "Telegram Android-Gruppe", "Telegram Android Group": "Telegram Android-Gruppe",
"Credits:": "Credits:", "Credits:": "Credits:",
"Agree": "Einverstanden", "Agree": "Einverstanden",
"Dismiss": "Verwerfen", "Dismiss": "Verwerfen",
"Added to playlist!": "Zur Playlist hinzugefügt!", "Added to playlist!": "Zur Playlist hinzugefügt!",
"Added to library!": "Zur Mediathek hinzufügt!", "Added to library!": "Zur Mediathek hinzugefügt!",
"Removed from library!": "Aus der Mediathek entfernt!", "Removed from library!": "Aus der Mediathek entfernt!",
"Removed from playlist!": "Aus der Playlist entfernt!", "Removed from playlist!": "Aus der Playlist entfernt!",
"Playlist deleted!": "Playlist gelöscht!", "Playlist deleted!": "Playlist gelöscht!",
@ -134,8 +134,38 @@
"Share": "Teilen", "Share": "Teilen",
"Settings quality": "Audioqualität-Einstellungen", "Settings quality": "Audioqualität-Einstellungen",
"Content language": "Sprache der Inhalte", "Content language": "Sprache der Inhalte",
"Content country": "Land des Inhalts", "Content country": "Land der Inhalte",
"Website": "Webseite", "Website": "Webseite",
"Visit website": "Webseite besuchen", "Visit website": "Webseite besuchen",
"New update available:": "Neues Update verfügbar:" "New update available:": "Neues Update verfügbar:",
"Shuffle": "Zufällige Wiedergabe",
"Download album cover": "Albumcover herunterladen",
"Art Resolution": "Auflösung der Albumcover",
"Public": "Öffentlich",
"Private": "Privat",
"Collaborative": "Zusammen",
"Edit playlist": "Playlist bearbeiten",
"Save": "Speichern",
"Edit": "Bearbeiten",
"Importer": "Importierer",
"Enter URL": "URL eingeben",
"Currently only Spotify is supported and limited to 100 tracks.": "Derzeit wird nur Spotify unterstützt und ist auf 100 Tracks beschränkt.",
"Import into playlist": "In Playlist importieren",
"Keep sidebar open": "Sidebar offen lassen",
"WARNING: Might require reload to work properly!": "WARNUNG: Eventuell muss neu geladen werden, um richtig zu funktionieren!",
"An error occured, URL might be invalid or unsupported.": "Ein Fehler ist aufgetreten, die URL ist ungültig oder wird nicht unterstützt.",
"Top tracks": "Top-Titel",
"Show all top tracks": "Zeige alle Top-Titel",
"Singles": "Singles",
"Album:": "Album:",
"Artists:": "Künstler:",
"Yes": "Ja",
"No": "Nein",
"Download Filename": "Dateiname herunterladen",
"Language": "Sprache",
"Background Image": "Hintergrundbild",
"Enter URL or absolute path. WARNING: Requires reload!": "URL oder absoluten Pfad eingeben. WARNUNG: Neuladen erforderlich!",
"LGBT Mode": "LGBT-Modus",
"Native top bar": "System-Titelleiste verwenden",
"Requires restart of Freezer!": "Benötigt Neustart von Freezer!"
} }

View File

@ -4,7 +4,7 @@
"Library": "Βιβλιοθήκη", "Library": "Βιβλιοθήκη",
"Tracks": "Κομμάτια", "Tracks": "Κομμάτια",
"Playlists": "Λίστες αναπαραγωγής", "Playlists": "Λίστες αναπαραγωγής",
"Albums": "Album", "Albums": "Άλμπουμ",
"Artists": "Καλλιτέχνες", "Artists": "Καλλιτέχνες",
"More": "Περισσότερα", "More": "Περισσότερα",
"Settings": "Ρυθμίσεις", "Settings": "Ρυθμίσεις",
@ -28,7 +28,7 @@
"Date Added": "Ημερομηνία Προσθήκης", "Date Added": "Ημερομηνία Προσθήκης",
"Name (A-Z)": "Όνομα (Α-Ω)", "Name (A-Z)": "Όνομα (Α-Ω)",
"Artist (A-Z)": "Καλλιτέχνης (Α-Ω)", "Artist (A-Z)": "Καλλιτέχνης (Α-Ω)",
"Album (A-Z)": "Album (Α-Ω)", "Album (A-Z)": "Άλμπουμ (Α-Ω)",
"Error loading lyrics or lyrics not found!": "Σφάλμα κατά τη φόρτωση στίχων ή αδυναμία εύρεσης στίχων!", "Error loading lyrics or lyrics not found!": "Σφάλμα κατά τη φόρτωση στίχων ή αδυναμία εύρεσης στίχων!",
"Create playlist": "Δημιουργία λίστας αναπαραγωγής", "Create playlist": "Δημιουργία λίστας αναπαραγωγής",
"Create": "Δημιουργία", "Create": "Δημιουργία",
@ -45,10 +45,10 @@
"Duration": "Διάρκεια", "Duration": "Διάρκεια",
"Released": "Κυκλοφόρησε", "Released": "Κυκλοφόρησε",
"Disk": "Δίσκος", "Disk": "Δίσκος",
"albums": "album", "albums": "άλμπουμ",
"Play top": "Αναπαραγωγή κορυφαίου", "Play top": "Αναπαραγωγή κορυφαίου",
"Radio": "Ραδιόφωνο", "Radio": "Ραδιόφωνο",
"Show all albums": "Εμφάνιση όλων των album", "Show all albums": "Εμφάνιση όλων των άλμπουμ",
"Show all singles": "Εμφάνιση όλων των single", "Show all singles": "Εμφάνιση όλων των single",
"Show more": "Εμφάνιση περισσότερων", "Show more": "Εμφάνιση περισσότερων",
"Downloaded": "Ελήφθησαν", "Downloaded": "Ελήφθησαν",
@ -87,7 +87,7 @@
"Always show download confirm dialog before downloading.": "Να εμφανίζεται πάντα το παράθυρο διαλόγου επιβεβαίωσης πριν από τη λήψη.", "Always show download confirm dialog before downloading.": "Να εμφανίζεται πάντα το παράθυρο διαλόγου επιβεβαίωσης πριν από τη λήψη.",
"Show download dialog": "Εμφάνιση παραθύρου διαλόγου επιβεβαίωσης", "Show download dialog": "Εμφάνιση παραθύρου διαλόγου επιβεβαίωσης",
"Create folders for artists": "Δημιουργία φακέλου για καλλιτέχνη", "Create folders for artists": "Δημιουργία φακέλου για καλλιτέχνη",
"Create folders for albums": "Δημιουργία φακέλων για album", "Create folders for albums": "Δημιουργία φακέλων για άλμπουμ",
"Download lyrics": "Λήψη στίχων", "Download lyrics": "Λήψη στίχων",
"Variables": "Μεταβλητές", "Variables": "Μεταβλητές",
"UI": "Περιβάλλον Χρήστη", "UI": "Περιβάλλον Χρήστη",
@ -137,5 +137,35 @@
"Content country": "Χώρα περιεχομένου", "Content country": "Χώρα περιεχομένου",
"Website": "Ιστοσελίδα", "Website": "Ιστοσελίδα",
"Visit website": "Μετάβαση στην Ιστοσελίδα", "Visit website": "Μετάβαση στην Ιστοσελίδα",
"New update available:": "Διαθέσιμη νέα ενημέρωση:" "New update available:": "Διαθέσιμη νέα ενημέρωση:",
"Shuffle": "Ανάμιξη",
"Download album cover": "Λήψη εξώφυλλου άλμπουμ",
"Art Resolution": "Ανάλυση εξώφυλλου",
"Public": "Δημόσιο",
"Private": "Ιδιωτικό",
"Collaborative": "Συνεργατικό",
"Edit playlist": "Επεξεργασία λίστας αναπαραγωγής",
"Save": "Αποθήκευση",
"Edit": "Επεξεργασία",
"Importer": "Εισαγωγέας",
"Enter URL": "Εισαγωγή URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Επί του παρόντος, υποστηρίζεται μόνο το Spotify και περιορίζεται σε 100 κομμάτια.",
"Import into playlist": "Εισαγωγή στη λίστα αναπαραγωγής",
"Keep sidebar open": "Κρατήστε την πλαϊνή μπάρα ανοιχτή",
"WARNING: Might require reload to work properly!": "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Μπορεί να χρειαστεί επαναφόρτωση για να λειτουργήσει σωστά!",
"An error occured, URL might be invalid or unsupported.": "Παρουσιάστηκε σφάλμα, το URL ενδέχεται να μην είναι έγκυρο ή να μην υποστηρίζεται.",
"Top tracks": "Κορυφαία κομμάτια",
"Show all top tracks": "Εμφάνιση όλων των κορυφαίων κομματιών",
"Singles": "Σίνγκλ",
"Album:": "Άλμπουμ:",
"Artists:": "Καλλιτέχνες:",
"Yes": "Ναι",
"No": "Όχι",
"Download Filename": "Όνομα Αρχείου Λήψης",
"Language": "Γλώσσα",
"Background Image": "Εικόνα Φόντου",
"Enter URL or absolute path. WARNING: Requires reload!": "Εισάγετε URL ή απόλυτη διαδρομή. ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Απαιτείται επαναφόρτωση!",
"LGBT Mode": "Λειτουργία LGBT",
"Native top bar": "Εγγενής επάνω γραμμή",
"Requires restart of Freezer!": "Απαιτεί επανεκκίνηση του Freezer!"
} }

View File

@ -153,5 +153,19 @@
"Import into playlist": "Import into playlist", "Import into playlist": "Import into playlist",
"Keep sidebar open": "Keep sidebar open", "Keep sidebar open": "Keep sidebar open",
"WARNING: Might require reload to work properly!": "WARNING: Might require reload to work properly!", "WARNING: Might require reload to work properly!": "WARNING: Might require reload to work properly!",
"An error occured, URL might be invalid or unsupported.": "An error occured, URL might be invalid or unsupported." "An error occured, URL might be invalid or unsupported.": "An error occured, URL might be invalid or unsupported.",
"Top tracks": "Top tracks",
"Show all top tracks": "Show all top tracks",
"Singles": "Singles",
"Album:": "Album:",
"Artists:": "Artists:",
"Yes": "Yes",
"No": "No",
"Download Filename": "Download Filename",
"Language": "Language",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "País del contenido", "Content country": "País del contenido",
"Website": "Sitio Web", "Website": "Sitio Web",
"Visit website": "Visita la página web", "Visit website": "Visita la página web",
"New update available:": "Nueva actualización disponible:" "New update available:": "Nueva actualización disponible:",
"Shuffle": "Aleatorio",
"Download album cover": "Descargar portada del álbum",
"Art Resolution": "Resolución de Arte",
"Public": "Público",
"Private": "Privado",
"Collaborative": "Colaborativo",
"Edit playlist": "Editar lista de reproducción",
"Save": "Guardar",
"Edit": "Editar",
"Importer": "Importador",
"Enter URL": "Introducir URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Actualmente solo Spotify está soportado y limitado a 100 pistas.",
"Import into playlist": "Importar a lista de reproducción",
"Keep sidebar open": "Mantener barra lateral abierta",
"WARNING: Might require reload to work properly!": "ADVERTENCIA: ¡Puede requerir recarga para trabajar correctamente!",
"An error occured, URL might be invalid or unsupported.": "Ocurrió un error, la URL puede ser inválida o no soportada.",
"Top tracks": "Mejores canciones",
"Show all top tracks": "Mostrar las mejores canciones",
"Singles": "Sencillos",
"Album:": "Álbum:",
"Artists:": "Artistas:",
"Yes": "Sí",
"No": "No",
"Download Filename": "Nombre del archivo de descarga",
"Language": "Idioma",
"Background Image": "Imagen de fondo",
"Enter URL or absolute path. WARNING: Requires reload!": "Introducir la URL o ruta absoluta. ADVERTENCIA: ¡Necesita reiniciar!",
"LGBT Mode": "Modo LGBT",
"Native top bar": "Barra superior nativa",
"Requires restart of Freezer!": "¡Se necesita reiniciar Freezer!"
} }

View File

@ -1,141 +1,171 @@
{ {
"Home": "Home", "Home": "صفحه اصلی",
"Browse": "Browse", "Browse": "مرور",
"Library": "Library", "Library": "مجموعه",
"Tracks": "Tracks", "Tracks": "قطعه ها",
"Playlists": "Playlists", "Playlists": "لیست های پخش",
"Albums": "Albums", "Albums": "آلبوم ها",
"Artists": "Artists", "Artists": "صاحب آثار",
"More": "More", "More": "ادامه",
"Settings": "Settings", "Settings": "تنظیمات",
"Downloads": "Downloads", "Downloads": "بارگیری ها",
"Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", "Search or paste Deezer URL. Use / to quickly focus.": "جست و جو یا وارد کردن لینک دیزر، برای دقت بیشتر از \"/\" استفاده کنید.",
"Play": "Play", "Play": "پخش",
"Add to library": "Add to library", "Add to library": "به مجموعه اضافه کن",
"Download": "Download", "Download": "بارگیری",
"fans": "fans", "fans": "طرفداران",
"tracks": "tracks", "tracks": "قطعه ها",
"Quality": "Quality", "Quality": "کیفیت",
"Estimated size:": "Estimated size:", "Estimated size:": "حجم محاسبه شده:",
"Start downloading": "Start downloading", "Start downloading": "آغاز بارگیری",
"Cancel": "Cancel", "Cancel": "لغو",
"Stream logging is disabled!": "Stream logging is disabled!", "Stream logging is disabled!": "ثبت جریان پخش غیر فعال شده است!",
"Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", "Enable it in settings for history to work properly.": "برای کارکرد مناسب تاریخچه از بخش تنظیمات فعال کنید.",
"History": "History", "History": "تاریخچه",
"Create new playlist": "Create new playlist", "Create new playlist": "ایجاد لیست پخش جدید",
"TRACKS": "TRACKS", "TRACKS": "قطعه ها",
"Sort by": "Sort by", "Sort by": "مرتب‌سازی براساس",
"Date Added": "Date Added", "Date Added": "تاریخ اضافه شده",
"Name (A-Z)": "Name (A-Z)", "Name (A-Z)": "نام (A - Z)",
"Artist (A-Z)": "Artist (A-Z)", "Artist (A-Z)": "صاحب آثار (A-Z)",
"Album (A-Z)": "Album (A-Z)", "Album (A-Z)": "آلبوم (A-Z)",
"Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", "Error loading lyrics or lyrics not found!": "مشکل در بارگیری اشعار یا یافت نشد!",
"Create playlist": "Create playlist", "Create playlist": "ایجاد لیست پخش",
"Create": "Create", "Create": "ایجاد",
"Add to playlist": "Add to playlist", "Add to playlist": "به لیست پخش اضافه کن",
"Create new": "Create new", "Create new": "ایجاد جدید",
"Remove": "Remove", "Remove": "حذف",
"Play next": "Play next", "Play next": "بعد از این پخش کن",
"Add to queue": "Add to queue", "Add to queue": "به صف انتظار اضافه کن",
"Remove from library": "Remove from library", "Remove from library": "حذف از مجموعه",
"Remove from playlist": "Remove from playlist", "Remove from playlist": "از لیست پخش حذف شود",
"Play track mix": "Play track mix", "Play track mix": "پخش ترکیبی قطعه",
"Go to": "Go to", "Go to": "برو به",
"Track Mix": "Track Mix", "Track Mix": "ترکیب قطعه",
"Duration": "Duration", "Duration": "مدت زمان",
"Released": "Released", "Released": "منتشر شده‌ها",
"Disk": "Disk", "Disk": "نوار",
"albums": "albums", "albums": "آلبوم ها",
"Play top": "Play top", "Play top": "پخش محبوب ترین",
"Radio": "Radio", "Radio": "رادیو",
"Show all albums": "Show all albums", "Show all albums": "همه ی آلبوم ها را نشان بده",
"Show all singles": "Show all singles", "Show all singles": "همه ی قطعات تکی را نشان بده",
"Show more": "Show more", "Show more": "بیشتر نشان بده",
"Downloaded": "Downloaded", "Downloaded": "بارگیری شد",
"Queue": "Queue", "Queue": "صف انتظار",
"Total": "Total", "Total": "مجموع",
"Stop": "Stop", "Stop": "توقف",
"Start": "Start", "Start": "شروع",
"Show folder": "Show folder", "Show folder": "نمایش پوشه",
"Clear queue": "Clear queue", "Clear queue": "تخلیه صف انتظار",
"Playing from": "Playing from", "Playing from": "پخش از",
"Info": "Info", "Info": "اطلاعات",
"Lyrics": "Lyrics", "Lyrics": "اشعار",
"Track number": "Track number", "Track number": "شماره قطعه",
"Disk number": "Disk number", "Disk number": "شماره ی دیسک",
"Explicit": "Explicit", "Explicit": "فحاشی",
"Source": "Source", "Source": "منبع",
"ID": "ID", "ID": "شناسه",
"Error logging in!": "Error logging in!", "Error logging in!": "مشکل در وارد شدن!",
"Please try again later, or try another account.": "Please try again later, or try another account.", "Please try again later, or try another account.": "لطفا بعدا امتحان کنید یا با اکانت دیگری وارد شوید.",
"Logout": "Logout", "Logout": "خروج از حساب",
"Login using browser": "Login using browser", "Login using browser": "وارد شدن توسط مرورگر",
"Please login using your Deezer account:": "Please login using your Deezer account:", "Please login using your Deezer account:": "لطفاً با حساب کاربری دیزر خود وارد شوید:",
"...or paste your ARL/Token below:": "...or paste your ARL/Token below:", "...or paste your ARL/Token below:": "...یا با استفاده از ARL/Token پایین:",
"ARL/Token": "ARL/Token", "ARL/Token": "ARL/Token",
"Login": "Login", "Login": "وارد شدن",
"By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", "By using this program, you disagree with Deezer's ToS.": "با استفاده از این برنامه، شما قوانین دیزر را زیر پا میگذارید.",
"Only in Electron version!": "Only in Electron version!", "Only in Electron version!": "فقط در نسخه ی الکترون!",
"Search results for:": "Search results for:", "Search results for:": "نتایج جستجو برای:",
"Error loading data!": "Error loading data!", "Error loading data!": "مشکل در بالا آوردن اطلاعات!",
"Try again later!": "Try again later!", "Try again later!": "بعداً دوباره تلاش کنید!",
"Search": "Search", "Search": "جست‌وجو",
"Streaming Quality": "Streaming Quality", "Streaming Quality": "کیفیت پخش",
"Download Quality": "Download Quality", "Download Quality": "کیفیت بارگیری",
"Downloads Directory": "Downloads Directory", "Downloads Directory": "مسیر بارگیری",
"Simultaneous downloads": "Simultaneous downloads", "Simultaneous downloads": "بارگیری همزمان",
"Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", "Always show download confirm dialog before downloading.": "همیشه پیام تایید بارگیری قبل از بارگیری را نشان بده.",
"Show download dialog": "Show download dialog", "Show download dialog": "نمایش پنجره ی بارگیری",
"Create folders for artists": "Create folders for artists", "Create folders for artists": "برای صاحب آثار پوشه بساز",
"Create folders for albums": "Create folders for albums", "Create folders for albums": "برای آلبوم ها پوشه بساز",
"Download lyrics": "Download lyrics", "Download lyrics": "بارگیری اشعار",
"Variables": "Variables", "Variables": "متغیرها",
"UI": "UI", "UI": "واسطه کاربری",
"Show autocomplete in search": "Show autocomplete in search", "Show autocomplete in search": "حدس کلمه در جست و جو",
"Integrations": "Integrations", "Integrations": "یکپارچه سازی ها",
"This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", "This allows listening history, flow and recommendations to work properly.": "این کمک میکند که تاریخچه، جریان و پیشنهادات پخش به درستی کار کند.",
"Log track listens to Deezer": "Log track listens to Deezer", "Log track listens to Deezer": "بارگذاری پخش شده ها به دیزر",
"Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", "Connect your LastFM account to allow scrobbling.": "برای اسکراب کردن قطعه ها به اکانت لست اف ام متصل شوید.",
"Login with LastFM": "Login with LastFM", "Login with LastFM": "وارد شدن به حساب لست اف ام",
"Disconnect LastFM": "Disconnect LastFM", "Disconnect LastFM": "خارج شدن از حساب لست اف ام",
"Requires restart to apply!": "Requires restart to apply!", "Requires restart to apply!": "برای اعمال تغییرات اجرای دوباره برنامه نیاز است!",
"Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", "Enable Discord Rich Presence, requires restart to toggle!": "فعال کردن همسان سازی با دیسکورد، نیازمند اجرای دوباره!",
"Discord Rich Presence": "Discord Rich Presence", "Discord Rich Presence": "همسان سازی با دیسکورد",
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", "Enable Discord join button for syncing tracks, requires restart to toggle!": "دکمه وارد شدن به دیسکورد را برای همسان سازی قطعه ها فعال کن، اجرای دوباره نیازمند است!",
"Discord Join Button": "Discord Join Button", "Discord Join Button": "دکمه وارد شدن به دیسکورد",
"Other": "Other", "Other": "ديگر",
"Minimize to tray": "Minimize to tray", "Minimize to tray": "کوچک کردن به Tray",
"Don't minimize to tray": "Don't minimize to tray", "Don't minimize to tray": "کوچک نکردن به Tray",
"Close on exit": "Close on exit", "Close on exit": "بستن و خروج",
"Settings saved!": "Settings saved!", "Settings saved!": "تنظیمات ذخیره شد!",
"Available only in Electron version!": "Available only in Electron version!", "Available only in Electron version!": "فقط در نسخه ی الکترون موجود است!",
"Crossfade (ms)": "Crossfade (ms)", "Crossfade (ms)": "پخش بعدی قبل از اتمام فعلی (میلی ثانیه)",
"Select primary color": "Select primary color", "Select primary color": "رنگ اصلی را انتخاب کنید",
"Light theme": "Light theme", "Light theme": "پوسته روشن",
"Create folders for playlists": "Create folders for playlists", "Create folders for playlists": "برای لیست پخش پوشه بساز",
"About": "About", "About": "درباره",
"Links:": "Links:", "Links:": "پیوند‌ها:",
"Telegram Releases": "Telegram Releases", "Telegram Releases": "عریضه های تلگرامی",
"Telegram Group": "Telegram Group", "Telegram Group": "گروه تلگرامی",
"Discord": "Discord", "Discord": "دیسکورد",
"Telegram Android Group": "Telegram Android Group", "Telegram Android Group": "گروه تلگرامی اندرویید",
"Credits:": "Credits:", "Credits:": "سازندگان:",
"Agree": "Agree", "Agree": "پذیرش",
"Dismiss": "Dismiss", "Dismiss": "رد",
"Added to playlist!": "Added to playlist!", "Added to playlist!": "به لیست پخش اضافه شد!",
"Added to library!": "Added to library!", "Added to library!": "به مجموعه اضافه شد!",
"Removed from library!": "Removed from library!", "Removed from library!": "از مجموعه حذف شد!",
"Removed from playlist!": "Removed from playlist!", "Removed from playlist!": "از لیست پخش حذف شد!",
"Playlist deleted!": "Playlist deleted!", "Playlist deleted!": "لیست پخش حذف شد!",
"Delete": "Delete", "Delete": "حذف",
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?", "Are you sure you want to delete this playlist?": "مطمئنید که می خواهید این لیست پخش را حذف کنید?",
"Force white tray icon": "Force white tray icon", "Force white tray icon": "اجبار نمایش آیکون روشن در tray",
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.", "Force default (white) tray icon if theme incorrectly detected. Requires restart.": "اجبار آیکون پیشفرض (روشن) در tray زمانی که پوسته اشتباه به نمایش درآمد، نیازمند اجرای دوباره.",
"Share": "Share", "Share": "اشتراک",
"Settings quality": "Settings quality", "Settings quality": "تنظیمات پیشفرض",
"Content language": "Content language", "Content language": "زبان محتوی",
"Content country": "Content country", "Content country": "کشور محتوی",
"Website": "Website", "Website": "وب سایت",
"Visit website": "Visit website", "Visit website": "بازدید از وبگاه",
"New update available:": "New update available:" "New update available:": "به روز رسانی جدید در دسترس است:",
"Shuffle": "پخش تصادفی",
"Download album cover": "دانلود تصویر آلبوم",
"Art Resolution": "وضوح تصویر",
"Public": "عمومی",
"Private": "خصوصی",
"Collaborative": "چند همکاری",
"Edit playlist": "ویرایش لیست پخش",
"Save": "ذخیره",
"Edit": "ویرایش",
"Importer": "وارد کننده",
"Enter URL": "وارد کردن لینک",
"Currently only Spotify is supported and limited to 100 tracks.": "در حال حاظر فقط اسپاتیفای با محدودیت 100 قطعه ساپورت میشود.",
"Import into playlist": "وارد کردن به لیست پخش",
"Keep sidebar open": "نوار کناری را باز نگه دار",
"WARNING: Might require reload to work properly!": "اخطار: برای کارکرد مناسب نیازمند ریستارت است!",
"An error occured, URL might be invalid or unsupported.": "خطا رخ داد، لینک وارد شده اشتباه است یا پشتیبانی نمیشود.",
"Top tracks": "ترانه های برتر",
"Show all top tracks": "نمایش همه ترانه های برتر",
"Singles": "تکی ها",
"Album:": "آلبوم:",
"Artists:": "صاحب آثار:",
"Yes": "بله",
"No": "نه",
"Download Filename": "بارگیری اسم فایل",
"Language": "زبان",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Bansa ng nilalaman", "Content country": "Bansa ng nilalaman",
"Website": "Website", "Website": "Website",
"Visit website": "Bisitahin ang website", "Visit website": "Bisitahin ang website",
"New update available:": "May bagong update na:" "New update available:": "May bagong update na:",
"Shuffle": "Paghaluin",
"Download album cover": "Download album cover",
"Art Resolution": "Art Resolution",
"Public": "Public",
"Private": "Private",
"Collaborative": "Collaborative",
"Edit playlist": "Edit playlist",
"Save": "Save",
"Edit": "Edit",
"Importer": "Importer",
"Enter URL": "Enter URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Currently only Spotify is supported and limited to 100 tracks.",
"Import into playlist": "Import into playlist",
"Keep sidebar open": "Keep sidebar open",
"WARNING: Might require reload to work properly!": "WARNING: Might require reload to work properly!",
"An error occured, URL might be invalid or unsupported.": "An error occured, URL might be invalid or unsupported.",
"Top tracks": "Patok na mga kanta",
"Show all top tracks": "Ipakita lahat ng mga kanta",
"Singles": "Singles",
"Album:": "Album:",
"Artists:": "Artists:",
"Yes": "Oo",
"No": "Hindi",
"Download Filename": "Download Filename",
"Language": "Wika",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Pays du contenu", "Content country": "Pays du contenu",
"Website": "Site internet", "Website": "Site internet",
"Visit website": "Visiter le site internet", "Visit website": "Visiter le site internet",
"New update available:": "Nouvelle mise à jour disponible :" "New update available:": "Nouvelle mise à jour disponible :",
"Shuffle": "Mode aléatoire",
"Download album cover": "Télécharger la pochette de l'album",
"Art Resolution": "Résolution",
"Public": "Publique",
"Private": "Privée",
"Collaborative": "Collaborative",
"Edit playlist": "Editer la playlist",
"Save": "Enregistrer",
"Edit": "Éditer",
"Importer": "Importer",
"Enter URL": "Entrer l'URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Actuellement, seul Spotify est pris en charge et limité à 100 titres.",
"Import into playlist": "Importer dans la playlist",
"Keep sidebar open": "Garder le panneau latéral ouvert",
"WARNING: Might require reload to work properly!": "AVERTISSEMENT : Il peut être nécessaire de redémarrer pour fonctionner correctement !",
"An error occured, URL might be invalid or unsupported.": "Une erreur est survenue, l'URL est peut-être invalide ou non prise en charge.",
"Top tracks": "Titres populaires",
"Show all top tracks": "Afficher tous les titres populaires",
"Singles": "Singles",
"Album:": "Album :",
"Artists:": "Artistes :",
"Yes": "Oui",
"No": "Non",
"Download Filename": "Nom du fichier à télécharger",
"Language": "Langue",
"Background Image": "Image d'arrière-plan",
"Enter URL or absolute path. WARNING: Requires reload!": "Entrez l'URL ou le chemin absolu. ATTENTION : Nécessite un redémarrage !",
"LGBT Mode": "Mode LGBT",
"Native top bar": "Barre supérieure native",
"Requires restart of Freezer!": "Nécessite le redémarrage de Freezer !"
} }

View File

@ -1,141 +1,171 @@
{ {
"Home": "Home", "Home": "מסך הבית",
"Browse": "Browse", "Browse": "חיפוש",
"Library": "Library", "Library": "ספרייה",
"Tracks": "Tracks", "Tracks": "רצועות",
"Playlists": "Playlists", "Playlists": "רשימות השמעה",
"Albums": "Albums", "Albums": "אלבומים",
"Artists": "Artists", "Artists": "אמנים",
"More": "More", "More": "עוד",
"Settings": "Settings", "Settings": "הגדרות",
"Downloads": "Downloads", "Downloads": "הורדות",
"Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", "Search or paste Deezer URL. Use / to quickly focus.": "חפש או הדבק קישור מ־Deezer. השתמש ב־\" / \" להתמקדות מהירה.",
"Play": "Play", "Play": "הפעל",
"Add to library": "Add to library", "Add to library": "הוסף לספרייה",
"Download": "Download", "Download": "הורדה",
"fans": "fans", "fans": "תומכים",
"tracks": "tracks", "tracks": "רצועות",
"Quality": "Quality", "Quality": "איכות",
"Estimated size:": "Estimated size:", "Estimated size:": "גודל משוער:",
"Start downloading": "Start downloading", "Start downloading": "מתחיל הורדה",
"Cancel": "Cancel", "Cancel": "ביטול",
"Stream logging is disabled!": "Stream logging is disabled!", "Stream logging is disabled!": "הזרמת רישומים מושבתת!",
"Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", "Enable it in settings for history to work properly.": "אפשר זאת בהגדרות כדי שההיסטוריה תפעל כראוי.",
"History": "History", "History": "היסטוריה",
"Create new playlist": "Create new playlist", "Create new playlist": "צור רשימת השמעה חדשה",
"TRACKS": "TRACKS", "TRACKS": "רצועות",
"Sort by": "Sort by", "Sort by": "מיון לפי",
"Date Added": "Date Added", "Date Added": "תאריך הוספה",
"Name (A-Z)": "Name (A-Z)", "Name (A-Z)": "שם (א—ת)",
"Artist (A-Z)": "Artist (A-Z)", "Artist (A-Z)": "אמן (א—ת)",
"Album (A-Z)": "Album (A-Z)", "Album (A-Z)": "אלבום (א—ת)",
"Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", "Error loading lyrics or lyrics not found!": "שגיאה בניסיון לטעון את המילים או שלא נמצאו!",
"Create playlist": "Create playlist", "Create playlist": "צור רשימת השמעה",
"Create": "Create", "Create": "צור",
"Add to playlist": "Add to playlist", "Add to playlist": "הוסף לרשימת השמעה",
"Create new": "Create new", "Create new": "צור חדש",
"Remove": "Remove", "Remove": "הסר",
"Play next": "Play next", "Play next": "נגן הבא בתור",
"Add to queue": "Add to queue", "Add to queue": "הוסף לתור",
"Remove from library": "Remove from library", "Remove from library": "הסר מהספרייה",
"Remove from playlist": "Remove from playlist", "Remove from playlist": "הסר מרשימת ההשמעה",
"Play track mix": "Play track mix", "Play track mix": "נגן track mix",
"Go to": "Go to", "Go to": "עבור אל",
"Track Mix": "Track Mix", "Track Mix": "תמהיל רצועות",
"Duration": "Duration", "Duration": "משך זמן",
"Released": "Released", "Released": "שוחרר",
"Disk": "Disk", "Disk": "דיסק",
"albums": "albums", "albums": "אלבומים",
"Play top": "Play top", "Play top": "נגן את העליון",
"Radio": "Radio", "Radio": "רדיו",
"Show all albums": "Show all albums", "Show all albums": "הצג את כל האלבומים",
"Show all singles": "Show all singles", "Show all singles": "הצג את כל השירים",
"Show more": "Show more", "Show more": "הצג עוד",
"Downloaded": "Downloaded", "Downloaded": "ההורדה בוצעה",
"Queue": "Queue", "Queue": "תור",
"Total": "Total", "Total": "סה״כ",
"Stop": "Stop", "Stop": "עצור",
"Start": "Start", "Start": "התחל",
"Show folder": "Show folder", "Show folder": "הצג תיקייה",
"Clear queue": "Clear queue", "Clear queue": "נקה תור",
"Playing from": "Playing from", "Playing from": "מנגן מ",
"Info": "Info", "Info": "מידע",
"Lyrics": "Lyrics", "Lyrics": "מילות שיר",
"Track number": "Track number", "Track number": "מספר רצועה",
"Disk number": "Disk number", "Disk number": "מספר דיסק",
"Explicit": "Explicit", "Explicit": "בוטה",
"Source": "Source", "Source": "מקור",
"ID": "ID", "ID": "מספר מזהה",
"Error logging in!": "Error logging in!", "Error logging in!": "שגיאה בהתחברות!",
"Please try again later, or try another account.": "Please try again later, or try another account.", "Please try again later, or try another account.": "אנא נסה שוב מאוחר יותר, או נסה חשבון אחר.",
"Logout": "Logout", "Logout": "התנתקות",
"Login using browser": "Login using browser", "Login using browser": "התחבר/י דרך הדפדפן",
"Please login using your Deezer account:": "Please login using your Deezer account:", "Please login using your Deezer account:": "בבקשה התחבר/י באמצעות חשבון ה־Deezer שלך:",
"...or paste your ARL/Token below:": "...or paste your ARL/Token below:", "...or paste your ARL/Token below:": "...או הדבק/י את ה־ARL/Token שלך כאן:",
"ARL/Token": "ARL/Token", "ARL/Token": "ARL/Token",
"Login": "Login", "Login": "התחברות",
"By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", "By using this program, you disagree with Deezer's ToS.": "בשימוש בתוכנה זו, את/ה לא מסכימ/ה עם תנאי השירות של Deezer.",
"Only in Electron version!": "Only in Electron version!", "Only in Electron version!": "רק בגרסת Electron!",
"Search results for:": "Search results for:", "Search results for:": "תוצאות חיפוש עבור:",
"Error loading data!": "Error loading data!", "Error loading data!": "שגיאה בטעינת הנתונים!",
"Try again later!": "Try again later!", "Try again later!": "נסה שוב מאוחר יותר!",
"Search": "Search", "Search": "חיפוש",
"Streaming Quality": "Streaming Quality", "Streaming Quality": "איכות הזרמה",
"Download Quality": "Download Quality", "Download Quality": "איכות הורדה",
"Downloads Directory": "Downloads Directory", "Downloads Directory": "מיקום ההורדות",
"Simultaneous downloads": "Simultaneous downloads", "Simultaneous downloads": "מספר הורדות במקביל",
"Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", "Always show download confirm dialog before downloading.": "תמיד הראה תיבת אישור הורדה לפני ההורדה.",
"Show download dialog": "Show download dialog", "Show download dialog": "הצג תיבת דו שיח להורדה",
"Create folders for artists": "Create folders for artists", "Create folders for artists": "צור תיקייה לאמנים",
"Create folders for albums": "Create folders for albums", "Create folders for albums": "צור תיקייה לאלבומים",
"Download lyrics": "Download lyrics", "Download lyrics": "הורד קובץ מילים",
"Variables": "Variables", "Variables": "משתנים",
"UI": "UI", "UI": "ממשק",
"Show autocomplete in search": "Show autocomplete in search", "Show autocomplete in search": "הצג השלמה אוטומטית בחיפוש",
"Integrations": "Integrations", "Integrations": "שילובים",
"This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", "This allows listening history, flow and recommendations to work properly.": "מאפשר להיסטוריית ההשמעות, הזרימה וההמלצות לעבוד כראוי.",
"Log track listens to Deezer": "Log track listens to Deezer", "Log track listens to Deezer": "רישומי השמעות של רצועות ב־Deezer",
"Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", "Connect your LastFM account to allow scrobbling.": "חבר/י את חשבון LastFM שלך כדי לאפשר מיזוג.",
"Login with LastFM": "Login with LastFM", "Login with LastFM": "התחבר/י באמצעות LastFM",
"Disconnect LastFM": "Disconnect LastFM", "Disconnect LastFM": "התנתקות מ־LastFM",
"Requires restart to apply!": "Requires restart to apply!", "Requires restart to apply!": "יש להפעיל מחדש על מנת להחיל את השינויים!",
"Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", "Enable Discord Rich Presence, requires restart to toggle!": "אפשור חיבור ל־Discord Rich Presence, מצריך הפעלה מחדש!",
"Discord Rich Presence": "Discord Rich Presence", "Discord Rich Presence": "Discord Rich Presence",
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", "Enable Discord join button for syncing tracks, requires restart to toggle!": "אפשר את כפתור ההצטרפות של דיסקורד למטרת סנכרון רצונות. מצריך הפעלה מחדש!",
"Discord Join Button": "Discord Join Button", "Discord Join Button": "כפתור הצטרפות של Discord",
"Other": "Other", "Other": "אחר",
"Minimize to tray": "Minimize to tray", "Minimize to tray": "מזער למגש המערכת",
"Don't minimize to tray": "Don't minimize to tray", "Don't minimize to tray": "אל תמזער למגש המערכת",
"Close on exit": "Close on exit", "Close on exit": "סגור ביציאה",
"Settings saved!": "Settings saved!", "Settings saved!": "ההגדרות נשמרו בהצלחה!",
"Available only in Electron version!": "Available only in Electron version!", "Available only in Electron version!": "זמין רק בגרסת Electron!",
"Crossfade (ms)": "Crossfade (ms)", "Crossfade (ms)": "קרוספייד (מ\"ש)",
"Select primary color": "Select primary color", "Select primary color": "בחר צבע ראשי",
"Light theme": "Light theme", "Light theme": "ערכת נושא בהירה",
"Create folders for playlists": "Create folders for playlists", "Create folders for playlists": "צור תיקייה עבור רשימות השמעה",
"About": "About", "About": "אודות",
"Links:": "Links:", "Links:": "קישורים:",
"Telegram Releases": "Telegram Releases", "Telegram Releases": "שחרורי גרסאות ב־Telegram",
"Telegram Group": "Telegram Group", "Telegram Group": "קבוצת Telegram",
"Discord": "Discord", "Discord": "Discord",
"Telegram Android Group": "Telegram Android Group", "Telegram Android Group": "קבוצת Telegram למשתמשי Android",
"Credits:": "Credits:", "Credits:": "תודות:",
"Agree": "Agree", "Agree": "מסכים",
"Dismiss": "Dismiss", "Dismiss": "התעלם",
"Added to playlist!": "Added to playlist!", "Added to playlist!": "נוסף לרשימת ההשמעה!",
"Added to library!": "Added to library!", "Added to library!": "נוסף לספרייה!",
"Removed from library!": "Removed from library!", "Removed from library!": "הוסר מהספרייה!",
"Removed from playlist!": "Removed from playlist!", "Removed from playlist!": "הוסר מרשימת ההשמעה!",
"Playlist deleted!": "Playlist deleted!", "Playlist deleted!": "רשימת ההשמעה נמחקה!",
"Delete": "Delete", "Delete": "מחיקה",
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?", "Are you sure you want to delete this playlist?": "האם את/ה בטוח/ה שברצונך למחוק את רשימת ההשמעה הזו?",
"Force white tray icon": "Force white tray icon", "Force white tray icon": "הכרח ערכת נושא בהירה על סמל מגש המערכת",
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.", "Force default (white) tray icon if theme incorrectly detected. Requires restart.": "הכרח ברירת מחדל (לבן) על סמל מגש המערכת אם ערכת הנושא זוהתה באופן שגוי. מצריך הפעלה מחדש.",
"Share": "Share", "Share": "שיתוף",
"Settings quality": "Settings quality", "Settings quality": "הגדרות איכות",
"Content language": "Content language", "Content language": "שפת תוכן",
"Content country": "Content country", "Content country": "מדינת תוכן",
"Website": "Website", "Website": "אתר",
"Visit website": "Visit website", "Visit website": "בקר באתר",
"New update available:": "New update available:" "New update available:": "גרסה חדשה זמינה:",
"Shuffle": "אקראי",
"Download album cover": "הורד עטיפת אלבום",
"Art Resolution": "רזולוציה",
"Public": "ציבורי",
"Private": "פרטי",
"Collaborative": "תורמים",
"Edit playlist": "עריכת רשימת ההשמעה",
"Save": "שמור",
"Edit": "ערוך",
"Importer": "מייבא רשימות השמעה",
"Enter URL": "הזן קישור",
"Currently only Spotify is supported and limited to 100 tracks.": "כרגע, רק Spotify נתמך ומוגבל ל־100 רצועות.",
"Import into playlist": "יבא לכדי רשימת השמעה",
"Keep sidebar open": "השאר את הסרגל פתוח",
"WARNING: Might require reload to work properly!": "אזהרה: מצריך טעינה מחדש כדי שיעבוד כראוי!",
"An error occured, URL might be invalid or unsupported.": "שגיאה התרחשה, הקישור כנראה שגוי או לא נתמך.",
"Top tracks": "רצועות מובילות",
"Show all top tracks": "הראה את כל הרצועות המובילות",
"Singles": "שירים",
"Album:": "אלבום:",
"Artists:": "אומנים:",
"Yes": "כן",
"No": "לא",
"Download Filename": "הורד/י את שם הקובץ",
"Language": "שפה",
"Background Image": "תמונת רקע",
"Enter URL or absolute path. WARNING: Requires reload!": "הזן כתובת אתר או נתיב מוחלט. אזהרה: מחייב טעינה מחדש!",
"LGBT Mode": "מצב להט\"ב",
"Native top bar": "סרגל עליון מקומי",
"Requires restart of Freezer!": "דורש הפעלה מחדש של Freezer!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Content country", "Content country": "Content country",
"Website": "Website", "Website": "Website",
"Visit website": "Visit website", "Visit website": "Visit website",
"New update available:": "New update available:" "New update available:": "New update available:",
"Shuffle": "Shuffle",
"Download album cover": "Download album cover",
"Art Resolution": "Art Resolution",
"Public": "Public",
"Private": "Private",
"Collaborative": "Collaborative",
"Edit playlist": "Edit playlist",
"Save": "Save",
"Edit": "Edit",
"Importer": "Importer",
"Enter URL": "Enter URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Currently only Spotify is supported and limited to 100 tracks.",
"Import into playlist": "Import into playlist",
"Keep sidebar open": "Keep sidebar open",
"WARNING: Might require reload to work properly!": "WARNING: Might require reload to work properly!",
"An error occured, URL might be invalid or unsupported.": "An error occured, URL might be invalid or unsupported.",
"Top tracks": "Top tracks",
"Show all top tracks": "Show all top tracks",
"Singles": "Singles",
"Album:": "Album:",
"Artists:": "Artists:",
"Yes": "Yes",
"No": "No",
"Download Filename": "Download Filename",
"Language": "Language",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Zemlja sadržaja", "Content country": "Zemlja sadržaja",
"Website": "Web stranica", "Website": "Web stranica",
"Visit website": "Posjeti web-stranicu", "Visit website": "Posjeti web-stranicu",
"New update available:": "Dostupno je novo ažuriranje:" "New update available:": "Dostupno je novo ažuriranje:",
"Shuffle": "Nasumično",
"Download album cover": "Skini naslovnicu albuma",
"Art Resolution": "Rezolucija naslovnice",
"Public": "Javno",
"Private": "Privatno",
"Collaborative": "Suradnja",
"Edit playlist": "Uredi popis za reprodukciju",
"Save": "Spremi",
"Edit": "Uredi",
"Importer": "Uvoznik",
"Enter URL": "Unesite URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Trenutno je podržan samo Spotify i limitiran na 100 pjesama.",
"Import into playlist": "Uvezi u popis za reprodukciju",
"Keep sidebar open": "Drži bočnu traku otvorenom",
"WARNING: Might require reload to work properly!": "UPOZORENJE: Možda će zahtijevati ponovno pokretanje da bi radilo ispravno!",
"An error occured, URL might be invalid or unsupported.": "Dogodila se pogreška, URL je neispravan ili nepodržan.",
"Top tracks": "Najslušanije pjesme",
"Show all top tracks": "Prikaži sve najslušanije pjesme",
"Singles": "Singlovi",
"Album:": "Album:",
"Artists:": "Izvođači:",
"Yes": "Da",
"No": "Ne",
"Download Filename": "Naziv datoteke preuzimanja",
"Language": "Jezik",
"Background Image": "Pozadinska slika",
"Enter URL or absolute path. WARNING: Requires reload!": "Unesire URL ili apsolutnu putanju. UPOZORENJE: Zahtijeva ponovno pokretanje!",
"LGBT Mode": "LGBT način",
"Native top bar": "Izvorna gornja traka",
"Requires restart of Freezer!": "Zahtijeva ponovno pokretanje Freezera!"
} }

View File

@ -9,7 +9,7 @@
"More": "Továbbiak", "More": "Továbbiak",
"Settings": "Beállítások", "Settings": "Beállítások",
"Downloads": "Letöltések", "Downloads": "Letöltések",
"Search or paste Deezer URL. Use / to quickly focus.": "Keressen, vagy illesszen be Deezer URL linket. Használja a \"/\" karaktert, hogy gyorsan ősszpontosítson.", "Search or paste Deezer URL. Use / to quickly focus.": "Keressen, vagy illesszen be Deezer URL linket. Használja a \"/\" karaktert, hogy megfelelően rámutasson.",
"Play": "Lejátszás", "Play": "Lejátszás",
"Add to library": "Hozzáadás a könyvtárhoz", "Add to library": "Hozzáadás a könyvtárhoz",
"Download": "Letöltés", "Download": "Letöltés",
@ -19,7 +19,7 @@
"Estimated size:": "Becsült fájl méret:", "Estimated size:": "Becsült fájl méret:",
"Start downloading": "Letöltés indítása", "Start downloading": "Letöltés indítása",
"Cancel": "Mégse", "Cancel": "Mégse",
"Stream logging is disabled!": "Stream naplózás le van tiltva!", "Stream logging is disabled!": "A stream naplózás le van tiltva!",
"Enable it in settings for history to work properly.": "Engedélyezze a beállításokban, hogy az előzmények megfelelően működjenek.", "Enable it in settings for history to work properly.": "Engedélyezze a beállításokban, hogy az előzmények megfelelően működjenek.",
"History": "Előzmények", "History": "Előzmények",
"Create new playlist": "Új lejátszási lista létrehozása", "Create new playlist": "Új lejátszási lista létrehozása",
@ -36,106 +36,136 @@
"Create new": "Új létrehozása", "Create new": "Új létrehozása",
"Remove": "Eltávolítás", "Remove": "Eltávolítás",
"Play next": "Következő lejátszása", "Play next": "Következő lejátszása",
"Add to queue": "Hozzáadás a várólistához", "Add to queue": "Hozzáadás a listához",
"Remove from library": "Eltávolítás a könyvtárból", "Remove from library": "Eltávolítás a könyvtárból",
"Remove from playlist": "Eltávolítás a lejátszási listáról", "Remove from playlist": "Eltávolítás a lejátszási listáról",
"Play track mix": "Play track mix", "Play track mix": "Dal Mix lejátszása",
"Go to": "Go to", "Go to": "Ugrás",
"Track Mix": "Track Mix", "Track Mix": "Dal Mix",
"Duration": "Duration", "Duration": "Időtartam",
"Released": "Released", "Released": "Megjelent",
"Disk": "Disk", "Disk": "Lemez",
"albums": "albums", "albums": "albumok",
"Play top": "Play top", "Play top": "Legfelső lejátszása",
"Radio": "Radio", "Radio": "Rádió",
"Show all albums": "Show all albums", "Show all albums": "Összes album megjelenítése",
"Show all singles": "Show all singles", "Show all singles": "Összes dal megjelenítése",
"Show more": "Show more", "Show more": "Több megjelenítése",
"Downloaded": "Downloaded", "Downloaded": "Letöltött",
"Queue": "Queue", "Queue": "Várólista",
"Total": "Total", "Total": "Összes",
"Stop": "Stop", "Stop": "Megállít",
"Start": "Start", "Start": "Elindít",
"Show folder": "Show folder", "Show folder": "Mappa megjelenítése",
"Clear queue": "Clear queue", "Clear queue": "Lejátszási lista kiürítése",
"Playing from": "Playing from", "Playing from": "Lejátszás innentől",
"Info": "Info", "Info": "Információ",
"Lyrics": "Lyrics", "Lyrics": "Dalszöveg",
"Track number": "Track number", "Track number": "Dal sorszáma",
"Disk number": "Disk number", "Disk number": "Lemez száma",
"Explicit": "Explicit", "Explicit": "Szókimondó",
"Source": "Source", "Source": "Forrás",
"ID": "ID", "ID": "Azonosító",
"Error logging in!": "Error logging in!", "Error logging in!": "Hiba történt a bejelentkezéskor!",
"Please try again later, or try another account.": "Please try again later, or try another account.", "Please try again later, or try another account.": "Kérjük próbálja újra, vagy próbálkozzon egy másik fiókkal.",
"Logout": "Logout", "Logout": "Kijelentkezés",
"Login using browser": "Login using browser", "Login using browser": "Belépés böngészővel",
"Please login using your Deezer account:": "Please login using your Deezer account:", "Please login using your Deezer account:": "Kérjük lépjen be Deezer fiókjával:",
"...or paste your ARL/Token below:": "...or paste your ARL/Token below:", "...or paste your ARL/Token below:": "... vagy illessze be az ARL/Token-t:",
"ARL/Token": "ARL/Token", "ARL/Token": "ARL/Token",
"Login": "Login", "Login": "Belépés",
"By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", "By using this program, you disagree with Deezer's ToS.": "Szoftverünk használatával elutasítja a Deezer általános felhasználási feltételeit.",
"Only in Electron version!": "Only in Electron version!", "Only in Electron version!": "Csak az Electron verzióban elérhető!",
"Search results for:": "Search results for:", "Search results for:": "Keresési találatok:",
"Error loading data!": "Error loading data!", "Error loading data!": "Hiba az adatok betöltése közben!",
"Try again later!": "Try again later!", "Try again later!": "Kérjük próbálja meg később!",
"Search": "Search", "Search": "Keresés",
"Streaming Quality": "Streaming Quality", "Streaming Quality": "Streamelés minősége",
"Download Quality": "Download Quality", "Download Quality": "Letöltés minősége",
"Downloads Directory": "Downloads Directory", "Downloads Directory": "Letöltések helye",
"Simultaneous downloads": "Simultaneous downloads", "Simultaneous downloads": "Egyidejű letöltések",
"Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", "Always show download confirm dialog before downloading.": "Mindig mutassa a letöltési megerősítést letöltés előtt.",
"Show download dialog": "Show download dialog", "Show download dialog": "Letöltés párbeszédpanel mutatása",
"Create folders for artists": "Create folders for artists", "Create folders for artists": "Mappa létrehozása az előadónként",
"Create folders for albums": "Create folders for albums", "Create folders for albums": "Mappa létrehozása az albumonként",
"Download lyrics": "Download lyrics", "Download lyrics": "Dalszöveg letöltése",
"Variables": "Variables", "Variables": "Változók",
"UI": "UI", "UI": "Kezelőfelület",
"Show autocomplete in search": "Show autocomplete in search", "Show autocomplete in search": "Kereső találat kiegészítése",
"Integrations": "Integrations", "Integrations": "Integrációk",
"This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", "This allows listening history, flow and recommendations to work properly.": "Ezzel engedélyezi az előzményeket és, hogy a Flow illetve az ajánlások működjenek.",
"Log track listens to Deezer": "Log track listens to Deezer", "Log track listens to Deezer": "Dal előzmények rögzítése a Deezer számára",
"Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", "Connect your LastFM account to allow scrobbling.": "Csatlakoztassa LastFM fiókját, hogy engedélyezze az ajánlatokat.",
"Login with LastFM": "Login with LastFM", "Login with LastFM": "Belépés LastFM fiókkal",
"Disconnect LastFM": "Disconnect LastFM", "Disconnect LastFM": "LastFM fiók eltávolítása",
"Requires restart to apply!": "Requires restart to apply!", "Requires restart to apply!": "Újraindítás szükséges!",
"Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", "Enable Discord Rich Presence, requires restart to toggle!": "Discord Rich Presence engedélyezése, újraindítás szükséges!",
"Discord Rich Presence": "Discord Rich Presence", "Discord Rich Presence": "Discord Rich Presence",
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", "Enable Discord join button for syncing tracks, requires restart to toggle!": "Discord csatlakozás gomb engedélyezése dalok szinkronizálásához, újraindítás szükséges!",
"Discord Join Button": "Discord Join Button", "Discord Join Button": "Discord csatlakozás gomb",
"Other": "Other", "Other": "Egyéb",
"Minimize to tray": "Minimize to tray", "Minimize to tray": "Tálcára letétel",
"Don't minimize to tray": "Don't minimize to tray", "Don't minimize to tray": "Ne tegye le a tálcára",
"Close on exit": "Close on exit", "Close on exit": "Kilépés bezáráskor",
"Settings saved!": "Settings saved!", "Settings saved!": "Beállítások elmentve!",
"Available only in Electron version!": "Available only in Electron version!", "Available only in Electron version!": "Csak teljes változatban érhető el!",
"Crossfade (ms)": "Crossfade (ms)", "Crossfade (ms)": "Átfedés (ms)",
"Select primary color": "Select primary color", "Select primary color": "Elsődleges szín kiválasztása",
"Light theme": "Light theme", "Light theme": "Világos kinézet",
"Create folders for playlists": "Create folders for playlists", "Create folders for playlists": "Mappa létrehozása a lejátszólistákhoz",
"About": "About", "About": "Info",
"Links:": "Links:", "Links:": "Linkek:",
"Telegram Releases": "Telegram Releases", "Telegram Releases": "Telegram Kiadások",
"Telegram Group": "Telegram Group", "Telegram Group": "Telegram csoport",
"Discord": "Discord", "Discord": "Discord",
"Telegram Android Group": "Telegram Android Group", "Telegram Android Group": "Telegram Android csoport",
"Credits:": "Credits:", "Credits:": "Köszönet:",
"Agree": "Agree", "Agree": "Elfogad",
"Dismiss": "Dismiss", "Dismiss": "Elvet",
"Added to playlist!": "Added to playlist!", "Added to playlist!": "Lejátszó listához adva!",
"Added to library!": "Added to library!", "Added to library!": "Könyvtárhoz adva!",
"Removed from library!": "Removed from library!", "Removed from library!": "Eltávolítva a könyvtárból!",
"Removed from playlist!": "Removed from playlist!", "Removed from playlist!": "Eltávolítva a lejátszási listából!",
"Playlist deleted!": "Playlist deleted!", "Playlist deleted!": "Lejátszási lista törölve!",
"Delete": "Delete", "Delete": "Töröl",
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?", "Are you sure you want to delete this playlist?": "Biztosan ki szeretné törölni a lejátszási listát?",
"Force white tray icon": "Force white tray icon", "Force white tray icon": "Fehér tálcaikon használata mindenképpen",
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.", "Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Alap (fehér) tálcaikon használata ha a kinézet hibásan is lett észlelve. Újraindítás szükséges.",
"Share": "Share", "Share": "Megosztás",
"Settings quality": "Settings quality", "Settings quality": "Letöltési minőség",
"Content language": "Content language", "Content language": "Tartalom nyelve",
"Content country": "Content country", "Content country": "Tartalom országa",
"Website": "Website", "Website": "Weboldal",
"Visit website": "Visit website", "Visit website": "Weboldal megnyitása",
"New update available:": "New update available:" "New update available:": "Újabb frissítés elérhető:",
"Shuffle": "Véletlenszerű lejátszás",
"Download album cover": "Album borító letöltése",
"Art Resolution": "Borító felbontása",
"Public": "Nyilvános",
"Private": "Privát",
"Collaborative": "Együttműködés",
"Edit playlist": "Lejátszó lista szerkesztése",
"Save": "Mentés",
"Edit": "Szerkesztés",
"Importer": "Importáló",
"Enter URL": "Írjon be egy URL-t",
"Currently only Spotify is supported and limited to 100 tracks.": "Jelenleg csak a Spotify támogatott és 100 zeneszámra le van korlátozva.",
"Import into playlist": "Importálás a lejátszási listába",
"Keep sidebar open": "Oldalsó sáv nyitva tartása",
"WARNING: Might require reload to work properly!": "Figyelem: Alkalmazás újraindítása szükséges!",
"An error occured, URL might be invalid or unsupported.": "Egy hiba történet: a megadott URL érvénytelen vagy nem támogatott.",
"Top tracks": "Legjobb dalok",
"Show all top tracks": "Mutasd az összes legjobb dalt",
"Singles": "Kislemezek",
"Album:": "Album:",
"Artists:": "Előadó:",
"Yes": "Igen",
"No": "Nem",
"Download Filename": "Letöltési fájlnév",
"Language": "Nyelv",
"Background Image": "Háttérkép",
"Enter URL or absolute path. WARNING: Requires reload!": "Adjon meg URL címet vagy teljes elérési utat. FIGYELEM: Újraindítás szükséges!",
"LGBT Mode": "LGBT mód",
"Native top bar": "Natív felső sáv",
"Requires restart of Freezer!": "Újraindítás szükséges!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Wilayah konten", "Content country": "Wilayah konten",
"Website": "Situs", "Website": "Situs",
"Visit website": "Kunjungi situs web", "Visit website": "Kunjungi situs web",
"New update available:": "Pembaruan tersedia:" "New update available:": "Pembaruan tersedia:",
"Shuffle": "Putar acak",
"Download album cover": "Unduh cover album",
"Art Resolution": "Resolusi gambar",
"Public": "Publik",
"Private": "Pribadi",
"Collaborative": "Kolaboratif",
"Edit playlist": "Edit daftar putar",
"Save": "Simpan",
"Edit": "Edit",
"Importer": "Telah di impor",
"Enter URL": "Masukkan URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Saat ini hanya mendukung Spotify dan hanya terbatas 100 lagu.",
"Import into playlist": "Impor ke daftar putar",
"Keep sidebar open": "Biarkan sidebar tetap terbuka",
"WARNING: Might require reload to work properly!": "PERINGATAN: Mungkin perlu memuat ulang agar berfungsi dengan benar!",
"An error occured, URL might be invalid or unsupported.": "Terjadi kesalahan, URL mungkin tidak valid atau tidak didukung.",
"Top tracks": "Lagu teratas",
"Show all top tracks": "Tampilkan semua lagu teratas",
"Singles": "Single",
"Album:": "Album:",
"Artists:": "Artis:",
"Yes": "Iya",
"No": "Tidak",
"Download Filename": "Unduh Nama File",
"Language": "Bahasa",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Paese dei contenuti", "Content country": "Paese dei contenuti",
"Website": "Sito Web", "Website": "Sito Web",
"Visit website": "Visita il sito", "Visit website": "Visita il sito",
"New update available:": "Nuovo aggiornamento disponibile:" "New update available:": "Nuovo aggiornamento disponibile:",
"Shuffle": "Riproduzione casuale",
"Download album cover": "Scarica copertina album",
"Art Resolution": "Risoluzione immagini",
"Public": "Pubblica",
"Private": "Privata",
"Collaborative": "Collaborativa",
"Edit playlist": "Modifica playlist",
"Save": "Salva",
"Edit": "Modifica",
"Importer": "Importazione",
"Enter URL": "Inserisci URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Attualmente solo Spotify è supportato e limitato a 100 brani.",
"Import into playlist": "Importa nella playlist",
"Keep sidebar open": "Mantieni la barra laterale aperta",
"WARNING: Might require reload to work properly!": "ATTENZIONE: Potrebbe essere necessario ricaricare per funzionare correttamente!",
"An error occured, URL might be invalid or unsupported.": "Si è verificato un errore, l'URL potrebbe non essere valido o non supportato.",
"Top tracks": "Tracce più ascoltate",
"Show all top tracks": "Mostra tutte le tracce più ascoltate",
"Singles": "Singoli",
"Album:": "Album:",
"Artists:": "Artisti:",
"Yes": "Sì",
"No": "No",
"Download Filename": "Nome del file scaricato",
"Language": "Lingua",
"Background Image": "Immagine di sfondo",
"Enter URL or absolute path. WARNING: Requires reload!": "Inserisci l'URL o il percorso assoluto. ATTENZIONE: Richiede il ricaricamento!",
"LGBT Mode": "Modalità LGBT",
"Native top bar": "Barra superiore nativa",
"Requires restart of Freezer!": "Richiede il riavvio di Freezer!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "콘텐츠 국가", "Content country": "콘텐츠 국가",
"Website": "홈페이지", "Website": "홈페이지",
"Visit website": "홈페이지 방문하기", "Visit website": "홈페이지 방문하기",
"New update available:": "사용 가능한 업데이트가 있습니다:" "New update available:": "사용 가능한 업데이트가 있습니다:",
"Shuffle": "Shuffle",
"Download album cover": "Download album cover",
"Art Resolution": "Art Resolution",
"Public": "Public",
"Private": "Private",
"Collaborative": "Collaborative",
"Edit playlist": "Edit playlist",
"Save": "Save",
"Edit": "Edit",
"Importer": "Importer",
"Enter URL": "Enter URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Currently only Spotify is supported and limited to 100 tracks.",
"Import into playlist": "Import into playlist",
"Keep sidebar open": "Keep sidebar open",
"WARNING: Might require reload to work properly!": "WARNING: Might require reload to work properly!",
"An error occured, URL might be invalid or unsupported.": "An error occured, URL might be invalid or unsupported.",
"Top tracks": "Top tracks",
"Show all top tracks": "Show all top tracks",
"Singles": "Singles",
"Album:": "Album:",
"Artists:": "Artists:",
"Yes": "Yes",
"No": "No",
"Download Filename": "Download Filename",
"Language": "Language",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
} }

View File

@ -1,141 +1,171 @@
{ {
"Home": "Home", "Home": "Home",
"Browse": "Browse", "Browse": "Bladeren",
"Library": "Library", "Library": "Bibliotheek",
"Tracks": "Tracks", "Tracks": "Nummers",
"Playlists": "Playlists", "Playlists": "Afspeellijsten",
"Albums": "Albums", "Albums": "Albums",
"Artists": "Artists", "Artists": "Artiesten",
"More": "More", "More": "Meer",
"Settings": "Settings", "Settings": "Instellingen",
"Downloads": "Downloads", "Downloads": "Downloads",
"Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", "Search or paste Deezer URL. Use / to quickly focus.": "Zoek of plak Deezer URL. Gebruik \"/\" om snel te focussen.",
"Play": "Play", "Play": "Afspelen",
"Add to library": "Add to library", "Add to library": "Aan bibliotheek toevoegen",
"Download": "Download", "Download": "Downloaden",
"fans": "fans", "fans": "fans",
"tracks": "tracks", "tracks": "nummers",
"Quality": "Quality", "Quality": "Kwaliteit",
"Estimated size:": "Estimated size:", "Estimated size:": "Geschatte grootte:",
"Start downloading": "Start downloading", "Start downloading": "Downloaden starten",
"Cancel": "Cancel", "Cancel": "Annuleren",
"Stream logging is disabled!": "Stream logging is disabled!", "Stream logging is disabled!": "Stream logboek is uitgeschakeld!",
"Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", "Enable it in settings for history to work properly.": "Schakel het in bij instellingen om de geschiedenis correct te laten werken.",
"History": "History", "History": "Geschiedenis",
"Create new playlist": "Create new playlist", "Create new playlist": "Nieuwe afspeellijst aanmaken",
"TRACKS": "TRACKS", "TRACKS": "NUMMERS",
"Sort by": "Sort by", "Sort by": "Sorteren op",
"Date Added": "Date Added", "Date Added": "Datum Toegevoegd",
"Name (A-Z)": "Name (A-Z)", "Name (A-Z)": "Naam (A-Z)",
"Artist (A-Z)": "Artist (A-Z)", "Artist (A-Z)": "Artiest (A-Z)",
"Album (A-Z)": "Album (A-Z)", "Album (A-Z)": "Album (A-Z)",
"Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", "Error loading lyrics or lyrics not found!": "Fout bij het laden van songteksten of songteksten niet gevonden!",
"Create playlist": "Create playlist", "Create playlist": "Afspeellijst aanmaken",
"Create": "Create", "Create": "Aanmaken",
"Add to playlist": "Add to playlist", "Add to playlist": "Aan afspeellijst toevoegen",
"Create new": "Create new", "Create new": "Nieuw aanmaken",
"Remove": "Remove", "Remove": "Verwijderen",
"Play next": "Play next", "Play next": "Volgende nummer afspelen",
"Add to queue": "Add to queue", "Add to queue": "Aan wachtrij toevoegen",
"Remove from library": "Remove from library", "Remove from library": "Uit bibliotheek verwijderen",
"Remove from playlist": "Remove from playlist", "Remove from playlist": "Uit afspeellijst verwijderen",
"Play track mix": "Play track mix", "Play track mix": "Speel nummer mix",
"Go to": "Go to", "Go to": "Ga naar",
"Track Mix": "Track Mix", "Track Mix": "Nummer Mix",
"Duration": "Duration", "Duration": "Tijdsduur",
"Released": "Released", "Released": "Gepubliceerd",
"Disk": "Disk", "Disk": "Schijf",
"albums": "albums", "albums": "albums",
"Play top": "Play top", "Play top": "Top nummers afspelen",
"Radio": "Radio", "Radio": "Radio",
"Show all albums": "Show all albums", "Show all albums": "Alle albums tonen",
"Show all singles": "Show all singles", "Show all singles": "Alle singles weergeven",
"Show more": "Show more", "Show more": "Meer tonen",
"Downloaded": "Downloaded", "Downloaded": "Gedownload",
"Queue": "Queue", "Queue": "Wachtrij",
"Total": "Total", "Total": "Totaal",
"Stop": "Stop", "Stop": "Stoppen",
"Start": "Start", "Start": "Starten",
"Show folder": "Show folder", "Show folder": "Map weergeven",
"Clear queue": "Clear queue", "Clear queue": "Wachtrij wissen",
"Playing from": "Playing from", "Playing from": "Afspelen van",
"Info": "Info", "Info": "Informatie",
"Lyrics": "Lyrics", "Lyrics": "Songteksten",
"Track number": "Track number", "Track number": "Liednummer",
"Disk number": "Disk number", "Disk number": "Schijfnummer",
"Explicit": "Explicit", "Explicit": "Expliciet",
"Source": "Source", "Source": "Bron",
"ID": "ID", "ID": "ID",
"Error logging in!": "Error logging in!", "Error logging in!": "Fout bij aanmelden!",
"Please try again later, or try another account.": "Please try again later, or try another account.", "Please try again later, or try another account.": "Probeer het later opnieuw of probeer een andere account.",
"Logout": "Logout", "Logout": "Afmelden",
"Login using browser": "Login using browser", "Login using browser": "Aanmelden via browser",
"Please login using your Deezer account:": "Please login using your Deezer account:", "Please login using your Deezer account:": "Log in met je Deezer account:",
"...or paste your ARL/Token below:": "...or paste your ARL/Token below:", "...or paste your ARL/Token below:": "...of plak je ARL/Token hieronder:",
"ARL/Token": "ARL/Token", "ARL/Token": "ARL/Token",
"Login": "Login", "Login": "Aanmelden",
"By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", "By using this program, you disagree with Deezer's ToS.": "Door dit programma te gebruiken, ben je het niet eens met Deezer's ToS.",
"Only in Electron version!": "Only in Electron version!", "Only in Electron version!": "Alleen in de Electron-versie!",
"Search results for:": "Search results for:", "Search results for:": "Zoekresultaten voor:",
"Error loading data!": "Error loading data!", "Error loading data!": "Fout bij laden van gegevens!",
"Try again later!": "Try again later!", "Try again later!": "Probeer het later opnieuw!",
"Search": "Search", "Search": "Zoeken",
"Streaming Quality": "Streaming Quality", "Streaming Quality": "Stream Kwaliteit",
"Download Quality": "Download Quality", "Download Quality": "Download Kwaliteit",
"Downloads Directory": "Downloads Directory", "Downloads Directory": "Download map",
"Simultaneous downloads": "Simultaneous downloads", "Simultaneous downloads": "Gelijktijdige downloads",
"Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", "Always show download confirm dialog before downloading.": "Toon altijd het download bevestigingsvenster voordat je downloadt.",
"Show download dialog": "Show download dialog", "Show download dialog": "Downloadvenster tonen",
"Create folders for artists": "Create folders for artists", "Create folders for artists": "Mappen voor artiest aanmaken",
"Create folders for albums": "Create folders for albums", "Create folders for albums": "Mappen voor albums aanmaken",
"Download lyrics": "Download lyrics", "Download lyrics": "Songteksten downloaden",
"Variables": "Variables", "Variables": "Variabelen",
"UI": "UI", "UI": "Gebruikersinterface",
"Show autocomplete in search": "Show autocomplete in search", "Show autocomplete in search": "Automatisch aanvullen weergeven bij zoeken",
"Integrations": "Integrations", "Integrations": "Integraties",
"This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", "This allows listening history, flow and recommendations to work properly.": "Dit zorgt ervoor dat je luistergeschiedenis, flow and aanbevelingen correct werken.",
"Log track listens to Deezer": "Log track listens to Deezer", "Log track listens to Deezer": "Log geluisterde nummers naar Deezer",
"Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", "Connect your LastFM account to allow scrobbling.": "Koppel je LastFM account om scrobbling toe te staan.",
"Login with LastFM": "Login with LastFM", "Login with LastFM": "Aanmelden bij LastFM",
"Disconnect LastFM": "Disconnect LastFM", "Disconnect LastFM": "Afbreken van LastFM-connectie",
"Requires restart to apply!": "Requires restart to apply!", "Requires restart to apply!": "Vereist herstart om toe te passen!",
"Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", "Enable Discord Rich Presence, requires restart to toggle!": "Schakel Discord Rich Presence in, herstart vereist om het in te schakelen!",
"Discord Rich Presence": "Discord Rich Presence", "Discord Rich Presence": "Discord Rich Presence",
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", "Enable Discord join button for syncing tracks, requires restart to toggle!": "Schakel Discord-join knop in voor het synchroniseren van nummers, herstart vereist om het in te schakelen!",
"Discord Join Button": "Discord Join Button", "Discord Join Button": "Discord Join Knop",
"Other": "Other", "Other": "Overig",
"Minimize to tray": "Minimize to tray", "Minimize to tray": "Minimaliseer naar systeemvak",
"Don't minimize to tray": "Don't minimize to tray", "Don't minimize to tray": "Niet minimaliseren naar systeemvak",
"Close on exit": "Close on exit", "Close on exit": "Sluiten bij afsluiten",
"Settings saved!": "Settings saved!", "Settings saved!": "Instellingen opgeslagen!",
"Available only in Electron version!": "Available only in Electron version!", "Available only in Electron version!": "Alleen beschikbaar in de Electron versie!",
"Crossfade (ms)": "Crossfade (ms)", "Crossfade (ms)": "Crossfade (ms)",
"Select primary color": "Select primary color", "Select primary color": "Selecteer primaire kleur",
"Light theme": "Light theme", "Light theme": "Lichte thema",
"Create folders for playlists": "Create folders for playlists", "Create folders for playlists": "Mappen voor afspeellijsten maken",
"About": "About", "About": "Over",
"Links:": "Links:", "Links:": "Links:",
"Telegram Releases": "Telegram Releases", "Telegram Releases": "Telegram Releases",
"Telegram Group": "Telegram Group", "Telegram Group": "Telegram Groep",
"Discord": "Discord", "Discord": "Discord",
"Telegram Android Group": "Telegram Android Group", "Telegram Android Group": "Telegram Android Groep",
"Credits:": "Credits:", "Credits:": "Met dank aan:",
"Agree": "Agree", "Agree": "Akkoord gaan",
"Dismiss": "Dismiss", "Dismiss": "Negeren",
"Added to playlist!": "Added to playlist!", "Added to playlist!": "Aan afspeellijst toegevoegd!",
"Added to library!": "Added to library!", "Added to library!": "Aan bibliotheek toegevoegd!",
"Removed from library!": "Removed from library!", "Removed from library!": "Uit de bibliotheek verwijderd!",
"Removed from playlist!": "Removed from playlist!", "Removed from playlist!": "Uit afspeellijst verwijderd!",
"Playlist deleted!": "Playlist deleted!", "Playlist deleted!": "Afspeellijst verwijderd!",
"Delete": "Delete", "Delete": "Verwijderen",
"Are you sure you want to delete this playlist?": "Are you sure you want to delete this playlist?", "Are you sure you want to delete this playlist?": "Weet je zeker dat je deze afspeellijst wil verwijderen?",
"Force white tray icon": "Force white tray icon", "Force white tray icon": "Forceer wit systeemvak icoon",
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Force default (white) tray icon if theme incorrectly detected. Requires restart.", "Force default (white) tray icon if theme incorrectly detected. Requires restart.": "Forceer standaard (wit) pictogram in het systeemvak als thema onjuist gedetecteerd wordt. Herstart vereist.",
"Share": "Share", "Share": "Delen",
"Settings quality": "Settings quality", "Settings quality": "Kwaliteit instellingen",
"Content language": "Content language", "Content language": "Taal van inhoud",
"Content country": "Content country", "Content country": "Land van inhoud",
"Website": "Website", "Website": "Website",
"Visit website": "Visit website", "Visit website": "Website bezoeken",
"New update available:": "New update available:" "New update available:": "Nieuwe update beschikbaar:",
"Shuffle": "Shuffle",
"Download album cover": "Albumhoes downloaden",
"Art Resolution": "Illustratie resolutie",
"Public": "Openbaar",
"Private": "Privé",
"Collaborative": "Samenwerkend",
"Edit playlist": "Afspeellijst bewerken",
"Save": "Opslaan",
"Edit": "Bewerken",
"Importer": "Importeerder",
"Enter URL": "URL invoeren",
"Currently only Spotify is supported and limited to 100 tracks.": "Momenteel wordt alleen Spotify ondersteund; deze is beperkt tot 100 nummers.",
"Import into playlist": "In afspeellijst importeren",
"Keep sidebar open": "Zijbalk open laten",
"WARNING: Might require reload to work properly!": "WAARSCHUWING: Herladen mogelijk vereist om correct te werken!",
"An error occured, URL might be invalid or unsupported.": "Er is een fout opgetreden, URL kan ongeldig zijn of wordt niet ondersteund.",
"Top tracks": "Top nummers",
"Show all top tracks": "Alle topnummers weergeven",
"Singles": "Singles",
"Album:": "Album:",
"Artists:": "Artiesten:",
"Yes": "Ja",
"No": "Nee",
"Download Filename": "Bestandsnaam Downloaden",
"Language": "Taal",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Kraj treści", "Content country": "Kraj treści",
"Website": "Strona internetowa", "Website": "Strona internetowa",
"Visit website": "Odwiedź stronę internetową", "Visit website": "Odwiedź stronę internetową",
"New update available:": "Dostępna jest nowa aktualizacja:" "New update available:": "Dostępna jest nowa aktualizacja:",
"Shuffle": "Losowo",
"Download album cover": "Pobierz okładkę albumu",
"Art Resolution": "Rozdzielczość Obrazu",
"Public": "Publiczne",
"Private": "Prywatne",
"Collaborative": "Współpraca",
"Edit playlist": "Edytuj playlistę",
"Save": "Zapisz",
"Edit": "Edytuj",
"Importer": "Importer",
"Enter URL": "Wprowadź adres URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Obecnie obsługuje tylko Spotify i maksymalnie 100 utworów.",
"Import into playlist": "Importuj na playlistę",
"Keep sidebar open": "Panel boczny zawsze otwarty",
"WARNING: Might require reload to work properly!": "UWAGA: Może wymagać ponownego uruchomienia, by działać poprawnie!",
"An error occured, URL might be invalid or unsupported.": "Wystąpił błąd, adres URL może być nieprawidłowy lub nieobsługiwany.",
"Top tracks": "Najpopularniejsze utwory",
"Show all top tracks": "Pokaż wszystkie najpopularniejsze utwory",
"Singles": "Single",
"Album:": "Album:",
"Artists:": "Wykonawcy:",
"Yes": "Tak",
"No": "Nie",
"Download Filename": "Nazwa pobieranego pliku",
"Language": "Język",
"Background Image": "Obraz w tle",
"Enter URL or absolute path. WARNING: Requires reload!": "Wprowadź adres URL lub całą ścieżkę pliku. UWAGA: Wymaga ponownego uruchomienia!",
"LGBT Mode": "Tryb LGBT",
"Native top bar": "Natywny górny pasek",
"Requires restart of Freezer!": "Wymaga ponownego uruchomiania Freezera!"
} }

View File

@ -19,7 +19,7 @@
"Estimated size:": "Tempo estimado:", "Estimated size:": "Tempo estimado:",
"Start downloading": "Iniciar download", "Start downloading": "Iniciar download",
"Cancel": "Cancelar", "Cancel": "Cancelar",
"Stream logging is disabled!": "O registro de depuração extra está desativado!", "Stream logging is disabled!": "Registro de transmissão está desativado!",
"Enable it in settings for history to work properly.": "Habilite nas configurações para que o histórico funcione corretamente.", "Enable it in settings for history to work properly.": "Habilite nas configurações para que o histórico funcione corretamente.",
"History": "Histórico", "History": "Histórico",
"Create new playlist": "Criar nova playlist", "Create new playlist": "Criar nova playlist",
@ -41,12 +41,12 @@
"Remove from playlist": "Remover da playlist", "Remove from playlist": "Remover da playlist",
"Play track mix": "Reproduzir mix da faixa", "Play track mix": "Reproduzir mix da faixa",
"Go to": "Ir para", "Go to": "Ir para",
"Track Mix": "Faixa Mix", "Track Mix": "Mix da Faixa",
"Duration": "Duração", "Duration": "Duração",
"Released": "Lançamento", "Released": "Lançamento",
"Disk": "Disco", "Disk": "Disco",
"albums": "álbuns", "albums": "álbuns",
"Play top": "Reproduzir no topo", "Play top": "Reproduzir top",
"Radio": "Rádio", "Radio": "Rádio",
"Show all albums": "Mostrar todos os álbuns", "Show all albums": "Mostrar todos os álbuns",
"Show all singles": "Mostrar todos os singles", "Show all singles": "Mostrar todos os singles",
@ -61,12 +61,12 @@
"Playing from": "Reproduzindo de", "Playing from": "Reproduzindo de",
"Info": "Informações", "Info": "Informações",
"Lyrics": "Letra", "Lyrics": "Letra",
"Track number": "Número de faixa", "Track number": "Número da faixa",
"Disk number": "Numero de disco", "Disk number": "Número do disco",
"Explicit": "Explícito", "Explicit": "Explícito",
"Source": "Fonte", "Source": "Fonte",
"ID": "Identificação", "ID": "Identificação",
"Error logging in!": "Erro de login!", "Error logging in!": "Erro no login!",
"Please try again later, or try another account.": "Por favor, tente novamente mais tarde ou tente outra conta.", "Please try again later, or try another account.": "Por favor, tente novamente mais tarde ou tente outra conta.",
"Logout": "Desconectar", "Logout": "Desconectar",
"Login using browser": "Login usando o navegador", "Login using browser": "Login usando o navegador",
@ -75,14 +75,14 @@
"ARL/Token": "ARL/Token", "ARL/Token": "ARL/Token",
"Login": "Login", "Login": "Login",
"By using this program, you disagree with Deezer's ToS.": "Ao usar este programa, você discorda dos termos e condições de uso do Deezer.", "By using this program, you disagree with Deezer's ToS.": "Ao usar este programa, você discorda dos termos e condições de uso do Deezer.",
"Only in Electron version!": "Apenas na versão do Electron!", "Only in Electron version!": "Somente na versão Electron!",
"Search results for:": "Resultado de pesquisa para:", "Search results for:": "Resultado de pesquisa para:",
"Error loading data!": "Erro ao carregar dados!", "Error loading data!": "Erro ao carregar dados!",
"Try again later!": "Tente novamente mais tarde!", "Try again later!": "Tente novamente mais tarde!",
"Search": "Pesquisa", "Search": "Pesquisa",
"Streaming Quality": "Qualidade do streaming", "Streaming Quality": "Qualidade da Transmissão",
"Download Quality": "Qualiadade do download", "Download Quality": "Qualidade do Download",
"Downloads Directory": "Pasta de Download", "Downloads Directory": "Diretório de Downloads",
"Simultaneous downloads": "Downloads simultâneos", "Simultaneous downloads": "Downloads simultâneos",
"Always show download confirm dialog before downloading.": "Sempre mostrar diálogo de confirmação de download antes de baixar.", "Always show download confirm dialog before downloading.": "Sempre mostrar diálogo de confirmação de download antes de baixar.",
"Show download dialog": "Mostrar diálogo de download", "Show download dialog": "Mostrar diálogo de download",
@ -90,7 +90,7 @@
"Create folders for albums": "Criar pastas para álbuns", "Create folders for albums": "Criar pastas para álbuns",
"Download lyrics": "Baixar letra", "Download lyrics": "Baixar letra",
"Variables": "Variáveis", "Variables": "Variáveis",
"UI": "IU", "UI": "Interface do Usuário",
"Show autocomplete in search": "Mostrar autocompletar na pesquisa", "Show autocomplete in search": "Mostrar autocompletar na pesquisa",
"Integrations": "Integrações", "Integrations": "Integrações",
"This allows listening history, flow and recommendations to work properly.": "Isto permite que o histórico de ouvidas, flow e recomendações funcionem corretamente.", "This allows listening history, flow and recommendations to work properly.": "Isto permite que o histórico de ouvidas, flow e recomendações funcionem corretamente.",
@ -98,19 +98,19 @@
"Connect your LastFM account to allow scrobbling.": "Conecte sua conta do LastFM para permitir o scrobbling.", "Connect your LastFM account to allow scrobbling.": "Conecte sua conta do LastFM para permitir o scrobbling.",
"Login with LastFM": "Login com LastFM", "Login with LastFM": "Login com LastFM",
"Disconnect LastFM": "Desconectar LastFM", "Disconnect LastFM": "Desconectar LastFM",
"Requires restart to apply!": "Requer reinicialização do aplicativo para aplicar!", "Requires restart to apply!": "Requer reinicialização para aplicar!",
"Enable Discord Rich Presence, requires restart to toggle!": "Ativar o Rich Presence do Discord, requer reiniciar para alternar!", "Enable Discord Rich Presence, requires restart to toggle!": "Ativar o Rich Presence do Discord, requer reinicialização para alternar!",
"Discord Rich Presence": "Discord Rich Presence", "Discord Rich Presence": "Discord Rich Presence",
"Enable Discord join button for syncing tracks, requires restart to toggle!": "Ativar o botão de adesão do Discord para sincronizar faixas requer reinicialização para alternar!", "Enable Discord join button for syncing tracks, requires restart to toggle!": "Ativar o botão de entrar no Discord para sincronizar faixas, requer reinicialização para alternar!",
"Discord Join Button": "Botão de Entrada Discord", "Discord Join Button": "Botão de Entrar do Discord",
"Other": "Outro", "Other": "Outro",
"Minimize to tray": "Minimizar para a bandeja", "Minimize to tray": "Minimizar para a bandeja",
"Don't minimize to tray": "Não minimizar para a bandeja", "Don't minimize to tray": "Não minimizar para a bandeja",
"Close on exit": "Fechar ao sair", "Close on exit": "Fechar ao sair",
"Settings saved!": "Configurações salvas!", "Settings saved!": "Configurações salvas!",
"Available only in Electron version!": "Disponível apenas na versão completa!", "Available only in Electron version!": "Disponível somente na versão Electron!",
"Crossfade (ms)": "Transição suave (ms)", "Crossfade (ms)": "Transição gradual (ms)",
"Select primary color": "Escolha a cor primária", "Select primary color": "Selecione a cor primária",
"Light theme": "Tema Claro", "Light theme": "Tema Claro",
"Create folders for playlists": "Criar pastas para playlists", "Create folders for playlists": "Criar pastas para playlists",
"About": "Sobre", "About": "Sobre",
@ -137,5 +137,35 @@
"Content country": "País do conteúdo", "Content country": "País do conteúdo",
"Website": "Site", "Website": "Site",
"Visit website": "Visite o site", "Visit website": "Visite o site",
"New update available:": "Nova atualização disponível:" "New update available:": "Nova atualização disponível:",
"Shuffle": "Aleatório",
"Download album cover": "Baixar arte do álbum",
"Art Resolution": "Resolução da Arte",
"Public": "Pública",
"Private": "Privada",
"Collaborative": "Colaborativa",
"Edit playlist": "Editar playlist",
"Save": "Salvar",
"Edit": "Editar",
"Importer": "Importador",
"Enter URL": "Introduzir ARL",
"Currently only Spotify is supported and limited to 100 tracks.": "Atualmente apenas o Spotify é suportado e limitado a 100 faixas.",
"Import into playlist": "Importar playlist",
"Keep sidebar open": "Manter a barra lateral aberta",
"WARNING: Might require reload to work properly!": "AVISO: Pode ser necessário recarregar para funcionar corretamente!",
"An error occured, URL might be invalid or unsupported.": "Ocorreu um erro, a URL pode ser inválida ou não suportada.",
"Top tracks": "Top faixas",
"Show all top tracks": "Mostrar todas as faixas",
"Singles": "Singles",
"Album:": "Álbum:",
"Artists:": "Artistas:",
"Yes": "Sim",
"No": "Não",
"Download Filename": "Nomenclatura de download",
"Language": "Idioma",
"Background Image": "Imagem de Fundo",
"Enter URL or absolute path. WARNING: Requires reload!": "Digite URL ou caminho absoluto. ATENÇÃO: Requer recarregar!",
"LGBT Mode": "Modo LGBT",
"Native top bar": "Barra superior nativa",
"Requires restart of Freezer!": "Requer reinicialização do Freezer!"
} }

View File

@ -1,5 +1,5 @@
{ {
"Home": "Home", "Home": "Acasă",
"Browse": "Caută", "Browse": "Caută",
"Library": "Librărie", "Library": "Librărie",
"Tracks": "Piese", "Tracks": "Piese",
@ -137,5 +137,35 @@
"Content country": "Țara conținutului", "Content country": "Țara conținutului",
"Website": "Website", "Website": "Website",
"Visit website": "Vizitați site-ul web", "Visit website": "Vizitați site-ul web",
"New update available:": "Actualizare nouă disponibilă:" "New update available:": "Actualizare nouă disponibilă:",
"Shuffle": "Amestecare",
"Download album cover": "Descarcă coperta albumului",
"Art Resolution": "Rezoluția Imaginii",
"Public": "Public",
"Private": "Privat",
"Collaborative": "Colaborativ",
"Edit playlist": "Editează playlist-ul",
"Save": "Salvează",
"Edit": "Editează",
"Importer": "Importator",
"Enter URL": "Introduceţi URL-ul",
"Currently only Spotify is supported and limited to 100 tracks.": "La moment, suportăm doar Spotify cu o limită de 100 de piese.",
"Import into playlist": "Importă în playlist",
"Keep sidebar open": "Păstrați meniul lateral deschis",
"WARNING: Might require reload to work properly!": "ATENȚIE: S-ar putea să fie necesar reîncărcarea aplicației pentru a funcționa adecvat!",
"An error occured, URL might be invalid or unsupported.": "A apărut o eroare, URL-ul ar putea fi invalid sau nesuportat.",
"Top tracks": "Piesele de top",
"Show all top tracks": "Arată toate piesele de top",
"Singles": "Single-uri",
"Album:": "Albumul:",
"Artists:": "Artiștii:",
"Yes": "Da",
"No": "Nu",
"Download Filename": "Denumirea Descărcării",
"Language": "Limba",
"Background Image": "Imagine de fundal",
"Enter URL or absolute path. WARNING: Requires reload!": "Introduceţi URL-ul sau calea completă. ATENŢIE: Necesită reîncărcare!",
"LGBT Mode": "Regim LGBT",
"Native top bar": "Bara de sus",
"Requires restart of Freezer!": "Necesită repornirea aplicației!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Страна контента", "Content country": "Страна контента",
"Website": "Веб-сайт", "Website": "Веб-сайт",
"Visit website": "Посетить веб-сайт", "Visit website": "Посетить веб-сайт",
"New update available:": "Доступна новая версия:" "New update available:": "Доступна новая версия:",
"Shuffle": "Перемешать",
"Download album cover": "Загрузить обложку альбома",
"Art Resolution": "Разрешение обложки",
"Public": "Публичный",
"Private": "Приватный",
"Collaborative": "Совместное",
"Edit playlist": "Изменить плейлист",
"Save": "Сохранить",
"Edit": "Редактировать",
"Importer": "Импорт плейлистов",
"Enter URL": "Введите ссылку",
"Currently only Spotify is supported and limited to 100 tracks.": "В настоящее время поддерживается только Spotify. Не более 100 треков в плейлисте.",
"Import into playlist": "Импортировать в плейлист",
"Keep sidebar open": "Не закрывать боковое меню",
"WARNING: Might require reload to work properly!": "Внимание! Может потребоваться перезапуск для правильной работы.",
"An error occured, URL might be invalid or unsupported.": "Ошибка, URL недействителен или не поддерживается.",
"Top tracks": "Популярные треки",
"Show all top tracks": "Показать все популярные треки",
"Singles": "Синглы",
"Album:": "Альбом:",
"Artists:": "Исполнители:",
"Yes": "Да",
"No": "Нет",
"Download Filename": "Скачать шаблон для названия",
"Language": "Язык",
"Background Image": "Фоновое изображение",
"Enter URL or absolute path. WARNING: Requires reload!": "Введите URL или полный путь. ВНИМАНИЕ: Требуется перезагрузка!",
"LGBT Mode": "Режим ЛГБТ",
"Native top bar": "Верхнюю панель",
"Requires restart of Freezer!": "Требуется перезагрузка!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Krajina obsahu", "Content country": "Krajina obsahu",
"Website": "Webová stránka", "Website": "Webová stránka",
"Visit website": "Navštíviť webovú stránku", "Visit website": "Navštíviť webovú stránku",
"New update available:": "Nová aktualizácia k dispozícii:" "New update available:": "Nová aktualizácia k dispozícii:",
"Shuffle": "Náhodne prehrať",
"Download album cover": "Prevziať obal albumu",
"Art Resolution": "Rozlíšenie",
"Public": "Verejné",
"Private": "Sukromné",
"Collaborative": "Spolupráca",
"Edit playlist": "Upraviť playlist",
"Save": "Uložiť",
"Edit": "Upraviť",
"Importer": "Importovať",
"Enter URL": "Zadajte URL adresu",
"Currently only Spotify is supported and limited to 100 tracks.": "Momentálne je podporované iba Spotify s limitom 100 skladieb.",
"Import into playlist": "Importovať do playlistu",
"Keep sidebar open": "Nechať bočný panel otvorený",
"WARNING: Might require reload to work properly!": "UPOZORNENIE: Môže vyžadovať obnovenie pre správnu funkčnosť!",
"An error occured, URL might be invalid or unsupported.": "Chybná alebo nepodporovaná URL adresa.",
"Top tracks": "Najlepšie skladby",
"Show all top tracks": "Zobraziť všetky najlepšie skladby",
"Singles": "Single",
"Album:": "Album:",
"Artists:": "Interpreti:",
"Yes": "Áno",
"No": "Nie",
"Download Filename": "Stiahnuť názov súboru",
"Language": "Jazyk",
"Background Image": "Obrázok pozadia",
"Enter URL or absolute path. WARNING: Requires reload!": "Vložte URL alebo cestu. VAROVANIE: Vyžaduje obnovenie!",
"LGBT Mode": "LGBT mód",
"Native top bar": "Natívna horná lišta",
"Requires restart of Freezer!": "Vyžaduje sa reštart aplikácie!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Koda države", "Content country": "Koda države",
"Website": "Spletna stran", "Website": "Spletna stran",
"Visit website": "Obišči spletno stran", "Visit website": "Obišči spletno stran",
"New update available:": "Na voljo je nova posodobitev:" "New update available:": "Na voljo je nova posodobitev:",
"Shuffle": "Naključno",
"Download album cover": "Shrani sličico albuma",
"Art Resolution": "Ločljivost sličice",
"Public": "Javno",
"Private": "Zasebno",
"Collaborative": "Sodelovalno",
"Edit playlist": "Uredi seznam predvajanja",
"Save": "Shrani",
"Edit": "Uredi",
"Importer": "Uvoznik",
"Enter URL": "Vnesite URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Trenutno je podprt samo Spotify in ima omejitev 100 pesmi.",
"Import into playlist": "Uvozi na seznam predvajanja",
"Keep sidebar open": "Obdrži odprto stransko vrstico",
"WARNING: Might require reload to work properly!": "OPOZORILO: Potrebuje ponovni zagon aplikacije za učinkovanje!",
"An error occured, URL might be invalid or unsupported.": "Pojavila se je napaka, URL je lahko napačen ali nepodprt.",
"Top tracks": "Najboljše skladbe",
"Show all top tracks": "Prikaži vse najboljše skaldbe",
"Singles": "Singli",
"Album:": "Album:",
"Artists:": "Izvajalci:",
"Yes": "Da",
"No": "Ne",
"Download Filename": "Imena prenosa",
"Language": "Jezik",
"Background Image": "Slika za ozadje",
"Enter URL or absolute path. WARNING: Requires reload!": "Vpiši URL ali absolutno pot. OPOZORILO: Zahtev ponovno nalaganje!",
"LGBT Mode": "LGBT način",
"Native top bar": "Sistemska zgornja vrstica",
"Requires restart of Freezer!": "Potrebuje ponovni zagon Freezerja!"
} }

View File

@ -46,7 +46,7 @@
"Released": "Yayınlandı", "Released": "Yayınlandı",
"Disk": "Disk", "Disk": "Disk",
"albums": "albümler", "albums": "albümler",
"Play top": "Play top", "Play top": "Popüler olanları çal",
"Radio": "Radyo", "Radio": "Radyo",
"Show all albums": "Tüm albümleri göster", "Show all albums": "Tüm albümleri göster",
"Show all singles": "Tüm şarkıları göster", "Show all singles": "Tüm şarkıları göster",
@ -137,5 +137,35 @@
"Content country": "İçerik ülkesi", "Content country": "İçerik ülkesi",
"Website": "İnternet sitesi", "Website": "İnternet sitesi",
"Visit website": "Web sitesine git", "Visit website": "Web sitesine git",
"New update available:": "Yeni güncelleme mevcut:" "New update available:": "Yeni güncelleme mevcut:",
"Shuffle": "Karışık çal",
"Download album cover": "Albüm kapağını indir",
"Art Resolution": "Art Çözüm",
"Public": "Herkese Açık",
"Private": "Gizli",
"Collaborative": "Paylaşılan",
"Edit playlist": "Çalma listesini düzenle",
"Save": "Kaydet",
"Edit": "Düzenle",
"Importer": "Aktarıcı",
"Enter URL": "URL girin",
"Currently only Spotify is supported and limited to 100 tracks.": "Şimdilik sadece Spotify destekleniyor ve 100 parça sınırı mevcut.",
"Import into playlist": "Çalma listesine aktar",
"Keep sidebar open": "Kenar çubuğu açık kalsın",
"WARNING: Might require reload to work properly!": "DİKKAT: Düzgün çalışması için yeniden yükleme gerekebilir!",
"An error occured, URL might be invalid or unsupported.": "Bir hata oluştu, URL geçersiz veya desteklenmiyor olabilir.",
"Top tracks": "Popüler şarkılar",
"Show all top tracks": "En çok dinlenenleri göster",
"Singles": "Single'lar",
"Album:": "Albümler:",
"Artists:": "Sanatçılar:",
"Yes": "Evet",
"No": "Hayır",
"Download Filename": "Adlandırma taslağı indir",
"Language": "Dil",
"Background Image": "Arka plan resmi",
"Enter URL or absolute path. WARNING: Requires reload!": "URL'yi veya mutlak yolu girin. UYARI: yeniden yükleme gerektirir!",
"LGBT Mode": "LGBT Modu",
"Native top bar": "Yerel üst çubuk",
"Requires restart of Freezer!": "Freezer'ın yeniden başlatılmasını gerektirir!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Країна контенту", "Content country": "Країна контенту",
"Website": "Веб-сторінка", "Website": "Веб-сторінка",
"Visit website": "Відвідати веб-сторінку", "Visit website": "Відвідати веб-сторінку",
"New update available:": "Доступне оновлення:" "New update available:": "Доступне оновлення:",
"Shuffle": "Перемішати",
"Download album cover": "Завантажити обкладинку альбому",
"Art Resolution": "Розширення обкладинки",
"Public": "Публічний",
"Private": "Приватний",
"Collaborative": "Спільний",
"Edit playlist": "Редагувати плейлист",
"Save": "Зберегти",
"Edit": "Редагувати",
"Importer": "Імпорт плейлистів",
"Enter URL": "Введіть посилання",
"Currently only Spotify is supported and limited to 100 tracks.": "Наразі підтримується тільки Spotify і з обмеженям в 100 треків.",
"Import into playlist": "Імпортувати в плейлист",
"Keep sidebar open": "Не закривати бокове меню",
"WARNING: Might require reload to work properly!": "УВАГА: Можливо потрібно перезапустити програму для коректної роботи!",
"An error occured, URL might be invalid or unsupported.": "Виникла помилка, можливо посилання є недійсним або не підтримується.",
"Top tracks": "Популярні треки",
"Show all top tracks": "Показати всі популярні треки",
"Singles": "Композиції",
"Album:": "Альбом:",
"Artists:": "Виконавці:",
"Yes": "Так",
"No": "Ні",
"Download Filename": "Ім'я файлу завантаження",
"Language": "Мова",
"Background Image": "Фонове зображення",
"Enter URL or absolute path. WARNING: Requires reload!": "Введіть URL або абсолютний шлях. УВАГА: необхідне перезавантаження!",
"LGBT Mode": "Режим збоченців",
"Native top bar": "Власний top bar",
"Requires restart of Freezer!": "Потребує перезавантаження Freezer!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Content country", "Content country": "Content country",
"Website": "Website", "Website": "Website",
"Visit website": "Visit website", "Visit website": "Visit website",
"New update available:": "New update available:" "New update available:": "New update available:",
"Shuffle": "Shuffle",
"Download album cover": "Download album cover",
"Art Resolution": "Art Resolution",
"Public": "Public",
"Private": "Private",
"Collaborative": "Collaborative",
"Edit playlist": "Edit playlist",
"Save": "Save",
"Edit": "Edit",
"Importer": "Importer",
"Enter URL": "Enter URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Currently only Spotify is supported and limited to 100 tracks.",
"Import into playlist": "Import into playlist",
"Keep sidebar open": "Keep sidebar open",
"WARNING: Might require reload to work properly!": "WARNING: Might require reload to work properly!",
"An error occured, URL might be invalid or unsupported.": "An error occured, URL might be invalid or unsupported.",
"Top tracks": "Top tracks",
"Show all top tracks": "Show all top tracks",
"Singles": "Singles",
"Album:": "Album:",
"Artists:": "Artists:",
"Yes": "Yes",
"No": "No",
"Download Filename": "Download Filename",
"Language": "Language",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
} }

View File

@ -13,7 +13,7 @@
"Play": "Pway", "Play": "Pway",
"Add to library": "Add t-to wibwawy", "Add to library": "Add t-to wibwawy",
"Download": "Downwoad", "Download": "Downwoad",
"fans": "fams", "fans": "fans *^*",
"tracks": "twacks", "tracks": "twacks",
"Quality": "Quawity >w<", "Quality": "Quawity >w<",
"Estimated size:": "Estimated size uwu:", "Estimated size:": "Estimated size uwu:",
@ -137,5 +137,35 @@
"Content country": "Content countwy", "Content country": "Content countwy",
"Website": "Website", "Website": "Website",
"Visit website": "Visit website", "Visit website": "Visit website",
"New update available:": "Nyew update available:" "New update available:": "Nyew update available:",
"Shuffle": "Shuffwe",
"Download album cover": "Downwaod awbum cover",
"Art Resolution": "Awt Wesowution",
"Public": "Pubwic",
"Private": "Pwivate",
"Collaborative": "Cowabowative",
"Edit playlist": "Edit pwaywist",
"Save": "Save",
"Edit": "Edit",
"Importer": "Impowtew",
"Enter URL": "Entew URL",
"Currently only Spotify is supported and limited to 100 tracks.": "C-Cuwwentwy onwy Spotify is suppowted and wimited t-to 100 twacks.",
"Import into playlist": "Impowt into pwaywist",
"Keep sidebar open": "Keep sidebaw open uwu",
"WARNING: Might require reload to work properly!": "WARNING: Might requiwe rewoad t-to wowk >,< !",
"An error occured, URL might be invalid or unsupported.": "An ewwow occuwed, URL m-might be invawid or unsuppowted.",
"Top tracks": "Top twacks",
"Show all top tracks": "Show aww t-top twacks",
"Singles": "Singwes",
"Album:": "Albuwm:",
"Artists:": "Awtists:",
"Yes": "Yes :>",
"No": "No :<",
"Download Filename": "Downwoad Filename",
"Language": "Wanguage (Don't change me >w<)",
"Background Image": "Backgwound Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Entew UWW ow absowute path. WARNING: Requiwes Rewoad?!! *screams*",
"LGBT Mode": "LGBT Mode *^*",
"Native top bar": "Nyative t-top baw",
"Requires restart of Freezer!": "Requiwes Restawt of Fweezew?!!"
} }

View File

@ -137,5 +137,35 @@
"Content country": "Quốc gia của nội dung", "Content country": "Quốc gia của nội dung",
"Website": "Trang web", "Website": "Trang web",
"Visit website": "Truy cập trang web", "Visit website": "Truy cập trang web",
"New update available:": "Có bản cập nhật mới:" "New update available:": "Có bản cập nhật mới:",
"Shuffle": "Trộn",
"Download album cover": "Tải xuống ảnh bìa album",
"Art Resolution": "Độ Phân Giải",
"Public": "Công khai",
"Private": "Riêng tư",
"Collaborative": "Hợp tác",
"Edit playlist": "Chỉnh sửa danh sách phát",
"Save": "Lưu",
"Edit": "Chỉnh sửa",
"Importer": "Công cụ nhập",
"Enter URL": "Nhập URL",
"Currently only Spotify is supported and limited to 100 tracks.": "Hiện chỉ hỗ trợ Spotify và giới hạn 100 bài hát.",
"Import into playlist": "Nhập vào danh sách phát",
"Keep sidebar open": "Giữ thanh bên luôn mở",
"WARNING: Might require reload to work properly!": "CẢNH BÁO: Có thể phải tải lại để hoạt động bình thường!",
"An error occured, URL might be invalid or unsupported.": "Lỗi, URL sai hoặc không được hỗ trợ.",
"Top tracks": "Bài hát hàng đầu",
"Show all top tracks": "Hiện tất cả bài hát hàng đầu",
"Singles": "Đĩa đơn",
"Album:": "Album:",
"Artists:": "Nghệ sĩ:",
"Yes": "Có",
"No": "Không",
"Download Filename": "Tải xuống tên tệp",
"Language": "Ngôn ngữ",
"Background Image": "Ảnh nền",
"Enter URL or absolute path. WARNING: Requires reload!": "Nhập URL hoặc đường dẫn hợp lệ. CẢNH BÁO: Yêu cầu tải lại!",
"LGBT Mode": "Chế độ LGBT",
"Native top bar": "Thanh trên cùng mặc định",
"Requires restart of Freezer!": "Cần khởi động lại Freezer!"
} }

View File

@ -0,0 +1,171 @@
{
"Home": "主页",
"Browse": "浏览",
"Library": "曲库",
"Tracks": "歌曲",
"Playlists": "播放列表",
"Albums": "专辑",
"Artists": "歌手",
"More": "更多",
"Settings": "设置",
"Downloads": "下载",
"Search or paste Deezer URL. Use / to quickly focus.": "搜索或输入 Deezer 链接。使用“/”来快速对焦。",
"Play": "播放",
"Add to library": "添加到曲库",
"Download": "下载",
"fans": "粉丝",
"tracks": "歌曲",
"Quality": "音质",
"Estimated size:": "预计大小:",
"Start downloading": "开始下载",
"Cancel": "取消",
"Stream logging is disabled!": "在线播放日志已禁用",
"Enable it in settings for history to work properly.": "请在设置中开启这个功能",
"History": "播放记录",
"Create new playlist": "新建播放列表",
"TRACKS": "歌曲",
"Sort by": "排序方式",
"Date Added": "添加日期",
"Name (A-Z)": "标题A - Z",
"Artist (A-Z)": "歌手 A - Z",
"Album (A-Z)": "专辑A - Z",
"Error loading lyrics or lyrics not found!": "加载歌词错误或歌词不存在",
"Create playlist": "创建播放列表",
"Create": "创建",
"Add to playlist": "添加到播放列表",
"Create new": "新建",
"Remove": "移除",
"Play next": "播放下一首",
"Add to queue": "加入队列",
"Remove from library": "从曲库中删除",
"Remove from playlist": "从播放列表中删除",
"Play track mix": "播放歌曲电台",
"Go to": "转到",
"Track Mix": "曲目电台",
"Duration": "时长",
"Released": "已发布",
"Disk": "专辑碟",
"albums": "专辑",
"Play top": "播放热门",
"Radio": "电台",
"Show all albums": "显示所有专辑",
"Show all singles": "显示所有单曲",
"Show more": "更多",
"Downloaded": "已下载",
"Queue": "队列",
"Total": "全部",
"Stop": "停止",
"Start": "开始",
"Show folder": "打开文件夹",
"Clear queue": "清除队列",
"Playing from": "正在播放自",
"Info": "详情",
"Lyrics": "歌词",
"Track number": "歌曲编号",
"Disk number": "专辑碟号",
"Explicit": "露骨",
"Source": "来源",
"ID": "ID",
"Error logging in!": "登录错误",
"Please try again later, or try another account.": "请稍后再试,或尝试另一个帐户。",
"Logout": "注销",
"Login using browser": "使用浏览器登录",
"Please login using your Deezer account:": "请使用您的 Deezer 帐户登录:",
"...or paste your ARL/Token below:": "或者在下面输入 ARL/Token",
"ARL/Token": "ARL/Token",
"Login": "登录",
"By using this program, you disagree with Deezer's ToS.": "使用这个软件,代表您不同意 Deezer 的使用条款",
"Only in Electron version!": "仅支持 Electron 版本",
"Search results for:": "搜索结果:",
"Error loading data!": "加载数据错误",
"Try again later!": "稍后再试",
"Search": "搜索",
"Streaming Quality": "在线播放音质",
"Download Quality": "下载音质",
"Downloads Directory": "下载目录",
"Simultaneous downloads": "同时下载任务数",
"Always show download confirm dialog before downloading.": "下载前总是显示下载确认对话框",
"Show download dialog": "显示下载对话框",
"Create folders for artists": "创建艺术家文件夹",
"Create folders for albums": "创建专辑文件夹",
"Download lyrics": "下载歌词",
"Variables": "变量",
"UI": "用户界面",
"Show autocomplete in search": "在搜索中显示自动补全",
"Integrations": "整合",
"This allows listening history, flow and recommendations to work properly.": "这个选项开启播放历史、Flow 和推荐功能",
"Log track listens to Deezer": "发送播放记录到 Deezer",
"Connect your LastFM account to allow scrobbling.": "登录您的 LastFM 账户同步播放记录",
"Login with LastFM": "登录 LastFM",
"Disconnect LastFM": "登出 LastFM",
"Requires restart to apply!": "需要重启生效",
"Enable Discord Rich Presence, requires restart to toggle!": "开启 Discord Rich Presence需要重启生效",
"Discord Rich Presence": "Discord Rich Presence",
"Enable Discord join button for syncing tracks, requires restart to toggle!": "启用进入 Discord 按钮以显示正在播放的歌曲,需要重启生效",
"Discord Join Button": "Discord 加入按钮",
"Other": "其他",
"Minimize to tray": "最小化到托盘",
"Don't minimize to tray": "不要最小化到托盘",
"Close on exit": "直接关闭",
"Settings saved!": "设置已保存",
"Available only in Electron version!": "仅在 Electron 版本中可用!",
"Crossfade (ms)": "平缓过渡(毫秒)",
"Select primary color": "选择主色调",
"Light theme": "浅色主题",
"Create folders for playlists": "创建播放列表文件夹",
"About": "关于",
"Links:": "链接:",
"Telegram Releases": "到 Telegram 下载",
"Telegram Group": "Telegram 群组",
"Discord": "Discord",
"Telegram Android Group": "Telegram Android 群组",
"Credits:": "贡献者:",
"Agree": "同意",
"Dismiss": "忽略",
"Added to playlist!": "已添加到播放列表",
"Added to library!": "已添加到曲库",
"Removed from library!": "已从曲库中移除",
"Removed from playlist!": "已从播放列表中移除",
"Playlist deleted!": "已删除播放列表",
"Delete": "删除",
"Are you sure you want to delete this playlist?": "确定要删除这个播放列表?",
"Force white tray icon": "强制使用白色托盘图标",
"Force default (white) tray icon if theme incorrectly detected. Requires restart.": "如果主题检测不正确,强制使用默认(白色)托盘图标,需要重启",
"Share": "分享",
"Settings quality": "预设音质",
"Content language": "语种",
"Content country": "国家",
"Website": "网站",
"Visit website": "访问网站",
"New update available:": "检测到新版本",
"Shuffle": "随机",
"Download album cover": "下载专辑封面",
"Art Resolution": "专辑封面分辨率",
"Public": "公开",
"Private": "私有",
"Collaborative": "协作",
"Edit playlist": "编辑播放列表",
"Save": "保存",
"Edit": "编辑",
"Importer": "导入",
"Enter URL": "输入链接",
"Currently only Spotify is supported and limited to 100 tracks.": "目前只支持 Spotify ,并限制最多 100 首歌曲",
"Import into playlist": "导入到播放列表",
"Keep sidebar open": "保持侧栏打开",
"WARNING: Might require reload to work properly!": "警告:可能需要重新加载才能正常工作!",
"An error occured, URL might be invalid or unsupported.": "出现错误,链接可能无效或不支持",
"Top tracks": "热门歌曲",
"Show all top tracks": "显示所有热门歌曲",
"Singles": "单曲",
"Album:": "专辑:",
"Artists:": "歌手:",
"Yes": "是",
"No": "否",
"Download Filename": "下载文件名",
"Language": "语言",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

View File

@ -4,14 +4,14 @@ import router from './js/router';
import vuetify from './js/vuetify'; import vuetify from './js/vuetify';
import axios from 'axios'; import axios from 'axios';
import VueEsc from 'vue-esc'; import VueEsc from 'vue-esc';
import VueSocketIO from 'vue-socket.io';
import i18n from './js/i18n'; import i18n from './js/i18n';
import { io } from "socket.io-client";
//Globals //Globals
let ipcRenderer; let ipcRenderer;
//Axios //Axios
let axiosInstance = axios.create({ let axiosInstance = axios.create({
baseURL: `${window.location.origin}`, baseURL: process.env.NODE_ENV === 'development' ? "http://localhost:10069" : `${window.location.origin}`,
timeout: 16000, timeout: 16000,
responseType: 'json' responseType: 'json'
}); });
@ -52,10 +52,9 @@ Vue.prototype.$filesize = (bytes) => {
} }
//Sockets //Sockets
Vue.use(new VueSocketIO({ Vue.prototype.$io = io("http://localhost:10069", {
connection: window.location.toString(), path: '/socket'
options: {path: '/socket'} });
}));
Vue.config.productionTip = false; Vue.config.productionTip = false;
Vue.use(VueEsc); Vue.use(VueEsc);
@ -230,13 +229,18 @@ new Vue({
//Load track meta //Load track meta
let playbackInfo = await this.loadPlaybackInfo(track.streamUrl, track.duration); let playbackInfo = await this.loadPlaybackInfo(track.streamUrl, track.duration);
if (!playbackInfo) { if (!playbackInfo) {
this.loaders--;
this.skipNext(); this.skipNext();
return; return;
} }
this.playbackInfo = playbackInfo; this.playbackInfo = playbackInfo;
//Stream URL //Stream URL
let url = `${window.location.origin}${this.playbackInfo.url}`; let url;
if (this.playbackInfo.encrypted)
url = `${process.env.NODE_ENV === 'development' ? "http://localhost:10069" : window.location.origin}${this.playbackInfo.url}`;
else
url = this.playbackInfo.direct;
//Cancel loading //Cancel loading
this.loaders--; this.loaders--;
if (this.loaders > 0) { if (this.loaders > 0) {
@ -424,7 +428,10 @@ new Vue({
if (this.gapless.promise) resolve(); if (this.gapless.promise) resolve();
} }
this.gapless.info = info this.gapless.info = info
this.gapless.audio = new Audio(`${window.location.origin}${info.url}`); if (info.encrypted)
this.gapless.audio = new Audio(`${process.env.NODE_ENV === 'development' ? "http://localhost:10069" : window.location.origin}${info.url}`);
else
this.gapless.audio = new Audio(info.direct);
this.gapless.audio.volume = 0.00; this.gapless.audio.volume = 0.00;
this.gapless.audio.preload = 'auto'; this.gapless.audio.preload = 'auto';
this.gapless.crossfade = false; this.gapless.crossfade = false;
@ -502,7 +509,7 @@ new Vue({
}, 500); }, 500);
return; return;
} }
this.$socket.emit('stateChange', { this.$io.emit('stateChange', {
position: this.position, position: this.position,
duration: this.duration(), duration: this.duration(),
state: this.state, state: this.state,
@ -516,6 +523,29 @@ new Vue({
}, },
updateLanguage(l) { updateLanguage(l) {
i18n.locale = l; i18n.locale = l;
},
//For LGBT/Gayming mode
primaryColorRainbow() {
const colors = ['#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3', '#03A9F4',
'#00BCD4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722',
'#795548', '#607D8B', '#9E9E9E'];
let index = 0;
setInterval(() => {
this.$vuetify.theme.themes.dark.primary = colors[index];
this.$vuetify.theme.themes.light.primary = colors[index];
this.$root.settings.primaryColor = colors[index];
index++;
if (index == colors.length)
index = 0;
}, 400);
}
},
computed: {
//Show or no topbar
topBar() {
if (!this.settings.electron) return false;
return !this.settings.nativeTopBar;
} }
}, },
@ -526,6 +556,16 @@ new Vue({
let res = await this.$axios.get('/settings'); let res = await this.$axios.get('/settings');
this.settings = res.data; this.settings = res.data;
this.$vuetify.theme.themes.dark.primary = this.settings.primaryColor; this.$vuetify.theme.themes.dark.primary = this.settings.primaryColor;
this.$vuetify.theme.themes.light.primary = this.settings.primaryColor;
if (this.settings.lightTheme)
this.$vuetify.theme.dark = false;
//Remove LGBT
const lgbt = 'https://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Gay_Pride_Flag.svg/1280px-Gay_Pride_Flag.svg.png';
if (this.settings.backgroundImage == lgbt)
this.settings.backgroundImage = null;
i18n.locale = this.settings.language; i18n.locale = this.settings.language;
this.volume = this.settings.volume; this.volume = this.settings.volume;
@ -580,15 +620,15 @@ new Vue({
//Sockets //Sockets
//Queue change //Queue change
this.sockets.subscribe('downloads', (data) => { this.$io.on('downloads', (data) => {
this.downloads = data; this.downloads = data;
}); });
//Current download change //Current download change
this.sockets.subscribe('currentlyDownloading', (data) => { this.$io.on('currentlyDownloading', (data) => {
this.downloads.threads = data; this.downloads.threads = data;
}); });
//Play at offset (for integrations) //Play at offset (for integrations)
this.sockets.subscribe('playOffset', async (data) => { this.$io.on('playOffset', async (data) => {
this.queue.data.splice(this.queue.index + 1, 0, data.track); this.queue.data.splice(this.queue.index + 1, 0, data.track);
await this.skip(1); await this.skip(1);
this.seek(data.position); this.seek(data.position);
@ -597,23 +637,37 @@ new Vue({
//Importer //Importer
//Start //Start
this.sockets.subscribe('importerInit', (data) => { this.$io.on('importerInit', (data) => {
this.importer = data; this.importer = data;
}); });
//New track imported //New track imported
this.sockets.subscribe('importerTrack', (data) => { this.$io.on('importerTrack', (data) => {
this.importer.tracks.push(data); this.importer.tracks.push(data);
}); });
//Mark as done //Mark as done
this.sockets.subscribe('importerDone', () => { this.$io.on('importerDone', () => {
this.importer.active = false; this.importer.active = false;
this.importer.done = true; this.importer.done = true;
}); });
this.sockets.subscribe('importerError', () => { this.$io.on('importerError', () => {
this.importer.error = true; this.importer.error = true;
this.importer.active = false; this.importer.active = false;
this.importer.done = false; this.importer.done = false;
}); });
//Album
this.$io.on('importerAlbum', a => {
//Not downloading, got albumn
if (a) {
this.$router.push({
path: '/album',
query: {album: JSON.stringify(a)}
});
}
//Mark done
this.importer.error = false;
this.importer.active = false;
this.importer.done = false;
});
r(); r();
}, },

View File

@ -21,7 +21,7 @@
<v-list-item-title class='font-weight-bold'>{{$t("Website")}}</v-list-item-title> <v-list-item-title class='font-weight-bold'>{{$t("Website")}}</v-list-item-title>
</v-list-item-content> </v-list-item-content>
</v-list-item> </v-list-item>
<v-list-item @click='openUrl("https://t.me/freezereleases")'> <v-list-item @click='openUrl("https://t.me/joinchat/Se4zLEBvjS1NCiY9")'>
<v-list-item-icon> <v-list-item-icon>
<v-icon>mdi-telegram</v-icon> <v-icon>mdi-telegram</v-icon>
</v-list-item-icon> </v-list-item-icon>

View File

@ -10,7 +10,7 @@
></v-img> ></v-img>
<div class='pl-4'> <div class='pl-4'>
<v-overlay absolute :value="loading" z-index="3" opacity='0.9'> <v-overlay absolute :value="loading" z-index="3" opacity='0'>
<v-progress-circular indeterminate></v-progress-circular> <v-progress-circular indeterminate></v-progress-circular>
</v-overlay> </v-overlay>
<h1>{{album.title}}</h1> <h1>{{album.title}}</h1>
@ -49,7 +49,7 @@
</div> </div>
</v-card> </v-card>
<h1 class='mt-2'>Tracks</h1> <h1 class='mt-2'>{{$t("Tracks")}}</h1>
<v-list avatar v-if='album.tracks.length > 0'> <v-list avatar v-if='album.tracks.length > 0'>
<div v-for='(track, index) in album.tracks' :key='track.id'> <div v-for='(track, index) in album.tracks' :key='track.id'>

View File

@ -11,7 +11,7 @@
></v-img> ></v-img>
<div class='pl-4'> <div class='pl-4'>
<v-overlay absolute :value="loading" z-index="3" opacity='0.9'> <v-overlay absolute :value="loading" z-index="3" opacity='0'>
<v-progress-circular indeterminate></v-progress-circular> <v-progress-circular indeterminate></v-progress-circular>
</v-overlay> </v-overlay>
<h1>{{artist.name}}</h1> <h1>{{artist.name}}</h1>
@ -44,7 +44,7 @@
</div> </div>
</v-card> </v-card>
<h1 class='my-2'>Top tracks</h1> <h1 class='my-2'>{{$t("Top tracks")}}</h1>
<v-list class='overflow-y-auto' height="300px"> <v-list class='overflow-y-auto' height="300px">
<div <div
v-for='(track, index) in artist.topTracks' v-for='(track, index) in artist.topTracks'
@ -57,7 +57,7 @@
></TrackTile> ></TrackTile>
<v-list-item v-if='!allTopTracks && index == 3' @click='allTopTracks = true'> <v-list-item v-if='!allTopTracks && index == 3' @click='allTopTracks = true'>
<v-list-item-title>Show all top tracks</v-list-item-title> <v-list-item-title>{{$t("Show all top tracks")}}</v-list-item-title>
</v-list-item> </v-list-item>
</div> </div>
@ -65,7 +65,7 @@
</v-list> </v-list>
<!-- Normal albums --> <!-- Normal albums -->
<h1 class='my-2'>Albums</h1> <h1 class='my-2'>{{$t("Albums")}}</h1>
<v-list class='overflow-y-auto' style='max-height: 400px' @scroll.native="scroll"> <v-list class='overflow-y-auto' style='max-height: 400px' @scroll.native="scroll">
<div <div
v-for='(album, index) in artist.albums' v-for='(album, index) in artist.albums'
@ -89,7 +89,7 @@
</v-list> </v-list>
<!-- Singles --> <!-- Singles -->
<h1 class='my-2'>Singles</h1> <h1 class='my-2'>{{$t("Singles")}}</h1>
<v-list class='overflow-y-auto' style='max-height: 400px' @scroll.native="scroll"> <v-list class='overflow-y-auto' style='max-height: 400px' @scroll.native="scroll">
<div <div
v-for='(album, index) in artist.albums' v-for='(album, index) in artist.albums'

View File

@ -13,7 +13,9 @@
<div v-for='(section, sectionIndex) in data.sections' :key='"section"+sectionIndex' class='mb-8'> <div v-for='(section, sectionIndex) in data.sections' :key='"section"+sectionIndex' class='mb-8'>
<h1 class='py-2'>{{section.title}}</h1> <h1 class='py-2'>{{section.title}}</h1>
<div class='d-flex' style='overflow-x: auto; overflow-y: hidden;'>
<!-- Row layout -->
<div class='d-flex' style='overflow-x: auto; overflow-y: hidden;' v-if='section.layout == "row"'>
<div v-for='(item, index) in section.items' :key='"item"+index' class='mr-4 my-2'> <div v-for='(item, index) in section.items' :key='"item"+index' class='mr-4 my-2'>
<PlaylistTile v-if='item.type == "playlist"' :playlist='item.data' card class='mb-4'></PlaylistTile> <PlaylistTile v-if='item.type == "playlist"' :playlist='item.data' card class='mb-4'></PlaylistTile>
<ArtistTile v-if='item.type == "artist"' :artist='item.data' card></ArtistTile> <ArtistTile v-if='item.type == "artist"' :artist='item.data' card></ArtistTile>
@ -28,6 +30,18 @@
</div> </div>
</div> </div>
<!-- Grid layout -->
<div class='d-flex flex-wrap justify-space-around ' v-if='section.layout == "grid"' >
<div v-for='(item, index) in section.items' :key='"item"+index' class='mr-4 my-2'>
<PlaylistTile v-if='item.type == "playlist"' :playlist='item.data' card class='mb-4'></PlaylistTile>
<ArtistTile v-if='item.type == "artist"' :artist='item.data' card></ArtistTile>
<DeezerChannel v-if='item.type == "channel"' :channel='item.data' class='mb-2'></DeezerChannel>
<AlbumTile v-if='item.type == "album"' :album='item.data' card></AlbumTile>
<SmartTrackList v-if='item.type == "smarttracklist" || item.type == "flow"' :stl='item.data'></SmartTrackList>
</div>
</div>
</div> </div>
</div> </div>

View File

@ -1,5 +1,5 @@
<template> <template>
<div class='pa-0' :class='{electron: $root.settings.electron, notop: !$root.settings.electron}'> <div class='pa-0' :class='{electron: $root.topBar, notop: !$root.topBar}'>
<v-app-bar dense> <v-app-bar dense>
<v-btn icon @click='close'> <v-btn icon @click='close'>
@ -39,6 +39,7 @@
:value='position' :value='position'
ref='seeker' ref='seeker'
class='seekbar' class='seekbar'
color='primary'
hide-details> hide-details>
</v-slider> </v-slider>
</v-col> </v-col>
@ -73,7 +74,7 @@
<div class='d-flex mx-2 mb-2'> <div class='d-flex mx-2 mb-2'>
<v-btn icon @click='repeatClick'> <v-btn icon @click='repeatClick'>
<v-icon v-if='$root.repeat == 0'>mdi-repeat</v-icon> <v-icon v-if='$root.repeat == 0 || !$root.repeat'>mdi-repeat</v-icon>
<v-icon color='primary' v-if='$root.repeat == 1'>mdi-repeat</v-icon> <v-icon color='primary' v-if='$root.repeat == 1'>mdi-repeat</v-icon>
<v-icon color='primary' v-if='$root.repeat == 2'>mdi-repeat-once</v-icon> <v-icon color='primary' v-if='$root.repeat == 2'>mdi-repeat-once</v-icon>
</v-btn> </v-btn>
@ -108,6 +109,7 @@
step='0.01' step='0.01'
v-model='$root.volume' v-model='$root.volume'
class='px-8' class='px-8'
color='primary'
style='padding-top: 2px;' style='padding-top: 2px;'
@change='updateVolume' @change='updateVolume'
@click:prepend='$root.toggleMute()' @click:prepend='$root.toggleMute()'
@ -142,18 +144,22 @@
<!-- Queue tab --> <!-- Queue tab -->
<v-tab-item key='queue' v-if='showQueue'> <v-tab-item key='queue' v-if='showQueue'>
<v-list two-line avatar class='overflow-y-auto' style='max-height: calc(100vh - 160px)'> <v-list two-line avatar class='overflow-y-auto' style='max-height: calc(100vh - 160px)'>
<draggable v-model='$root.queue.data' @change='queueMove'> <v-virtual-scroll :items='$root.queue.data' item-height='72' benched='5' style='overflow-y: hidden !important'>
<div v-for="(track, index) in $root.queue.data" :key='index + "q" + track.id'> <template v-slot:default="{ index, item }">
<v-lazy min-height="1" transition="fade-transition"> <draggable v-model='$root.queue.data' @move='queueMove'>
<TrackTile <v-lazy min-height="1" transition="fade-transition" :key='"qq" + index'>
:track='track' <TrackTile
@click='$root.playIndex(index)' :track='item'
@redirect='close' @click='$root.playIndex(index)'
:ripple='false' @redirect='close'
></TrackTile> :ripple='false'
</v-lazy> removeQueue
</div> @removeQueue='removeQueue(index)'
</draggable> ></TrackTile>
</v-lazy>
</draggable>
</template>
</v-virtual-scroll>
</v-list> </v-list>
</v-tab-item> </v-tab-item>
<!-- Info tab --> <!-- Info tab -->
@ -161,13 +167,13 @@
<v-list two-line avatar class='overflow-y-auto text-center' style='max-height: calc(100vh - 160px)'> <v-list two-line avatar class='overflow-y-auto text-center' style='max-height: calc(100vh - 160px)'>
<h1>{{$root.track.title}}</h1> <h1>{{$root.track.title}}</h1>
<!-- Album --> <!-- Album -->
<h3>Album:</h3> <h3>{{$t("Album:")}}</h3>
<AlbumTile <AlbumTile
:album='$root.track.album' :album='$root.track.album'
@clicked='$emit("close")' @clicked='$emit("close")'
></AlbumTile> ></AlbumTile>
<!-- Artists --> <!-- Artists -->
<h3>Artists:</h3> <h3>{{$t("Artists:")}}</h3>
<v-list> <v-list>
<ArtistTile <ArtistTile
v-for='(artist, index) in $root.track.artists' v-for='(artist, index) in $root.track.artists'
@ -181,7 +187,7 @@
<h3>{{$t("Duration")}}: <span>{{$duration($root.track.duration)}}</span></h3> <h3>{{$t("Duration")}}: <span>{{$duration($root.track.duration)}}</span></h3>
<h3>{{$t("Track number")}}: {{$root.track.trackNumber}}</h3> <h3>{{$t("Track number")}}: {{$root.track.trackNumber}}</h3>
<h3>{{$t("Disk number")}}: {{$root.track.diskNumber}}</h3> <h3>{{$t("Disk number")}}: {{$root.track.diskNumber}}</h3>
<h3>{{$t("Explicit")}}: {{$root.track.explicit?"Yes":"No"}}</h3> <h3>{{$t("Explicit")}}: {{$root.track.explicit?$t("Yes"):$t("No")}}</h3>
<h3>{{$t("Source")}}: {{$root.playbackInfo.source}}</h3> <h3>{{$t("Source")}}: {{$root.playbackInfo.source}}</h3>
<h3>{{$t("Quality")}}: {{$root.playbackInfo.qualityString}}</h3> <h3>{{$t("Quality")}}: {{$root.playbackInfo.qualityString}}</h3>
<h3>{{$t("ID")}}: {{$root.track.id}}</h3> <h3>{{$t("ID")}}: {{$root.track.id}}</h3>
@ -326,7 +332,15 @@ export default {
this.$root.globalSnackbar = this.$t('Link copied!'); this.$root.globalSnackbar = this.$t('Link copied!');
}, },
queueMove() { queueMove() {
console.log('move');
this.$root.queue.index = this.$root.queue.data.findIndex(t => t.id == this.$root.track.id); this.$root.queue.index = this.$root.queue.data.findIndex(t => t.id == this.$root.track.id);
},
// Remove from queue
removeQueue(i) {
if (this.$root.queue.index == i) return;
if (this.$root.queue.index > i)
this.$root.queue.index -= 1;
this.$root.queue.data.splice(i, 1);
} }
}, },
mounted() { mounted() {

View File

@ -23,6 +23,10 @@
{{$t("Download")}} {{$t("Download")}}
</v-btn> </v-btn>
</div> </div>
<!-- Loading -->
<div class='text-center my-2' v-if='$root.importer.active'>
<v-progress-circular indeterminate color='primary'></v-progress-circular>
</div>
<!-- Tracks --> <!-- Tracks -->
<div class='mt-4' v-if='$root.importer.done || $root.importer.active'> <div class='mt-4' v-if='$root.importer.done || $root.importer.active'>
<h2 class='mb-2'>Tracks:</h2> <h2 class='mb-2'>Tracks:</h2>
@ -67,7 +71,7 @@ export default {
computed: { computed: {
valid() { valid() {
let i = this.input || ''; let i = this.input || '';
return i.startsWith('https://open.spotify.com/playlist/') && !i.includes(' '); return (i.includes('open.spotify.com/') || i.includes('link.tospotify.com/')) && !i.includes(' ');
} }
}, },
mounted() { mounted() {

View File

@ -27,7 +27,7 @@
<v-tabs-items v-model='tab'> <v-tabs-items v-model='tab'>
<!-- Tracks --> <!-- Tracks -->
<v-tab-item key='tracks'> <v-tab-item key='tracks'>
<LibraryTracks height='calc(100vh - 310px)'></LibraryTracks> <LibraryTracks :height='"calc(100vh - " + ($root.topBar ? 310 : 290) + "px)"'></LibraryTracks>
</v-tab-item> </v-tab-item>
<!-- Albums --> <!-- Albums -->

View File

@ -10,7 +10,7 @@
></v-img> ></v-img>
<div class='pl-4'> <div class='pl-4'>
<v-overlay absolute :value="loading" z-index="3" opacity='0.9'> <v-overlay absolute :value="loading" z-index="3" opacity='0'>
<v-progress-circular indeterminate></v-progress-circular> <v-progress-circular indeterminate></v-progress-circular>
</v-overlay> </v-overlay>
<h1> <h1>

View File

@ -105,10 +105,10 @@
<!-- Download naming --> <!-- Download naming -->
<v-text-field <v-text-field
class='px-4 my-2' class='px-4 my-2'
label='Download Filename' :label='$t("Download Filename")'
persistent-hint persistent-hint
v-model='$root.settings.downloadFilename' v-model='$root.settings.downloadFilename'
:hint='$t("Variables") + ": %title%, %artists%, %artist%, %feats%, %trackNumber%, %0trackNumber%, %album%, %year%, %label%"' :hint='$t("Variables") + ": %title%, %artists%, %artist%, %feats%, %trackNumber%, %0trackNumber%, %album%, %year%, %label%, %albumArtist%, %albumArtists%"'
></v-text-field> ></v-text-field>
<!-- Crossfade --> <!-- Crossfade -->
@ -130,11 +130,24 @@
<!-- Language --> <!-- Language -->
<v-select <v-select
class='mt-2 px-4 mx-2' class='mt-2 px-4 mx-2'
label='Language' :label='$t("Language")'
persistent-hint persistent-hint
:items='languageNames' :items='languageNames'
@change='updateLanguage' @change='updateLanguage'
></v-select> ></v-select>
<!-- Light theme -->
<v-list-item>
<v-list-item-action>
<v-checkbox
v-model='$root.settings.lightTheme'
class='pl-2'
@change='$vuetify.theme.dark = !$root.settings.lightTheme'
></v-checkbox>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>{{$t("Light theme")}}</v-list-item-title>
</v-list-item-content>
</v-list-item>
<!-- Primary color --> <!-- Primary color -->
<v-list-item @click='colorPicker = true'> <v-list-item @click='colorPicker = true'>
<v-list-item-avatar> <v-list-item-avatar>
@ -163,7 +176,24 @@
<v-list-item-subtitle>{{$t("WARNING: Might require reload to work properly!")}}</v-list-item-subtitle> <v-list-item-subtitle>{{$t("WARNING: Might require reload to work properly!")}}</v-list-item-subtitle>
</v-list-item-content> </v-list-item-content>
</v-list-item> </v-list-item>
<!-- Native top bar -->
<v-list-item>
<v-list-item-action>
<v-checkbox v-model='$root.settings.nativeTopBar' class='pl-2'></v-checkbox>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>{{$t("Native top bar")}}</v-list-item-title>
<v-list-item-subtitle>{{$t("Requires restart of Freezer!")}}</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<!-- Background image -->
<v-text-field
class='px-4 my-2'
:label='$t("Background Image")'
persistent-hint
v-model='$root.settings.backgroundImage'
:hint='$t("Enter URL or absolute path. WARNING: Requires reload!")'
></v-text-field>
<!-- Accounts --> <!-- Accounts -->
<v-subheader>{{$t("Integrations")}}</v-subheader> <v-subheader>{{$t("Integrations")}}</v-subheader>
@ -292,7 +322,7 @@
v-bind="attrs" v-bind="attrs"
@click="snackbar = false" @click="snackbar = false"
> >
Dismiss {{$t("Dismiss")}}
</v-btn> </v-btn>
</template> </template>
</v-snackbar> </v-snackbar>
@ -302,7 +332,7 @@
<v-card> <v-card>
<v-color-picker v-model='$root.settings.primaryColor' mode='hexa'></v-color-picker> <v-color-picker v-model='$root.settings.primaryColor' mode='hexa'></v-color-picker>
<v-btn :color='$root.settings.primaryColor' block class='my-1 px-2' @click='saveColor'> <v-btn :color='$root.settings.primaryColor' block class='my-1 px-2' @click='saveColor'>
Save {{$t("Save")}}
</v-btn> </v-btn>
</v-card> </v-card>
</v-overlay> </v-overlay>
@ -331,6 +361,7 @@ export default {
languages: [ languages: [
{code: 'en', name: 'English'}, {code: 'en', name: 'English'},
{code: 'ar', name: 'Arabic'}, {code: 'ar', name: 'Arabic'},
{code: 'ast', name: 'Asturian'},
{code: 'hr', name: 'Croatian'}, {code: 'hr', name: 'Croatian'},
{code: 'fil', name: 'Filipino'}, {code: 'fil', name: 'Filipino'},
{code: 'fr', name: 'French'}, {code: 'fr', name: 'French'},
@ -351,10 +382,6 @@ export default {
], ],
artResolutions: [256, 512, 600, 800, 1000, 1200, 1400, 1600, 1800], artResolutions: [256, 512, 600, 800, 1000, 1200, 1400, 1600, 1800],
colorPicker: false, colorPicker: false,
primaryColorIndex: 0,
primaries: ['#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3', '#03A9F4',
'#00BCD4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722',
'#795548', '#607D8B', '#9E9E9E'],
//Lists from Deezer website //Lists from Deezer website
languageList: ["me", "da", "de", "en", "us", "es", "mx", "fr", "hr", "id", "it", "hu", "ms", "nl", "no", "pl", "br", "pt", "ru", "ro", "sq", "sk", "sl", "sr", "fi", "sv", "tr", "cs", "bg", "uk", "he", "ar", "th", "cn", "ja", "ko"], languageList: ["me", "da", "de", "en", "us", "es", "mx", "fr", "hr", "id", "it", "hu", "ms", "nl", "no", "pl", "br", "pt", "ru", "ro", "sq", "sk", "sl", "sr", "fi", "sv", "tr", "cs", "bg", "uk", "he", "ar", "th", "cn", "ja", "ko"],
@ -443,6 +470,10 @@ export default {
this.$vuetify.theme.dark = true; this.$vuetify.theme.dark = true;
this.$vuetify.theme.light = false; this.$vuetify.theme.light = false;
} }
},
async applyLGBT() {
await this.save();
window.location.reload();
} }
}, },
computed: { computed: {
@ -471,14 +502,7 @@ export default {
//RGB //RGB
if (event.code == 'KeyG' && event.ctrlKey && event.altKey) { if (event.code == 'KeyG' && event.ctrlKey && event.altKey) {
setInterval(() => { this.$root.primaryColorRainbow();
this.$vuetify.theme.themes.dark.primary = this.primaries[this.primaryColorIndex];
this.$vuetify.theme.themes.light.primary = this.primaries[this.primaryColorIndex];
this.$root.settings.primaryColor = this.primaries[this.primaryColorIndex];
this.primaryColorIndex++;
if (this.primaryColorIndex == this.primaries.length)
this.primaryColorIndex = 0;
}, 400);
} }
}); });
} }

View File

@ -0,0 +1,59 @@
.theme--dark.v-tabs > .v-tabs-bar {
background-color: #00000000 !important;
backdrop-filter: blur(16px);
}
.theme--dark.v-list {
background-color: #00000000 !important;
}
.theme--light.v-list {
background-color: #ffffff00 !important;
}
.theme--dark.v-application {
background-color: #000000aa !important;
}
.theme--light.v-application {
background-color: #ffffff00 !important;
}
.v-list-item {
background-color: #00000000;
}
.v-list {
background-color: #000000aa !important;
}
.v-item-group {
background-color: #00000000 !important;
backdrop-filter: blur(16px);
}
.v-card {
background-color: #00000000 !important;
backdrop-filter: blur(16px);
}
.v-navigation-drawer {
background-color: #00000000 !important;
}
.theme--dark.v-navigation-drawer--is-mouseover {
background-color: #12121277 !important;
backdrop-filter: blur(16px);
}
.theme--light.v-navigation-drawer--is-mouseover {
background-color: #ffffff66 !important;
backdrop-filter: blur(16px);
}
.v-toolbar {
background-color: #00000000 !important;
}
.v-navigation-drawer--mini-variant {
background-color: #00000000 !important;
}
.v-footer {
background-color: #00000000 !important;
}
.theme--dark.v-select-list div {
background-color: #212121;
}
.theme--light.v-select-list div {
background-color: #ffffff;
}
.v-menu__content {
backdrop-filter: blur(16px);
}

4167
app/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{ {
"name": "freezer", "name": "freezer",
"private": true, "private": true,
"version": "1.1.14", "version": "1.1.24",
"description": "", "description": "",
"main": "background.js", "main": "background.js",
"scripts": { "scripts": {
@ -10,23 +10,24 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"arg": "^4.1.3", "arg": "^5.0.0",
"axios": "^0.21.1", "axios": "^0.21.1",
"browser-id3-writer": "^4.4.0", "browser-id3-writer": "^4.4.0",
"chalk": "^4.1.0", "chalk": "^4.1.1",
"cheerio": "^1.0.0-rc.5", "cheerio": "^1.0.0-rc.9",
"compare-versions": "^3.6.0", "compare-versions": "^3.6.0",
"discord-rpc": "^3.1.4", "cors": "^2.8.5",
"discord-rpc": "^3.2.0",
"express": "^4.17.1", "express": "^4.17.1",
"lastfmapi": "^0.1.1", "lastfmapi": "^0.1.1",
"metaflac-js2": "^1.0.7", "metaflac-js2": "^1.0.7",
"nedb": "^1.8.0", "nedb": "^1.8.0",
"nodeezcryptor": "git+https://codeberg.org/exttex/nodeezcryptor", "nodeezcryptor": "git+https://git.freezer.life/exttex/nodeezcryptor.git",
"sanitize-filename": "^1.6.3", "sanitize-filename": "^1.6.3",
"socket.io": "^2.3.0", "socket.io": "^4.1.2",
"winston": "^3.3.3" "winston": "^3.3.3"
}, },
"devDependencies": { "devDependencies": {
"eslint": "^7.10.0" "eslint": "^7.27.0"
} }
} }

View File

@ -139,11 +139,38 @@ class DeezerAPI {
let data = await this.callApi('deezer.getUserData'); let data = await this.callApi('deezer.getUserData');
this.token = data.results.checkForm; this.token = data.results.checkForm;
this.userId = data.results.USER.USER_ID; this.userId = data.results.USER.USER_ID;
this.favoritesPlaylist = data.results.USER.LOVEDTRACKS_ID.toString();
try {
await this.authorizeAtv();
} catch (e) {
logger.warn(`Couldnt authorize ATV: ${e}`);
}
if (!this.userId || this.userId == 0 || !this.token) return false; if (!this.userId || this.userId == 0 || !this.token) return false;
return true; return true;
} }
//Authorize Android TV
async authorizeAtv() {
let res = await axios.post(
"https://distribution-api.deezer.com/device/token",
{"brand_name":"Hisense","device_id":"7239e4071d8992c955ad","model_name":"HE50A6109FUWTS","country_code":"FRA"}
);
let deviceToken = res.data.device_token;
// Get unauthorized token
res = await axios.get('https://connect.deezer.com/oauth/access_token.php?grant_type=client_credentials&client_id=447462&client_secret=a83bf7f38ad2f137e444727cfc3775cf&output=json');
let accessToken = res.data.access_token;
// Get smart login code
res = await axios.post(`https://connect.deezer.com/2.0/smartlogin/device?access_token=${accessToken}&device_token=${deviceToken}`);
let smartLoginCode = res.data.data.smartLoginCode;
// Associate
await this.callApi('deezer.associateSmartLoginCodeWithUser', {'SMARTLOGIN_CODE': smartLoginCode});
// Get authorized token
res = await axios.get(`https://connect.deezer.com/2.0/smartlogin/${smartLoginCode}?access_token=${accessToken}`);
accessToken = res.data.data.accessToken;
this.accessToken = accessToken;
}
//Wrapper because electron is piece of shit //Wrapper because electron is piece of shit
async callPublicApi(path, params) { async callPublicApi(path, params) {
if (this.electron) return await this._callPublicApiElectron(path, params); if (this.electron) return await this._callPublicApiElectron(path, params);
@ -222,6 +249,30 @@ class DeezerAPI {
return `https://e-cdns-proxy-${md5origin.substring(0, 1)}.dzcdn.net/mobile/1/${step3}`; return `https://e-cdns-proxy-${md5origin.substring(0, 1)}.dzcdn.net/mobile/1/${step3}`;
} }
//Generate url with android tv support
async generateUrl(trackId, md5origin, mediaVersion, quality = 3) {
if (quality == 9 && this.accessToken) {
try {
let res = await axios({
method: 'GET',
url: `https://api.deezer.com/platform/gcast/track/${trackId}/streamUrls`,
headers: {
"Authorization": "Bearer " + this.accessToken
},
responseType: 'json'
});
if (res.data.data.attributes.url_flac)
return {encrypted: false, url: res.data.data.attributes.url_flac};
} catch (e) {
console.warn(`Failed getting ATV URL! Using normal: ${e}`)
}
}
return {
encrypted: true,
url: DeezerAPI.getUrl(trackId, md5origin, mediaVersion, quality)
};
}
async fallback(info, quality = 3) { async fallback(info, quality = 3) {
let qualityInfo = Track.getUrlInfo(info); let qualityInfo = Track.getUrlInfo(info);
@ -265,11 +316,15 @@ class DeezerAPI {
//Fallback thru available qualities, -1 if none work //Fallback thru available qualities, -1 if none work
async qualityFallback(info, quality = 3) { async qualityFallback(info, quality = 3) {
try { try {
let res = await axios.head(DeezerAPI.getUrl(info.trackId, info.md5origin, info.mediaVersion, quality)); let urlGen = await this.generateUrl(info.trackId, info.md5origin, info.mediaVersion, quality);
let res = await axios.head(urlGen.url);
if (res.status > 400) throw new Error(`Status code: ${res.status}`); if (res.status > 400) throw new Error(`Status code: ${res.status}`);
//Make sure it's an int //Make sure it's an int
info.quality = parseInt(quality.toString(), 10); info.quality = parseInt(quality.toString(), 10);
info.size = parseInt(res.headers['content-length'], 10); info.size = parseInt(res.headers['content-length'], 10);
info.encrypted = urlGen.encrypted;
if (!info.encrypted)
info.direct = urlGen.url;
return info; return info;
} catch (e) { } catch (e) {
logger.warn('Quality fallback: ' + e); logger.warn('Quality fallback: ' + e);

View File

@ -168,8 +168,10 @@ class DeezerLibrary {
constructor(json, type='tracks') { constructor(json, type='tracks') {
switch (type) { switch (type) {
case 'tracks': case 'tracks':
this.count = json.loved.total; // this.count = json.loved.total;
this.data = json.loved.data.map((t) => new Track(t)); // this.data = json.loved.data.map((t) => new Track(t));
this.count = json.total;
this.data = json.data.map((t) => new Track(t));
break; break;
case 'albums': case 'albums':
this.count = json.albums.total; this.count = json.albums.total;

View File

@ -206,6 +206,7 @@ class DownloadThread {
this.stopped = true; this.stopped = true;
this.isUserUploaded = download.track.id.toString().startsWith('-'); this.isUserUploaded = download.track.id.toString().startsWith('-');
this.coverPath = null; this.coverPath = null;
this.encrypted = false;
} }
//Callback wrapper //Callback wrapper
@ -262,9 +263,11 @@ class DownloadThread {
this.download.downloaded = start; this.download.downloaded = start;
//Download //Download
let url = DeezerAPI.getUrl(this.qualityInfo.trackId, this.qualityInfo.md5origin, this.qualityInfo.mediaVersion, this.qualityInfo.quality); let urlGen = await deezer.generateUrl(this.qualityInfo.trackId, this.qualityInfo.md5origin, this.qualityInfo.mediaVersion, this.qualityInfo.quality);
this.encrypted = urlGen.encrypted;
if (this.stopped) return; if (this.stopped) return;
this._request = https.get(url, {headers: {'Range': `bytes=${start}-`}}, (r) => { this._request = https.get(urlGen.url, {headers: {'Range': `bytes=${start}-`}}, (r) => {
this._response = r; this._response = r;
let outFile = fs.createWriteStream(tmp, {flags: 'a'}); let outFile = fs.createWriteStream(tmp, {flags: 'a'});
@ -321,13 +324,18 @@ class DownloadThread {
this.download.state = 2; this.download.state = 2;
//Decrypt //Decrypt
decryptor.decryptFile(decryptor.getKey(this.qualityInfo.trackId), tmp, `${tmp}.DEC`);
let outPath = this.generatePath(this.qualityInfo.quality); let outPath = this.generatePath(this.qualityInfo.quality);
await fs.promises.mkdir(path.dirname(outPath), {recursive: true}); await fs.promises.mkdir(path.dirname(outPath), {recursive: true});
await fs.promises.copyFile(`${tmp}.DEC`, outPath); if (this.encrypted) {
await fs.promises.unlink(`${tmp}.DEC`); decryptor.decryptFile(decryptor.getKey(this.qualityInfo.trackId), tmp, `${tmp}.DEC`);
await fs.promises.copyFile(`${tmp}.DEC`, outPath);
await fs.promises.unlink(`${tmp}.DEC`);
} else {
await fs.promises.copyFile(tmp, outPath);
}
await fs.promises.unlink(tmp); await fs.promises.unlink(tmp);
let cover = null; let cover = null;
if (!this.isUserUploaded) { if (!this.isUserUploaded) {
@ -510,6 +518,8 @@ class DownloadThread {
'%trackNumber%': (this.track.trackNumber ? this.track.trackNumber : 1).toString(), '%trackNumber%': (this.track.trackNumber ? this.track.trackNumber : 1).toString(),
'%0trackNumber%': (this.track.trackNumber ? this.track.trackNumber : 1).toString().padStart(2, '0'), '%0trackNumber%': (this.track.trackNumber ? this.track.trackNumber : 1).toString().padStart(2, '0'),
'%album%': this.track.album.title, '%album%': this.track.album.title,
'%albumArtist%': this.track.album.artists[0].name,
'%albumArtists%': this.track.album.artistString,
'%year%': date.getFullYear().toString(), '%year%': date.getFullYear().toString(),
'%label%': (this.publicAlbum.label) ? this.publicAlbum.label : '' '%label%': (this.publicAlbum.label) ? this.publicAlbum.label : ''
}; };
@ -525,6 +535,11 @@ class DownloadThread {
} }
} }
//Cut path to fit into windows limits
if (fn.length >= 249) {
fn = fn.substring(0, 249);
}
//Extension //Extension
if (quality.toString() == '9') { if (quality.toString() == '9') {
fn += '.flac'; fn += '.flac';

View File

@ -10,19 +10,37 @@ class Importer extends EventEmitter {
this.tracks = []; this.tracks = [];
} }
//Conver spotify URL to URI //Resolve spotify URLs to URI
async getSpotifyURI(inputUrl) { async resolveSpotifyURL(url) {
let url = new URL(inputUrl); let parsed = new URL(url);
return 'spotify' + url.pathname.replace(new RegExp('/', 'g'), ':'); //link.tospotify
if (parsed.host == 'link.tospotify.com') {
let res = await axios.get(url);
let re = new RegExp(/window\.top\.location = validate\("(.+)"\)/);
url = res.data.match(re)[1];
}
parsed = new URL(url);
//open.spotify
if (parsed.host == 'open.spotify.com' && parsed.pathname.split('/').length >= 2) {
return 'spotify' + parsed.pathname.replace(new RegExp('/', 'g'), ':');
}
}
//Find album on deezer
async importSpotifyAlbum(uri) {
let spotifyData = await Spotify.getEmbedData(uri);
let upc = spotifyData.external_ids.upc;
let deezerData = await this.deezer.callPublicApi('album', 'upc:' + upc);
if (deezerData && deezerData.id)
return deezerData;
} }
//Import spotify playlist //Import spotify playlist
async importSpotifyPlaylist(url) { async importSpotifyPlaylist(uri) {
//Clean //Clean
this.tracks = []; this.tracks = [];
try { try {
//Fetch //Fetch
let uri = await this.getSpotifyURI(url);
let spotifyData = await Spotify.getEmbedData(uri); let spotifyData = await Spotify.getEmbedData(uri);
if (!spotifyData.tracks.items) throw Error("No items!"); if (!spotifyData.tracks.items) throw Error("No items!");

View File

@ -54,11 +54,12 @@ class Integrations extends EventEmitter {
} }
//LastFM Scrobble //LastFM Scrobble
async scrobbleLastFM(title, artist) { async scrobbleLastFM(title, album, artist) {
if (this.settings.lastFM) if (this.settings.lastFM)
this.lastfm.track.scrobble({ this.lastfm.track.scrobble({
artist: artist, artist,
track: title, track: title,
album,
timestamp: Math.floor((new Date()).getTime() / 1000) timestamp: Math.floor((new Date()).getTime() / 1000)
}); });
} }
@ -103,35 +104,39 @@ class Integrations extends EventEmitter {
//Called when playback state changed //Called when playback state changed
async updateState(data) { async updateState(data) {
if (this.discordReady) { if (this.discordReady) {
let richPresence = { if (data.state == 2){
state: data.track.artistString, let richPresence = {
details: data.track.title, state: data.track.artistString,
largeImageKey: 'icon', details: data.track.title,
instance: true, largeImageKey: 'icon',
instance: true,
}
//Show timestamp only if playing
if (data.state == 2) {
Object.assign(richPresence, {
startTimestamp: Date.now() - data.position,
endTimestamp: (Date.now() - data.position) + data.duration,
});
}
//Enabled discord join
if (this.settings.discordJoin) {
Object.assign(richPresence, {
partySize: 1,
partyMax: 10,
matchSecret: 'match_secret_' + data.track.id,
joinSecret: JSON.stringify({
pos: Math.floor(data.position),
ts: Date.now(),
id: data.track.id
}),
partyId: 'party_id_' + data.track.id
});
}
//Set
this.discordRPC.setActivity(richPresence);
} else {
this.discordRPC.clearActivity();
} }
//Show timestamp only if playing
if (data.state == 2) {
Object.assign(richPresence, {
startTimestamp: Date.now() - data.position,
endTimestamp: (Date.now() - data.position) + data.duration,
});
}
//Enabled discord join
if (this.settings.discordJoin) {
Object.assign(richPresence, {
partySize: 1,
partyMax: 10,
matchSecret: 'match_secret_' + data.track.id,
joinSecret: JSON.stringify({
pos: Math.floor(data.position),
ts: Date.now(),
id: data.track.id
}),
partyId: 'party_id_' + data.track.id
});
}
//Set
this.discordRPC.setActivity(richPresence);
} }
} }

View File

@ -1,4 +1,5 @@
const express = require('express'); const express = require('express');
const cors = require('cors');
const path = require('path'); const path = require('path');
const packageJson = require('../package.json'); const packageJson = require('../package.json');
const fs = require('fs'); const fs = require('fs');
@ -23,10 +24,17 @@ let sockets = [];
const app = express(); const app = express();
app.use(express.json({limit: '50mb'})); app.use(express.json({limit: '50mb'}));
app.use(express.static(path.join(__dirname, '../client', 'dist'))); app.use(express.static(path.join(__dirname, '../client', 'dist')));
app.use(cors({origin: 'http://localhost:8080'}));
//Server //Server
const server = require('http').createServer(app); const server = require('http').createServer(app);
const io = require('socket.io').listen(server, { const { Server } = require('socket.io');
const io = new Server(server, {
path: '/socket', path: '/socket',
//CORS for webpack debug
cors: {
origin: 'http://localhost:8080',
methods: ["GET", "POST"],
}
}); });
//Get playback info //Get playback info
@ -228,12 +236,24 @@ app.get('/shuffle', async (req, res) => {
//Get list of `type` from library //Get list of `type` from library
app.get('/library/:type', async (req, res) => { app.get('/library/:type', async (req, res) => {
let type = req.params.type; let type = req.params.type;
let data = await deezer.callApi('deezer.pageProfile', { //Normal
if (type != 'tracks') {
let data = await deezer.callApi('deezer.pageProfile', {
nb: 50,
tab: (type == 'tracks') ? 'loved' : type,
user_id: deezer.userId
});
return res.send(new DeezerLibrary(data.results.TAB, type)).end();
}
//Tracks
let data = await deezer.callApi('deezer.pagePlaylist', {
playlist_id: deezer.favoritesPlaylist,
lang: settings.contentLanguage,
nb: 50, nb: 50,
tab: (type == 'tracks') ? 'loved' : type, start: 0,
user_id: deezer.userId tags: true
}); });
res.send(new DeezerLibrary(data.results.TAB, type)); res.send(new DeezerLibrary(data.results.SONGS, type));
}); });
//DELETE from library //DELETE from library
@ -449,7 +469,7 @@ app.delete('/downloads/:index', async (req, res) => {
//Log listen to deezer & lastfm //Log listen to deezer & lastfm
app.post('/log', async (req, res) => { app.post('/log', async (req, res) => {
//LastFM //LastFM
integrations.scrobbleLastFM(req.body.title, req.body.artists[0].name); integrations.scrobbleLastFM(req.body.title, req.body.album.title, req.body.artists[0].name);
//Deezer //Deezer
if (settings.logListen) if (settings.logListen)
@ -478,53 +498,94 @@ app.post('/import', async (req, res) => {
//Create importer //Create importer
let importer = new Importer(deezer); let importer = new Importer(deezer);
//Error //Resolve URI
importer.on('error', t => { let uri = await importer.resolveSpotifyURL(req.body.url);
if (!uri) {
sockets.forEach(s => s.emit('importerError')); sockets.forEach(s => s.emit('importerError'));
}) return res.status(200).end();
//New track imported }
importer.on('imported', t => {
sockets.forEach(s => s.emit('importerTrack', t)); //Import album
}); if (uri.split(':')[1] == 'album') {
//Finished try {
importer.on('done', async (i) => { let albumRaw = await importer.importSpotifyAlbum(uri);
//Create playlist //Get album from Deezer
let playlistRaw = await deezer.callApi('playlist.create', { let data = await deezer.callApi('deezer.pageAlbum', {alb_id: albumRaw.id.toString(), lang: settings.contentLanguage});
description: i.description, let album = new Album(data.results.DATA, data.results.SONGS);
title: i.title, //Download
status: 1, if (type == 'download') {
songs: i.tracks.map(t => [parseInt(t.id, 10)]) //Enqueue
}); await downloadManager.addBatch({
//Download tracks: album.tracks,
if (type == 'download') { quality: settings.downloadsQuality,
//Fetch playlist });
let data = await deezer.callApi('deezer.pagePlaylist', { downloadManager.start();
playlist_id: playlistRaw.results.toString(), //Send empty response
lang: settings.contentLanguage, sockets.forEach(s => s.emit('importerAlbum', null));
nb: 10000, } else {
start: 0, //Send to UI
tags: true sockets.forEach(s => s.emit('importerAlbum', album));
}); }
let playlist = new Playlist(data.results.DATA, data.results.SONGS); } catch (e) {
//Enqueue logger.error(`Import album error: ${e}`);
await downloadManager.addBatch({ sockets.forEach(s => s.emit('importerError'));
tracks: playlist.tracks,
quality: settings.downloadsQuality,
playlistName: i.title
});
//Delete
await deezer.callApi('playlist.delete', {playlist_id: parseInt(playlist.id.toString(),10)});
downloadManager.start();
} }
return res.status(200).end();
}
//Send to UI //Import playlist
sockets.forEach(s => { if (uri.split(':')[1] == 'playlist') {
s.emit('importerDone'); //Error
importer.on('error', () => {
sockets.forEach(s => s.emit('importerError'));
})
//New track imported
importer.on('imported', t => {
sockets.forEach(s => s.emit('importerTrack', t));
}); });
}) //Finished
importer.on('done', async (i) => {
//Create playlist
let playlistRaw = await deezer.callApi('playlist.create', {
description: i.description,
title: i.title,
status: 1,
songs: i.tracks.map(t => [parseInt(t.id, 10)])
});
//Download
if (type == 'download') {
//Fetch playlist
let data = await deezer.callApi('deezer.pagePlaylist', {
playlist_id: playlistRaw.results.toString(),
lang: settings.contentLanguage,
nb: 10000,
start: 0,
tags: true
});
let playlist = new Playlist(data.results.DATA, data.results.SONGS);
//Enqueue
await downloadManager.addBatch({
tracks: playlist.tracks,
quality: settings.downloadsQuality,
playlistName: i.title
});
//Delete
await deezer.callApi('playlist.delete', {playlist_id: parseInt(playlist.id.toString(),10)});
downloadManager.start();
}
importer.importSpotifyPlaylist(req.body.url); //Send to UI
sockets.forEach(s => {
s.emit('importerDone');
});
})
importer.importSpotifyPlaylist(uri);
return res.status(200).end();
}
//Not imported
sockets.forEach(s => s.emit('importerError'));
res.status(200).end(); res.status(200).end();
}); });
@ -578,6 +639,15 @@ app.get('/updates', async (req, res) => {
} }
}); });
//Background image
app.get('/background', async (req, res) => {
//Missing
if (!settings.backgroundImage && !fs.existsSync(settings.backgroundImage)) {
return res.status(404).end();
}
res.sendFile(path.resolve(settings.backgroundImage));
});
//Redirect to index on unknown path //Redirect to index on unknown path
app.all('*', (req, res) => { app.all('*', (req, res) => {
res.redirect('/'); res.redirect('/');

View File

@ -44,6 +44,11 @@ class Settings {
this.contentLanguage = 'en'; this.contentLanguage = 'en';
this.contentCountry = 'US'; this.contentCountry = 'US';
this.sidebarOpen = false; this.sidebarOpen = false;
this.nativeTopBar = false;
//Has to be local path
this.backgroundImage = null;
this.lightTheme = false;
} }
//Based on electorn app.getPath //Based on electorn app.getPath
@ -121,7 +126,7 @@ class Settings {
await fs.promises.mkdir(Settings.getDir(), {recursive: true}); await fs.promises.mkdir(Settings.getDir(), {recursive: true});
} catch (_) {} } catch (_) {}
await fs.promises.writeFile(Settings.getPath(), JSON.stringify(this), 'utf-8'); await fs.promises.writeFile(Settings.getPath(), JSON.stringify(this, null, 2), 'utf-8');
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
build/iconset/16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

BIN
build/iconset/22x22.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

BIN
build/iconset/24x24.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 518 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
build/iconset/32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 765 B

BIN
build/iconset/48x48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 B

BIN
build/iconset/64x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,18 +1,19 @@
{ {
"name": "freezer", "name": "freezer",
"private": true, "private": true,
"version": "1.1.14", "version": "1.1.24",
"description": "", "description": "Freezer PC",
"scripts": { "scripts": {
"pack": "electron-builder --dir", "pack": "electron-builder --dir",
"dist": "electron-builder", "dist": "electron-builder",
"postinstall": "electron-builder install-app-deps", "postinstall": "electron-builder install-app-deps",
"build": "cd app && npm i && cd client && npm i && npm run build && cd .. && cd .. && npm run dist" "build": "cd app && npm i && cd client && npm i && npm run build && cd .. && cd .. && npm run dist"
}, },
"license": "ISC", "license": "GPL-3.0-or-later",
"homepage": "https://freezer.life",
"devDependencies": { "devDependencies": {
"electron": "^9.2.1", "electron": "^13.0.1",
"electron-builder": "^22.8.0" "electron-builder": "^22.10.5"
}, },
"build": { "build": {
"appId": "com.exttex.freezer", "appId": "com.exttex.freezer",
@ -45,19 +46,59 @@
"allowToChangeInstallationDirectory": false "allowToChangeInstallationDirectory": false
}, },
"linux": { "linux": {
"target": [ "appId": "f.f.freezer",
"AppImage" "category": "AudioVideo;Network;Audio;FileTransfer;Player",
"description": "Free music streaming client for Deezer",
"desktop": {
"Version": "1.1",
"Type": "Application",
"Name": "Freezer",
"Name[pt_PT]": "Congelador",
"GenericName": "Electron-based Deezer client",
"GenericName[pt_PT]": "Aplicação Electron no ambiente de trabalho para Deezer",
"Comment": "Desktop application for the Deezer audio streaming service",
"Comment[pt_PT]": "Cliente não-oficial do serviço de transmissão de áudio Deezer",
"Icon": "freezer",
"Categories": "AudioVideo;Network;Audio;FileTransfer;Player;",
"MimeType": "application/http;",
"Keywords": "audio;download;flac;lyrics;mp3;music;spotify;stream;",
"Keywords[pt_PT]": "áudio;descarregar;flac;letras;mp3;música;spotify;transmissão;",
"Keywords[ru]": "Фризер;Музыка;Плеер;Дизер;",
"StartupNotify": "true",
"StartupWMClass": "freezer",
"DBusActivatable": "false",
"Terminal": "false",
"NoDisplay": "false",
"Hidden": "false"
},
"executableName": "freezer",
"icon": "build/iconset",
"maintainer": "exttex",
"mimeTypes": [
"application/http"
], ],
"category": "audio", "synopsis": "Free audio streaming client for Deezer",
"icon": "build/iconset" "target": [
"AppImage",
"deb",
"tar.xz"
]
}, },
"appImage": { "appImage": {
"desktop": { "desktop": {
"X-AppImage-Name": "Freezer", "X-AppImage-Name": "Freezer"
"Name": "Freezer",
"Type": "Application",
"Categories": "AudioVideo"
} }
},
"deb": {
"packageCategory": "sound",
"priority": "optional",
"depends": [
"libflac8",
"libnotify4",
"libnss3",
"libssl1.1 | libssl1.0.0",
"libxtst6"
]
} }
} }
} }