Merge pull request 'main' (#4) from RemixDev/deemix-webui:main into main

Reviewed-on: https://codeberg.org/m3troux/deemix-webui/pulls/4
This commit is contained in:
m3troux 2020-08-06 09:11:36 +02:00
commit 79d7432cb9
8 changed files with 223 additions and 212 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -32,6 +32,7 @@ function mountApp() {
function initClient() { function initClient() {
window.clientMode = true window.clientMode = true
document.querySelector(`#open_downloads_folder`).classList.remove('hide') document.querySelector(`#open_downloads_folder`).classList.remove('hide')
document.querySelector(`#select_downloads_folder`).classList.remove('hide')
} }
document.addEventListener('DOMContentLoaded', startApp) document.addEventListener('DOMContentLoaded', startApp)

View File

@ -19,7 +19,7 @@
</h3> </h3>
<div class="inline-flex"> <div class="inline-flex">
<input autocomplete="off" type="password" id="login_input_arl" ref="loginInput" placeholder="ARL" /> <input autocomplete="off" type="password" id="login_input_arl" ref="loginInput" placeholder="ARL" />
<button id="settings_btn_copyArl" @click="copyARLtoClipboard"> <button id="settings_btn_copyArl" class="only_icon" @click="copyARLtoClipboard">
<i class="material-icons">assignment</i> <i class="material-icons">assignment</i>
</button> </button>
</div> </div>
@ -62,7 +62,12 @@
<h3 class="settings-group__header settings-group__header--with-icon"> <h3 class="settings-group__header settings-group__header--with-icon">
<i class="material-icons">folder</i>{{ $t('settings.downloadPath.title') }} <i class="material-icons">folder</i>{{ $t('settings.downloadPath.title') }}
</h3> </h3>
<input type="text" v-model="settings.downloadLocation" /> <div class="inline-flex">
<input autocomplete="off" type="text" v-model="settings.downloadLocation" />
<button id="select_downloads_folder" class="only_icon hide" @click="selectDownloadFolder">
<i class="material-icons">folder</i>
</button>
</div>
</div> </div>
<div class="settings-group"> <div class="settings-group">
@ -672,6 +677,7 @@ export default {
socket.on('updateSettings', this.updateSettings) socket.on('updateSettings', this.updateSettings)
socket.on('accountChanged', this.accountChanged) socket.on('accountChanged', this.accountChanged)
socket.on('familyAccounts', this.initAccounts) socket.on('familyAccounts', this.initAccounts)
socket.on('downloadFolderSelected', this.downloadFolderSelected)
}, },
methods: { methods: {
revertSettings() { revertSettings() {
@ -713,6 +719,13 @@ export default {
socket.emit('saveSettings', this.lastSettings, this.lastCredentials, changed ? this.lastUser : false) socket.emit('saveSettings', this.lastSettings, this.lastCredentials, changed ? this.lastUser : false)
}, },
selectDownloadFolder() {
if (window.clientMode) socket.emit('selectDownloadFolder')
},
downloadFolderSelected(folder){
console.log(folder)
this.settings.downloadLocation = folder
},
loadSettings(settings, spotifyCredentials, defaults = null) { loadSettings(settings, spotifyCredentials, defaults = null) {
if (defaults) { if (defaults) {
this.defaultSettings = { ...defaults } this.defaultSettings = { ...defaults }

View File

@ -4,77 +4,74 @@ const de = {
back: 'zurück', back: 'zurück',
loading: 'lädt', loading: 'lädt',
download: 'Download {0}', download: 'Download {0}',
by: 'um {0}', by: 'von {0}',
in: 'in {0}', in: 'in {0}',
download_hint: 'Download', download_hint: 'Download',
play_hint: 'Abspielen', play_hint: 'Play',
toggle_download_tab_hint: 'Einblenden/Ausblenden', toggle_download_tab_hint: 'Erweitern/Minimieren',
clean_queue_hint: 'Fertige löschen', clean_queue_hint: 'Entferne vollständige',
cancel_queue_hint: 'Alle abbrechen', cancel_queue_hint: 'Alle abbrechen',
listTabs: { listTabs: {
empty: '', empty: '',
all: 'alle', all: 'alle',
top_result: 'top-ergebnis', top_result: 'Top Ergebnis',
album: 'album | alben', album: 'Album | Alben',
artist: 'künstler | künstler', artist: 'Künstler | Künstler',
single: 'single | singles', single: 'Single | Singles',
title: 'titel | titel', title: 'Titel | Titel',
track: 'track | tracks', track: 'Track | Tracks',
trackN: '0 tracks | {n} track | {n} tracks', trackN: '0 Tracks | {n} Track | {n} Tracks',
releaseN: '0 veröffentlichungen | {n} veröffentlichung | {n} veröffentlichungen', releaseN: '0 Releases | {n} Release | {n} Releases',
playlist: 'playlist | playlisten', playlist: 'Playlist | Playlists',
compile: 'compilation | compilations', compile: 'Sammlung | Sammlungen',
ep: 'ep | eps', ep: 'EP | EPs',
spotifyPlaylist: 'spotify playlist | spotify playlists', spotifyPlaylist: 'Spotify Playlist | Spotify Playlists',
releaseDate: 'veröffentlichungsdatum', releaseDate: 'Veröffentlichungsdatum',
error: 'fehler' error: 'Fehler'
} }
}, },
about: { about: {
titles: { titles: {
usefulLinks: 'Hilfreiche Links', usefulLinks: 'Nützliche Links',
bugReports: 'Fehlerberichte', bugReports: 'Fehlermeldung',
contributing: 'Mitwirkende', contributing: 'Mitwirkende',
donations: 'Spenden', donations: 'Spenden',
license: 'Lizenz' license: 'Lizenz'
}, },
subtitles: { subtitles: {
bugReports: "Gibt es etwas, das im Deemix nicht funktioniert? Teil es uns mit!", bugReports: 'Funktioniert etwas in Deemix nicht? Sag uns bescheid!',
contributing: 'Du möchtest zu diesem Projekt beitragen? Das kannst du auf verschiedene Arten tun!', contributing: 'Du möchtest bei dem Projekt helfen? Das kannst du auf verschiedene Arten machen!',
donations: 'Du möchtest deemix finanziell unterstützen? Dann mach eine Spende' donations: 'Du möchtest deemix finanziell unterstützen? Dann lasse eine kleine Spende da!'
}, },
usesLibrary: 'Diese App verwendet die <strong>deemix</strong> Bibliothek, die du verwenden kannst, um Deine eigene UI für Deemix zu erstellen.', usesLibrary: 'Dieses Programm nutzt die <strong>deemix</strong> Bibliothek, die du dazu nutzen kannst deine eigene deemix UI zu erstellen.',
thanks: `Danke an <strong>rtonno</strong>, <strong>uhwot</strong> und <strong>lollilol</strong> für die Hilfe bei diesem Projekt und an <strong>BasCurtiz</strong> und <strong>scarvimane</strong> für das Design der Icons.`, thanks: 'Ein Dankeschön geht an <strong>rtonno</strong>, <strong>uhwot</strong> and <strong>lollilol</strong> für die Hilfe bei diesem Projekt und an <strong>BasCurtiz</strong> and <strong>scarvimane</strong> für die Erstellung des Logos.',
upToDate: `Bleib auf dem Laufenden mit den Updates indem du dem <a href="https://t.me/RemixDevNews" target="_blank">News Channel</a> auf Telegram folgst.`, upToDate: 'Bleib auf dem Laufenden mit den Updates indem du dem <a href="https://t.me/RemixDevNews" target="_blank">News Channel</a> auf Telegram folgst.',
officialWebsite: 'Offizielle Webseite', officialWebsite: 'Offizielle Website',
officialRepo: 'Offizielle Library Repository', officialRepo: 'Offizielle Library Repository',
officialWebuiRepo: 'Offizielle WebUI Repository', officialWebuiRepo: 'Offizielle WebUI Repository',
officialSubreddit: 'Offizieller Subreddit', officialSubreddit: 'Offizieller Subreddit',
newsChannel: 'News Kanal', newsChannel: 'News Channel',
questions: `Wenn du Fragen oder Probleme mit der App hast, suche zuerst nach einer Lösung im <a href="https://www.reddit.com/r/deemix" target="_blank">subreddit</a>. Wenn du dann nichts findest, kannst du einen Beitrag mit Deinem Thema auf dem Subreddit verfassen.`, questions: 'Bei Fragen oder Problemen mit der App, suche als erstes nach einer Lösung im <a href="https://www.reddit.com/r/deemix" target="_blank">Subreddit</a>. Wenn du da nichts findest, kannst du einen Beitrag mit deinen Problem auf dem Subreddit verfassen.',
beforeReporting: `Bevor du einen Fehler meldest, stelle sicher, dass du die neueste Version der App benutzt und dass das, was du melden möchtest, tatsächlich ein Bug ist und nicht etwas, das nur bei dir falsch ist.`, beforeReporting: 'Bevor du einen Bug meldest, stelle sicher, dass du die neueste Version der App hast und dass das, was du melden möchtest, tatsächlich ein Bug ist und nicht nur bei dir falsch ist.',
beSure: `Vergewissere dich, dass der Bug auf einem anderen Rechner vorhanden ist und melde <stark>NICHT</stark> einen Bug, wenn er bereits gemeldet wurde.`, beSure: 'Stelle sicher, dass der Bug auf anderen Computern auch vorhanden ist <strong>MELDEN NICHT</strong> einen Bug, wenn er schon gemeldet worden ist.',
duplicateReports: 'Doppelte Fehlerberichte werden geschlossen, also behalte das im Auge.', duplicateReports: 'Doppelte Fehlerberichte werden geschlossen, achte darauf.',
dontOpenIssues: `Erstelle <strong>KEINE</strong> Fehlerberichte, um Fragen zu stellen, dafür gibt es einen Subreddit.`, dontOpenIssues: '<strong>ERSTELLE KEINE</strong> Fehlermeldungen um Fragen zu stellen, es gibt einen Subreddit dafür.',
newUI: `Wenn du dich mit Python auskennst, könntest du versuchen, mit hilfe der base library eine neue Benutzeroberfläche für die App zu erstellen oder Fehler in der library mit einem Pull-Request in der <a href="https://codeberg.org/RemixDev/deemix" target="_blank">deemix Repo</a> zu beheben.`, newUI: 'Wenn du Python fließend beherrschst, kannst du versuchen, mit hilfe der base library eine neue Benutzeroberfläche für die App zu erstellen oder Fehler in der Bibliothek mit einem Pull-Request in der <a href="https://codeberg.org/RemixDev/deemix" target="_blank">deemix Repo</a> zu beheben.',
acceptFeatures: `Ich akzeptiere auch Features, aber keine komplexen Dinge, da sie direkt in der App und nicht in der Bibliothek implementiert werden können.`, acceptFeatures: 'Ich akzeptiere auch Funktionen, aber keine komplexen Dinge, da sie direkt in der App und nicht in der Bibliothek implementiert werden können.',
otherLanguages: `Wenn du eine andere Programmiersprache fließend beherrschst, könntest du versuchen, deemix in andere Programmiersprachen zu portieren!`, otherLanguages: 'Wenn du eine andere Programmiersprache fließend beherrschst, kannst du versuchen, deemix in andere Programmiersprachen zu portieren!',
understandingCode: `Du benötigst Hilfe beim verstehen des Codes? Frag einfach RemixDev auf Telegram oder Reddit.`, understandingCode: 'Du benötigst Hilfe beim verstehen des Codes? Frag einfach RemixDev auf Telegram oder Reddit.',
contributeWebUI: `Wenn du Vue.js (JavaScript) oder HTML und CSS kennst, könntest du etwas zum <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a> beitragen.`, contributeWebUI: 'Wenn du Vue.js (JavaScript) oder HTML und CSS kennst, könntest du etwas zum <a href="https://codeberg.org/RemixDev/deemix-webui" target="_blank">WebUI</a> beitragen.',
itsFree: `Du solltest daran denken, dass dies ist ein <strong>kostenloses Projekt</strong> ist und <strong>Du solltest die Künstler, die du magst, unterstützen<strong>, bevor du die Entwickler unterstützt.`, itsFree: 'Du solltest im Kopf behalten das <strong>dies ein kostenloses Projekt ist</strong> und <strong>Du solltest die Künstler unterstützen, die du magst </strong> bevor du die Entwickler unterstützt.',
notObligated: `Fühle dich nicht verpflichtet zu spenden, wir schätzen deinen Beitrag trotzdem!`, notObligated: 'Fühle dich nicht gezwungen zu spenden, danke, dass du deemix verwendest!',
lincensedunder: `Diese Arbeit ist lizensiert unter einer lincensedUnder: 'Diese Arbeit ist lizensiert unter der <a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank">GNU General Public License 3.0</a>.'
<a rel="license" href="https://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank"
>GNU General Public License 3.0</a
>.`
}, },
charts: { charts: {
title: 'Charts', title: 'Charts',
changeCountry: 'Land ändern', changeCountry: 'Land wechseln',
download: 'Charts herunterladen' download: 'Download Chart'
}, },
errors: { errors: {
title: 'Fehler für {0}', title: 'Errors für {0}',
ids: { ids: {
invalidURL: 'URL nicht erkannt', invalidURL: 'URL nicht erkannt',
unsupportedURL: 'URL noch nicht unterstützt', unsupportedURL: 'URL noch nicht unterstützt',
@ -86,7 +83,7 @@ const de = {
notOnDeezer: 'Track auf Deezer nicht verfügbar!', notOnDeezer: 'Track auf Deezer nicht verfügbar!',
notEncoded: 'Track noch nicht codiert!', notEncoded: 'Track noch nicht codiert!',
notEncodedNoAlternative: 'Track noch nicht codiert und keine Alternative gefunden!', notEncodedNoAlternative: 'Track noch nicht codiert und keine Alternative gefunden!',
wrongBitrate: 'Spur mit gewünschter Bitrate nicht gefunden.', wrongBitrate: 'Track mit gewünschter Bitrate nicht gefunden.',
wrongBitrateNoAlternative: 'Track mit gewünschter Bitrate nicht gefunden und keine Alternative gefunden!', wrongBitrateNoAlternative: 'Track mit gewünschter Bitrate nicht gefunden und keine Alternative gefunden!',
no360RA: 'Track ist nicht verfügbar in Reality Audio 360.', no360RA: 'Track ist nicht verfügbar in Reality Audio 360.',
notAvailable: "Track ist noch nicht verfügbar auf den Servern von Deezer!", notAvailable: "Track ist noch nicht verfügbar auf den Servern von Deezer!",
@ -95,113 +92,111 @@ const de = {
}, },
favorites: { favorites: {
title: 'Favoriten', title: 'Favoriten',
noPlaylists: 'Keine Playlisten gefunden', noPlaylists: 'Keine Playlist gefunden',
noAlbums: 'Keine Album-Favoriten gefunden', noAlbums: 'Keine favorisierten Alben gefunden',
noArtists: 'Keine Künstler-Favoriten gefunden', noArtists: 'Keine favorisierten Künstler gefunden',
noTracks: 'Keine Titel-Favoriten gefunden' noTracks: 'Keine favorisierten Tracks gefunden'
}, },
home: { home: {
needTologin: 'Du musst dich in dein Deezer-Konto einloggen, bevor du mit dem Download beginnen kannst.', needTologin: 'Du musst dich in deinem Deezer-Account anmelden bevor du mit dem Download starten kannst.',
openSettings: 'Einstellungen öffnen', openSettings: 'Einstellungen öffnen',
sections: { sections: {
popularPlaylists: 'Beliebte Playlisten', popularPlaylists: 'Beliebte Playlists',
popularAlbums: 'Meist gestreamte Alben' popularAlbums: 'Meistgestreamte Alben'
} }
}, },
linkAnalyzer: { linkAnalyzer: {
info: 'In dieser Sektion findest du weitere Informationen über den Link, den du versuchst herunterzuladen.', info: 'Diesen Abschnitt kannst du nutzen, um weitere Informationen über den gewünschten Link zu erhalten, den du herunterladen möchtest.',
useful: useful: "Dies ist z.B. nützlich, wenn du versuchst einige Titel herunterzuladen, welche in deinem Land nicht verfügbar sind, und du wissen möchtest, wo sie verfügbar sind.",
"Dies ist nützlich, wenn du versuchst, einige Titel herunterzuladen, die in deinem Land nicht verfügbar sind, und du zum Beispiel wissen willst, wo sie verfügbar sind.",
linkNotSupported: 'Dieser Link wird noch nicht unterstützt', linkNotSupported: 'Dieser Link wird noch nicht unterstützt',
linkNotSupportedYet: 'Es scheint, als ob dieser Link noch nicht unterstützt wird, versuche einen anderen zu analysieren.', linkNotSupportedYet: 'Es scheint so, als ob dieser Link noch nicht unterstützt wird. Versuche einen anderen Link zu analysieren.',
table: { table: {
id: 'ID', id: 'ID',
isrc: 'ISRC', isrc: 'ISRC',
upc: 'UPC', upc: 'UPC',
duration: 'Länge', duration: 'Dauer',
diskNumber: 'Disk Nummer', diskNumber: 'CD Nummer',
trackNumber: 'Titel Nummer', trackNumber: 'Track Nummer',
releaseDate: 'Veröffentlichungsdatum', releaseDate: 'Veröffentlichungsdatum',
bpm: 'BPM', bpm: 'BPM',
label: 'Musiklabel', label: 'Label',
recordType: 'Record Typ', recordType: 'Art der Aufnahme',
genres: 'Genres', genres: 'Genres',
tracklist: 'Tracklist' tracklist: 'Trackliste'
} }
}, },
search: { search: {
startSearching: 'Suche starten!', startSearching: 'Suche starten!',
description: description: 'Du kannst einen Titel, ein ganzes Album, einen Künstler, eine Playlist suchen ... alles! Du kannst auch einen Deezer-Link einfügen',
'Du kannst einen Track suchen, ein ganzes Album, einen Künstler, eine Playlist.... alles! Du kannst auch einen Deezer-Link einfügen',
fans: '{0} Fans', fans: '{0} Fans',
noResults: 'Keine Ergebnisse', noResults: 'Keine Ergebnisse',
noResultsTrack: 'Keine Titel gefunden', noResultsTrack: 'Keine Tracks gefunden',
noResultsAlbum: 'Keine Alben gefunden', noResultsAlbum: 'Keine Alben gefunden',
noResultsArtist: 'Keine Künstler gefunden', noResultsArtist: 'Keinen Künstler gefunden',
noResultsPlaylist: 'Keine Playlisten gefunden' noResultsPlaylist: 'Keine Playlist gefunden'
}, },
searchbar: 'Suche alles, was du willst (oder füge einfach einen Link ein)', searchbar: 'Suche nach allem, was dir gefällt (oder füge einfach einen Link ein)',
downloads: 'Downloads', downloads: 'Downloads',
toasts: { toasts: {
addedToQueue: '{0} zur Warteschlange hinzugefügt', addedToQueue: '{0} zur Warteschlange hinzugefügt',
alreadyInQueue: '{0} ist bereits in der Warteschlange!', alreadyInQueue: '{0} ist bereits in der Warteschlange!',
finishDownload: '{0} bereits heruntgeladen', finishDownload: '{0} vollständig heruntergeladen.',
allDownloaded: 'Alle Downloads abgeschlossen!', allDownloaded: 'Alle Downloads abgeschlossen!',
refreshFavs: 'Aktualisierung abgeschlossen!', refreshFavs: 'Abgeschlossene Downloads neu laden!',
loggingIn: 'Einloggen', loggingIn: 'Einloggen',
loggedIn: 'Eingeloggt', loggedIn: 'Eingeloggt',
alreadyLogged: 'Bereits eingeloggt', alreadyLogged: 'Bereits eingeloggt',
loginFailed: "Einloggen nicht möglich", loginFailed: "Login fehlgeschlagen",
loggedOut: 'Ausgeloggt', loggedOut: 'Ausgeloggt',
cancellingCurrentItem: 'Aktuelle Auswahl abbrechen.', cancellingCurrentItem: 'Aktuelle Auswahl abbrechen.',
currentItemCancelled: 'Aktuelle Auswahl abgebrochen.', currentItemCancelled: 'Aktuelle Auswahl wurde abgebrochen',
startAddingArtist: '{0} Alben zur Warteschlange hinzufügen', startAddingArtist: '{0} Alben werden hinzugefügt',
finishAddingArtist: '{0} Alben zur Warteschlange hinzugefügt', finishAddingArtist: '{0} Alben wurden hinzugefügt',
startConvertingSpotifyPlaylist: 'Umwandlung von Spotify-Titel in Deezer-Titel', startConvertingSpotifyPlaylist: 'Konvertierern von Spotify-Tracks zu Deezer-Tracks',
finishConvertingSpotifyPlaylist: 'Spotify Playlist konvertiert' finishConvertingSpotifyPlaylist: 'Spotify Playlist convertiert'
}, },
settings: { settings: {
title: 'Einstellungen', title: 'Einstellungen',
languages: 'Sprachen', languages: 'Sprachen',
login: { login: {
title: 'Login', title: 'Login',
loggedIn: 'Sie sind eingeloggt als {username}', loggedIn: 'Du bist eingeloggt als {username}',
arl: { arl: {
question: 'Wie bekomme ich meine eigene ARL?', question: 'Wie bekomme ich meine eigene ARL?',
update: 'ARL aktualisieren' update: 'Update ARL'
}, },
logout: 'Ausloggen' logout: 'Logout'
}, },
appearance: { appearance: {
title: 'Aussehen', title: 'Design',
slimDownloadTab: 'Schlanker Download-Tab' slimDownloadTab: 'schmaler Download-Tab'
}, },
downloadPath: { downloadPath: {
title: 'Download Pfad' title: 'Download Pfad'
}, },
templates: { templates: {
title: 'Vorlagen', title: 'Vorlagen',
tracknameTemplate: 'Titelname Vorlage', tracknameTemplate: 'Vorlage für den Tracknamen',
albumTracknameTemplate: 'Album Titel Vorlage', albumTracknameTemplate: 'Vorlage für Tracks in einem Album',
playlistTracknameTemplate: 'Playlist Titel Vorlage' playlistTracknameTemplate: 'Vorlage für Tracks in einer Playlist'
}, },
folders: { folders: {
title: 'Ordner', title: 'Folders',
createPlaylistFolder: 'Ordner für Playlist erstellen', createPlaylistFolder: 'Ordner für Playlist erstellen',
playlistNameTemplate: 'Playlist Ordner Vorlage', playlistNameTemplate: 'Vorlage für Playlist-Ordner',
createArtistFolder: 'Ordner für Künstler erstellen', createArtistFolder: 'Ordner für Künstler erstellen',
artistNameTemplate: 'Künstler Ordner Vorlage', artistNameTemplate: 'Vorlage für Künstler-Ordner',
createAlbumFolder: 'Ordner für Album erstellen', createAlbumFolder: 'Ordner für Album erstellen',
albumNameTemplate: 'Album Ordner Vorlage', albumNameTemplate: 'Vorlage für Album-Ordner',
createCDFolder: 'Ordner für CDs erstellen', createCDFolder: 'Ordner für CDs erstellen',
createStructurePlaylist: 'Erstellen von Künstler-, Alben- und CD-Ordnern auch für Playlisten', createStructurePlaylist: 'Erstellen von Künstler-, Alben- und CD-Ordnern auch für Playlists',
createSingleFolder: 'Ordner für einzelne Titel erstellen' createSingleFolder: 'Ordner für einzelne Titel erstellen'
}, },
trackTitles: { trackTitles: {
title: 'Track Titel', title: 'Songtitel',
padTracks: 'einheitliche Länge der Titelnummern (voranstehende Nullen werden ergänzt)', padTracks: 'Einheitliche Länge der Titelnummern (voranstehende Nullen werden ergänzt)',
paddingSize: 'Paddinggröße überschreiben', paddingSize: 'Innenabstand überschreiben',
illegalCharacterReplacer: 'unzulässige Zeichen ersetzen' illegalCharacterReplacer: 'Unzulässige Zeichen ersetzen'
}, },
downloads: { downloads: {
title: 'Downloads', title: 'Downloads',
@ -213,131 +208,131 @@ const de = {
1: 'MP3 128kbps' 1: 'MP3 128kbps'
}, },
overwriteFile: { overwriteFile: {
title: 'Soll ich die Dateien überschreiben?', title: 'Soll ich die Dateien überchreiben?',
y: 'Ja, Datei überschreiben', y: 'Ja überschreibe die Dateien',
n: "Nein, Datei nicht überschreiben", n: 'Nein überschreibe die Dateien nicht',
t: 'Nur Tags überschreiben' t: 'Überschreibe nur die Tags'
}, },
fallbackBitrate: 'Falls gewünschte Bitrate nicht verfügbar, auf niedrigere Bitrate zurückgreifen', fallbackBitrate: 'Falls gewünschte Bitrate nicht verfügbar, auf niedrigere Bitrate zurückgreifen',
fallbackSearch: 'Zur Suche zurückkehren, wenn der Song nicht verfügbar ist', fallbackSearch: 'Zur Suche zurückkehren, wenn der Song nicht verfügbar ist',
logErrors: 'Protokolldatei für Fehler im Download-Ordner erstellen', logErrors: 'Protokolldatei für Fehler im Download-Ordner erstellen',
logSearched: 'Protokolldatei für gesuchte Tracks erstellen', logSearched: 'Protokolldatei für gesuchte Titel erstellen',
createM3U8File: 'Erstelle Playlist-Datei (M3U8)', createM3U8File: 'Erstelle Playlist-Datei (M3U8)',
syncedLyrics: 'Erstelle synchrone Lyric-Datei (.lyr)', syncedLyrics: 'Erstelle synchrone Lyrics-Datei (.lyr)',
playlistFilenameTemplate: 'Dateinamenvorlage für Playlist', playlistFilenameTemplate: 'Vorlage für den Namen der Playlist',
saveDownloadQueue: 'Download-Warteschlange beim Schließen der App speichern' saveDownloadQueue: 'Download-Warteschlange beim Schließen der App speichern'
}, },
covers: { covers: {
title: 'Album-Cover', title: 'Album Cover',
saveArtwork: 'Cover speichern', saveArtwork: 'Cover speichern',
coverImageTemplate: 'Vorlage für Cover-Bezeichnung', coverImageTemplate: 'Vorlage für den Covernamen',
saveArtworkArtist: 'Künstlerbild speichern', saveArtworkArtist: 'Speichere das Künstlerbild',
artistImageTemplate: 'Vorlage für Künstlerbild', artistImageTemplate: 'Vorlage des Künstlerbildes',
localArtworkSize: 'Lokale Größe des Künstlerbildes', localArtworkSize: 'Lokale Grafikgröße',
embeddedArtworkSize: 'Eingebettete Größe des Künstlerbildes', embeddedArtworkSize: 'Eingebettete Grafikgröße',
localArtworkFormat: { localArtworkFormat: {
title: 'Welches Format soll das lokale Künstlerbild haben?', title: 'Welches Datei-Format soll das Cover haben?',
jpg: 'Ein jpeg Bild', jpg: 'Ein jpg Bild',
png: 'Ein png Bild', png: 'Ein png Bild',
both: 'Beides, eine jpeg und eine png' both: 'Beides (jpg + png)'
}, },
jpegImageQuality: 'JPEG Bild Qualität' jpegImageQuality: 'JPEG Qualität'
}, },
tags: { tags: {
head: 'Welche Tags sollen gespeichert werden', head: 'Welche Tags sollen gespeichert werden?',
title: 'Titel', title: 'Titel',
artist: 'Künstler', artist: 'Künstler',
album: 'Album', album: 'Album',
cover: 'Cover', cover: 'Cover',
trackNumber: 'Titel Nummer', trackNumber: 'Titelnummer',
trackTotal: 'Titel Insgesamt', trackTotal: 'Titelanzahl',
discNumber: 'Disc Nummer', discNumber: 'CD Nummer',
discTotal: 'Disc Insgesamt', discTotal: 'CDs insgesamt',
albumArtist: 'Album Künstler', albumArtist: 'Album Künstler',
genre: 'Genre', genre: 'Genre',
year: 'Jahr', year: 'Jahr',
date: 'Datum', date: 'Datum',
explicit: 'Explizite Texte', explicit: 'Explizite Lyrics',
isrc: 'ISRC', isrc: 'ISRC',
length: 'Länge', length: 'Titel Länge',
barcode: 'Album Barcode (UPC)', barcode: 'Album Barcode (UPC)',
bpm: 'BPM', bpm: 'BPM',
replayGain: 'Replay Gain', replayGain: 'Wiedergabe Lautstärke',
label: 'Album Plattenlabel', label: 'Album Plattenlabel',
lyrics: 'Unsynchronisierte Liedtexte', lyrics: 'Nicht synchronisierte Texte',
copyright: 'Urheberrecht', copyright: 'Copyright',
composer: 'Komponist', composer: 'Komponist',
involvedPeople: 'Beteiligte Personen' involvedPeople: 'Mitwirkende Personen'
}, },
other: { other: {
title: 'Andere', title: 'Sonsitge',
savePlaylistAsCompilation: 'Wiedergabelisten als Zussammenstellung speichern', savePlaylistAsCompilation: 'Speichere Playlist als Zusammenstellung',
useNullSeparator: 'Null-Trennzeichen verwenden', useNullSeparator: 'Verwende Nulltrennzeichen',
saveID3v1: 'ID3v1 ebenfalls speichern', saveID3v1: 'Speichere ID3v1 ebenfalls',
multiArtistSeparator: { multiArtistSeparator: {
title: 'Wie möchten Sie Ihre Künstler trennen?', title: 'Wie möchtest du die Künstler trennen?',
nothing: 'Nur den Hauptkünstler speichern', nothing: 'Speichere nur den Hauptkünstler',
default: 'Verwendung der Standardspezifikation', default: 'Verwende Standard Spezifikationen',
andFeat: 'Verwendung von & und feat.', andFeat: 'Verwende & und feat.',
using: 'Verwende "{0}"' using: 'Verwende "{0}"'
}, },
singleAlbumArtist: 'Nur den Interpreten des Hauptalbums speichern', singleAlbumArtist: 'Nur den Hauptkünstler speichern',
albumVariousArtists: '"Verschiedene Künstler" im Album Künstler Tag behalten', albumVariousArtists: 'Verschiedene Künstler" im Album Künstler Tag behalten',
removeAlbumVersion: '"Album-Version" aus dem Titelnamen entfernen', removeAlbumVersion: 'Entferne die "Album Version" vom Songtitel',
removeduplicateArtists: 'Kombinationen von Künstlern entfernen', removeDuplicateArtists: 'Kombinationen von Künstlern entfernen',
dateFormat: { dateFormat: {
title: 'Datumsformat für FLAC-Dateien', title: 'Datumsformatierung für FLAC Dateien',
year: 'YYYY', year: 'JJJJ',
month: 'MM', month: 'MM',
day: 'DD' day: 'TT'
}, },
featuredToTitle: { featuredToTitle: {
title: 'Was soll ich mit den Featured Künstlern machen?', title: 'Was soll ich mit featured Artists machen?',
0: 'Nichts', 0: 'Nichts',
1: 'Aus dem Titel entfernen', 1: 'Vom Titel entfernen',
3: 'Aus dem Titel und dem Albumtitel entfernen', 3: 'Vom Titel und Albumtitel entfernen',
2: 'In den Titel verschieben' 2: 'Zu dem Titel hinzufügen'
}, },
titleCasing: 'Titel Textformattierung', titleCasing: 'Titel-Schreibweise',
artistCasing: 'Künstler Textformattierung', artistCasing: 'Künstler-Schreibweise',
casing: { casing: {
nothing: 'Unverändert lassen', nothing: 'Unbearbeitet lassen',
lower: 'kleinbuchstaben', lower: 'klein',
upper: 'GROSSBUCHSTABEN', upper: 'GROSS',
start: 'Anfang Jedes Wortes', start: 'Wortanfang Gross',
sentence: 'Wie einen satz' sentence: 'Satzanfang gross'
}, },
previewVolume: 'Vorschau Lautstärke', previewVolume: 'Vorschau der Lautstärke',
executeCommand: { executeCommand: {
title: 'Befehl zur Ausführung nach dem Download', title: 'Befehl, der nach dem Download ausgeführt werden soll',
description: 'Leer lassen für keine Aktion' description: 'Leer lassen ohne Aktion'
} }
}, },
spotify: { spotify: {
title: 'Spotify-Funktionen', title: 'Spotify Features',
clientID: 'Spotify clientID', clientID: 'Spotify Client ID',
clientSecret: 'Spotify Client Secret', clientSecret: 'Spotify Client Secret',
username: 'Spotify Benutzername' username: 'Spotify Benutzername'
}, },
reset: 'Auf Standard zurücksetzen', reset: 'Auf Standardwerte zurücksetzen',
save: 'Speichern', save: 'Speichern',
toasts: { toasts: {
init: 'Einstellungen geladen!', init: 'Einstellungen geladen!',
update: 'Einstellungen aktualisiert!', update: 'Einstellungen aktualisiert!',
ARLcopied: 'ARL in die Zwischenablage kopiert' ARLcopied: 'ARL wurde in die Zwischenablage kopiert'
} }
}, },
sidebar: { sidebar: {
home: 'start', home: 'Home',
search: 'suche', search: 'Suche',
charts: 'charts', charts: 'Charts',
favorites: 'favoriten', favorites: 'Favoriten',
linkAnalyzer: 'link-analysator', linkAnalyzer: 'Link Analyse',
settings: 'einstellungen', settings: 'Einstellungen',
about: 'über' about: 'Info'
}, },
tracklist: { tracklist: {
downloadSelection: 'Auswahl herunterladen' downloadSelection: 'Downloads'
} }
} }

View File

@ -20,11 +20,13 @@ const fr = {
single: 'single | singles', single: 'single | singles',
title: 'titre | titres', title: 'titre | titres',
track: 'piste | pistes', track: 'piste | pistes',
trackN: '0 pistes | {n} piste | {n} pistes', trackN: '0 piste | {n} piste | {n} pistes',
releaseN: '0 parutions | {n} parution | {n} parutions', releaseN: '0 parution | {n} parution | {n} parutions',
playlist: 'playlist | playlists', playlist: 'playlist | playlists',
compile: 'compilation | compilations', compile: 'compilation | compilations',
ep: 'ep | eps', ep: 'ep | eps',
more: "Plus d'albums",
featured: 'En vedette dans',
spotifyPlaylist: 'playlist spotify | playlists spotify', spotifyPlaylist: 'playlist spotify | playlists spotify',
releaseDate: 'date de parution', releaseDate: 'date de parution',
error: 'erreur' error: 'erreur'
@ -57,7 +59,7 @@ const fr = {
beSure: "Assurez-vous que le bug est reproductible sur d'autres machines et aussi de <strong>NE PAS</strong> signaler un bug si celui-ci a déjà été mentionné.", beSure: "Assurez-vous que le bug est reproductible sur d'autres machines et aussi de <strong>NE PAS</strong> signaler un bug si celui-ci a déjà été mentionné.",
duplicateReports: 'Les doublons de rapports de bug seront supprimés, alors gardez un œil sur cela.', duplicateReports: 'Les doublons de rapports de bug seront supprimés, alors gardez un œil sur cela.',
dontOpenIssues: "<strong>NE PAS</strong> ouvrir un nouveau problème pour poser des questions, il existe un subreddit pour cela.", dontOpenIssues: "<strong>NE PAS</strong> ouvrir un nouveau problème pour poser des questions, il existe un subreddit pour cela.",
newUI: `Si vous maîtrisez python, vous pouvez essayer de créer une nouvelle interface utilisateur pour l'application à l'aide de la bibliothèque de base, ou corriger des bugs dans la bibliothèque avec une requête sur le <a href="https://codeberg.org/RemixDev/deemix" target="_blank">répertoire de dépôt</a>.`, newUI: `Si vous maîtrisez python, vous pouvez essayer de créer une nouvelle interface utilisateur pour l'application à l'aide de la bibliothèque de base, ou corriger des bugs dans la bibliothèque à l'aide d'une demande de fusion de branches (pull request) sur le <a href="https://codeberg.org/RemixDev/deemix" target="_blank">répertoire de dépôt</a>.`,
acceptFeatures: "J'accepte également les fonctionnalités, mais pas de choses complexes, car elles peuvent être implémentées directement dans l'application et non dans la bibliothèque.", acceptFeatures: "J'accepte également les fonctionnalités, mais pas de choses complexes, car elles peuvent être implémentées directement dans l'application et non dans la bibliothèque.",
otherLanguages: "Si vous maîtrisez un autre langage de programmation, vous pouvez essayer de transposer deemix dans d'autres langages de programmation !", otherLanguages: "Si vous maîtrisez un autre langage de programmation, vous pouvez essayer de transposer deemix dans d'autres langages de programmation !",
understandingCode: "Vous avez besoin d'aide pour comprendre le code ? Il suffit de contacter RemixDev sur Telegram ou Reddit.", understandingCode: "Vous avez besoin d'aide pour comprendre le code ? Il suffit de contacter RemixDev sur Telegram ou Reddit.",

View File

@ -112,6 +112,17 @@ button {
} }
} }
&.only_icon {
min-width: 24px;
width: 48px;
margin: 0px 0px 0px 8px;
padding: 0px 4px;
i {
padding: 6px 0px;
}
}
&:active { &:active {
background-color: var(--accent-color); background-color: var(--accent-color);
transform: scale(0.98); transform: scale(0.98);

View File

@ -21,21 +21,10 @@
margin: 8px 0px; margin: 8px 0px;
} }
#login_input_arl { .inline-flex input {
margin-bottom: 0px; margin-bottom: 0px;
} }
#settings_btn_copyArl {
min-width: 24px;
width: 48px;
margin: 0px 0px 0px 8px;
padding: 0px 4px;
i {
padding: 6px 0px;
}
}
#spotify_icon { #spotify_icon {
width: 24px; width: 24px;
height: 24px; height: 24px;