Finished translations (maybe)
authorRemixDev <deezloaderremix@gmail.com>
Fri, 13 Sep 2019 14:01:40 +0000 (16:01 +0200)
committerRemixDev <deezloaderremix@gmail.com>
Fri, 13 Sep 2019 14:01:40 +0000 (16:01 +0200)
app/i18n.js
app/locales/de.json [deleted file]
app/locales/en.json [deleted file]
app/locales/it.json [deleted file]
app/public/js/frontend.js
app/public/js/i18n.min.js [new file with mode: 0644]
app/public/locales/de.json [new file with mode: 0644]
app/public/locales/en.json [new file with mode: 0644]
app/public/locales/it.json [new file with mode: 0644]
app/views/index.ejs

index bbfbeed6b24da5bbacb67dd05e81abb16038392c..83e5b1b090c86a0c76315d522000ffc1aa766128 100644 (file)
@@ -5,7 +5,7 @@ i18n.configure({
   locales:['en', 'it', 'de'],
 
   // where to store json files - defaults to './locales' relative to modules directory
-  directory: __dirname + '/locales',
+  directory: __dirname + '/public/locales',
   defaultLocale: 'en',
 
   // sets a custom cookie name to parse locale settings from  - defaults to NULL
diff --git a/app/locales/de.json b/app/locales/de.json
deleted file mode 100644 (file)
index 3ebffba..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-{
-       "Please login to your deezer account": "Bitte loggen Sie sich in Ihr deezer-Konto ein",
-       "Email": "Email",
-       "Password": "Passwort",
-       "userToken": "Benutzertoken",
-       "How do I get my userToken?": "Wie bekomme ich meinen Benutzertoken?",
-       "Log in": "Anmelden",
-       "Sign up": "Registrieren",
-       "Settings": "Einstellungen",
-       "Path Settings": "Pfadeinstellungen",
-       "Download folder path": "Download-Ordnerpfad",
-       "Tracknames template": "Vorlage für Titelnamen",
-       "Supported variables are": "Unterstützte Varablen sind",
-       "Album tracknames template": "Vorlage für Album Titelnamen",
-       "Album names template": "Vorlage für Albumnamen",
-       "Playlist tracknames template": "Vorlage für Playlist Titelnamen",
-       "More Path Settings": "weitere Pfadeinstellungen",
-       "Create folders for Artists": "Ordner für Künstler erstellen",
-       "Create folders for Albums": "Ordner für Alben erstellen",
-       "Create folders for CDs": "Ordner für CDs erstellen",
-       "Create Artist, Albums and CDs folders for Playlists too": "Erstellen von Künstler-, Alben- und CD-Ordner auch für Wiedergabelisten.",
-       "Write all Artists in track filename": "Schreibt alle Künstler in den Dateinamen ",
-       "Adds 0s before %number% to have the same character length": "Fügt Nullen vor %number% hinzu, um eine einheitliche Zeichenlänge zu bekommen.",
-       "Add padding to track numbers": "Hinzufügen von Padding zu Titelnummern",
-       "Overwrite padding size": "Überschreiben der Paddinggröße",
-       "App Settings": "App-Einstellungen",
-       "Concurrent download limit": "Gleichzeitiges Download-Limit",
-       "Preferred bitrate": "Bevorzugte Bitrate",
-       "Fallback to lower bitrates if preferred is not available": "Falls gewünschte Bitrate nicht verfügbar, kann auf Niedrigere zurückgegriffen werden",
-       "Fallback to search if song is not available": "Rückfall zur Suche, wenn ein Song nicht verfügbar ist.",
-       "Download albums with one track as a single track": "Alben mit nur einem Titel als einzelnen Titel herunterladen",
-       "Create log file for Errors inside download folder": "Protokolldatei für Fehler im Download-Ordner erstellen",
-       "Create log file for Alternatives inside download folder": "Protokolldatei für Alternativen im Download-Ordner erstellen",
-       "Create M3U8 (Playlist) File": "Erstelle eine M3U8 (Playlist) Datei",
-       "Download Synced Lyrics File (.lyr)": "Synchrone Liedtextdatei herunterladen (.lyr)",
-       "Minimize to system tray": "In die Taskleiste minimieren",
-       "Artworks": "Bilder",
-       "Artwork Size": "Bildgröße",
-       "Save Album Artwork": "Speichere Album-Coverbilder",
-       "Album Artwork Name Template": "Namensvorlage für Album-Coverbilder",
-       "Save Artist Artwork": "Speichere Künstler Bilder",
-       "Artist Artwork Name Template": "Namensvorlage für Künstler Bilder",
-       "Download images as PNGs": "Herunterladen der Bilder als PNGs",
-       "Tags": "Tags",
-       "Null Character": "Nullzeichen",
-       "with space": "mit Leerzeichen",
-       "Multitag Separator": "Multitag Separator",
-       "YY": "JJ",
-       "MM": "MM",
-       "DD": "TT",
-       "Date Format": "Datumsformat",
-       "digit": "Digit",
-       "Year Format": "Jahresformatierung",
-       "Replaces albums tags with the playlist ones": "Ersetzt Alben-Tags durch die Playlist-Tags.",
-       "Save Playlist as Compilation": "Wiedergabeliste als Zusammenstellung speichern",
-       "Remove \"(Album Version)\" from tracknames": "Entferne \"(Album Version)\" von Titelnamen",
-       "Choose Which Tags To Save": "Wähle, welche Tags gespeichert werden sollen",
-       "Spotify Features": "Spotify Unterstützung",
-       "SpotifyFeatures_Info": "\"Spotify Unterstützung\" lädt <b>KEINE</b> Musik von Spotify.<br>Dies ermöglicht nur einen praktischen In-App-Metadatenkonverter. Wenn ein Song nicht auf Deezer verfügbar ist, kann er nicht heruntergeladen werden!<br>Infos, zur Erlangung der Client- und Secret IDs gibt es <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">hier</a>",
-       "Client ID": "Client ID",
-       "Client Secret": "Client Secret",
-       "Spotify Username (for the Playlists Tab)": "Spotify Benutzername (für das Playlist Tab)",
-       "You are logged in as": "Angemeldet als",
-       "Logout": "Logout",
-       "Save": "Speichern",
-       "Default Settings": "Standardeinstellungen",
-       "Close": "Schliessen",
-       "Saved Tags": "Gespeicherte Tags",
-       "About the App": "Über die App",
-       "About": "Über",
-       "Search": "Suchen",
-       "Charts": "Charts",
-       "Playlists": "Playlisten",
-       "Link Analyzer": "Link Analysator",
-       "Download from URL": "Download von URL",
-       "Downloads": "Downloads",
-       "Enable Night Mode": "Nachtmodus einschalten",
-       "Start searching...": "Starte Suche ...",
-       "Song": "Song",
-       "Album": "Album",
-       "Artist": "Artist",
-       "Playlist": "Playlist",
-       "Songs": "Songs",
-       "Type": "Type",
-       "Albums": "Alben",
-       "Name": "Name",
-       "Nothing found!": "Nichts gefunden!",
-       "Country": "Land",
-       "Download Playlist": "Playlist herunterladen",
-       "Refresh Playlists": "Playlisten aktualisieren",
-       "See Available Countries": "Verfügbare Länder anzeigen",
-       "Alternative Link": "Alternativer Link",
-       "Duration": "Dauer",
-       "Disc Number": "Disknumer",
-       "Track Number": "Titelnumer",
-       "Release Date": "Erscheinungs Datum",
-       "Show Tracklist": "Zeige Titelliste",
-       "Label": "Label",
-       "Record Type": "Record Type",
-       "Genres": "Genre",
-       "Open Downloads Folder": "Öffne Downloadordner",
-       "Cancel All Downloads": "Stoppe Downloads",
-       "Clear List": "Lösche Liste",
-       "Size": "Größe",
-       "Downloaded": "Heruntergeladen",
-       "Failed": "Fehlgeschlagen",
-       "original code by ZzMTV": "original code by ZzMTV",
-       "Title": "Titel",
-       "Cover": "Cover",
-       "Track Total": "Titel Total",
-       "Disc Total": "Disk Total",
-       "Album Artist": "Album Artist",
-       "Genre": "Genre",
-       "Year": "Jahr",
-       "Date": "Datum",
-       "Explicit": "Explizit",
-       "Length": "Länge",
-       "Barcode": "Barcode",
-       "Replay Gain": "Wiedergabe Verstärkung",
-       "Unsynchronised Lyrics": "Unsynchronisierte Liedtexte",
-       "Copyright": "Copyright",
-       "Publisher": "Herausgeber",
-       "Composer": "Komponist",
-       "Mixer": "Mixer",
-       "Author": "Autor",
-       "Writer": "Schriftsteller",
-       "Engineer": "Techniker",
-       "Producer": "Produzent",
-       "Branch": "Branch",
-       "Version": "Version",
-       "Based on": "Basiert auf",
-       "Maintainers": "Betreuer",
-       "Repo": "Repo",
-       "FAQ": "FAQ",
-       "Official mirrors": "Offizielle Spiegel",
-       "Interface": "Interface",
-       "Telegram Contacts": "Telegram Kontakte",
-       "News Channel": "News Kanal",
-       "Betas Channel": "Beta Kanal",
-       "Stable Releases Channel": "Stable Release Kannal",
-       "Special Thanks to": "Special Thanks to",
-       "Feedback": "Rückmeldungen",
-       "Feedback_Text": "Hast du ein paar Rückmeldungen oder möchtest du nach neuen Features fragen? Eröffne ein neues <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">Ticket</a> und füge das Label 'Feature' hinzu.",
-       "Reporting Bugs": "Fehler Melden",
-       "Bugs_Text": "Wenn du irgendwelche Fehler entdeckst, schaue zuerst auf die <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/FAQ\" target=\"_blank\">FAQ Seite</a>.<br><br/> Wenn du dort keine Lösung für dein Problem findest, erstelle ein <a href=\"https://github.com/RemixDev/DRemixIssues/issues/new/choose\" target=\"_blank\">neues Ticket</a>. Bitte erstelle eine möglichst genaue und detailierte Fehlerbeschreibung. <br>Nur so kann der Fehler nachvollzogen und beseitigt werden. DANKE<br/>",
-       "Contacts": "Kontakt",
-       "Contacts_Text": "Wenn du über die App diskutieren oder uns helfen möchtest, kannst du das in der <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Telegramgruppe</a> tun!",
-       "Attention!": "Achtung!",
-       "Attention_Text": "Die Autoren rufen nicht zu kriminellen Handlungen auf!<br><br>Die Nutzung dieses Tools kann in deinem Land illegal sein, bitte informiere dich!<br><br>Die Autoren geben keinerlei Garantien und sind nicht verantwortlich für Schäden oder Beeinträchtigungen jeglicher Art, die sich aus der Verwendung dieser Software ergeben!",
-       "Changelog": "Änderungsprotokoll",
-       "Full Changelog Here": "komplettes Änderungsprotokoll",
-       "License": "Lizenz",
-       "Contributions": "Beitragen",
-       "Contributions_Text": "<h5>Du möchtest zu diesem Projekt beitragen?<br>Du kannst das auf verschiedene Weise tun!</b></h5><p>Wenn du JavaScript, HTML, CSS oder Node.js kennst, kannst du mit Hilfe des offiziellen Repos, Code schreiben, Fehler beheben und Funktionen hinzufügen: <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix\" target=\"_blank\">offizielles Repo</a>.</p><p>Wenn du gut in Grafik und Design bist, kannst du helfen, indem du ein neues Design <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">hier</a> einreichst.<br><p>Denke daran, dass wir (sozusagen) den material Design Prinzipien folgen: <a href=\"https://material.io/\" target=\"_blank\">material Design Prinzipien</a>.</p>Wenn du gut darin bist, Fehler zu finden, kannst du uns beim Beta Test der App helfen.<br>Trete der <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Telegram Gruppe</a> bei, um über neue Betas informiert zu werden.</p><hr><h5>Du möchtest uns finanziell unterstützen?<br>Du kannst für uns Spenden!</h5><p>Du kannst mit Hilfe der nachfolgenden Links Spenden.<br>Aber bedenke, das <b>dies ein freies Projekt ist</b> und <b>das du die Künstler die du liebst unterstützt</b> bevor du den Entwicker unterstützt.<br>Fühle dich nicht verpflichtet zu spenden, ich schätze dich trotzdem!</p>",
-       "I got it!": "Ich habe es verstanden",
-       "Available Countries for": "Verfügbare Länder für",
-       "Song/Album URL": "Song/Album URL",
-       "LinkAnalyzer_Info": "In diesem Abschnitt können Sie weitere Informationen über den Link finden, den Sie herunterladen möchten.<br/>Dies ist nützlich, wenn Sie versuchen, einige Titel herunterzuladen, die in Ihrem Land nicht verfügbar sind und wissen möchten, wo sie verfügbar sind.",
-       "DownloadURL_Info": "Song/Playlist/Album/Artist URL, getrennt durch ';'",
-       "Download selection": "Download selection",
-       "Save ID3v1 tags as well": "Speichere auch ID3v1 tags",
-       "Language": "Sprache"
-}
diff --git a/app/locales/en.json b/app/locales/en.json
deleted file mode 100644 (file)
index 026ab6e..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-{
-       "Please login to your deezer account": "Please login to your deezer account",
-       "Email": "Email",
-       "Password": "Password",
-       "userToken": "userToken",
-       "How do I get my userToken?": "How do I get my userToken?",
-       "Log in": "Log in",
-       "Sign up": "Sign up",
-       "Settings": "Settings",
-       "Path Settings": "Path Settings",
-       "Download folder path": "Download folder path",
-       "Tracknames template": "Tracknames template",
-       "Supported variables are": "Supported variables are",
-       "Album tracknames template": "Album tracknames template",
-       "Album names template": "Album names template",
-       "Playlist tracknames template": "Playlist tracknames template",
-       "More Path Settings": "More Path Settings",
-       "Create folders for Artists": "Create folders for Artists",
-       "Create folders for Albums": "Create folders for Albums",
-       "Create folders for CDs": "Create folders for CDs",
-       "Create Artist, Albums and CDs folders for Playlists too": "Create Artist, Albums and CDs folders for Playlists too",
-       "Write all Artists in track filename": "Write all Artists in track filename",
-       "Adds 0s before %number% to have the same character length": "Adds 0s before %number% to have the same character length",
-       "Add padding to track numbers": "Add padding to track numbers",
-       "Overwrite padding size": "Overwrite padding size",
-       "App Settings": "App Settings",
-       "Concurrent download limit": "Concurrent download limit",
-       "Preferred bitrate": "Preferred bitrate",
-       "Fallback to lower bitrates if preferred is not available": "Fallback to lower bitrates if preferred is not available",
-       "Fallback to search if song is not available": "Fallback to search if song is not available",
-       "Download albums with one track as a single track": "Download albums with one track as a single track",
-       "Create log file for Errors inside download folder": "Create log file for Errors inside download folder",
-       "Create log file for Alternatives inside download folder": "Create log file for Alternatives inside download folder",
-       "Create M3U8 (Playlist) File": "Create M3U8 (Playlist) File",
-       "Download Synced Lyrics File (.lyr)": "Download Synced Lyrics File (.lyr)",
-       "Minimize to system tray": "Minimize to system tray",
-       "Artworks": "Artworks",
-       "Artwork Size": "Artwork Size",
-       "Save Album Artwork": "Save Album Artwork",
-       "Album Artwork Name Template": "Album Artwork Name Template",
-       "Save Artist Artwork": "Save Artist Artwork",
-       "Artist Artwork Name Template": "Artist Artwork Name Template",
-       "Download images as PNGs": "Download images as PNGs",
-       "Tags": "Tags",
-       "Null Character": "Null Character",
-       "with space": "with space",
-       "Multitag Separator": "Multitag Separator",
-       "YY": "YY",
-       "MM": "MM",
-       "DD": "DD",
-       "Date Format": "Date Format",
-       "digit": "digit",
-       "Year Format": "Year Format",
-       "Replaces albums tags with the playlist ones": "Replaces albums tags with the playlist ones",
-       "Save Playlist as Compilation": "Save Playlist as Compilation",
-       "Remove \"(Album Version)\" from tracknames": "Remove \"(Album Version)\" from tracknames",
-       "Choose Which Tags To Save": "Choose Which Tags To Save",
-       "Spotify Features": "Spotify Features",
-       "SpotifyFeatures_Info": "\"Spotify Features\" will <b>NOT</b> download music from Spotify.<br>This just enables a practical in app metadata converter. If a song is not on Deezer it can't be downloaded<br>You can see how to get the Client and Secret IDs <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">here</a>",
-       "Client ID": "Client ID",
-       "Client Secret": "Client Secret",
-       "Spotify Username (for the Playlists Tab)": "Spotify Username (for the Playlists Tab)",
-       "You are logged in as": "You are logged in as",
-       "Logout": "Logout",
-       "Save": "Save",
-       "Default Settings": "Default Settings",
-       "Close": "Close",
-       "Saved Tags": "Saved Tags",
-       "About the App": "About the App",
-       "About": "About",
-       "Search": "Search",
-       "Charts": "Charts",
-       "Playlists": "Playlists",
-       "Link Analyzer": "Link Analyzer",
-       "Download from URL": "Download from URL",
-       "Downloads": "Downloads",
-       "Enable Night Mode": "Enable Night Mode",
-       "Start searching...": "Start searching...",
-       "Song": "Song",
-       "Album": "Album",
-       "Artist": "Artist",
-       "Playlist": "Playlist",
-       "Songs": "Songs",
-       "Type": "Type",
-       "Albums": "Albums",
-       "Name": "Name",
-       "Nothing found!": "Nothing found!",
-       "Country": "Country",
-       "Download Playlist": "Download Playlist",
-       "Refresh Playlists": "Refresh Playlists",
-       "See Available Countries": "See Available Countries",
-       "Alternative Link": "Alternative Link",
-       "Duration": "Duration",
-       "Disc Number": "Disc Number",
-       "Track Number": "Track Number",
-       "Release Date": "Release Date",
-       "Show Tracklist": "Show Tracklist",
-       "Label": "Label",
-       "Record Type": "Record Type",
-       "Genres": "Genres",
-       "Open Downloads Folder": "Open Downloads Folder",
-       "Cancel All Downloads": "Cancel All Downloads",
-       "Clear List": "Clear List",
-       "Size": "Size",
-       "Downloaded": "Downloaded",
-       "Failed": "Failed",
-       "original code by ZzMTV": "original code by ZzMTV",
-       "Title": "Title",
-       "Cover": "Cover",
-       "Track Total": "Track Total",
-       "Disc Total": "Disc Total",
-       "Album Artist": "Album Artist",
-       "Genre": "Genre",
-       "Year": "Year",
-       "Date": "Date",
-       "Explicit": "Explicit",
-       "Length": "Length",
-       "Barcode": "Barcode",
-       "Replay Gain": "Replay Gain",
-       "Unsynchronised Lyrics": "Unsynchronised Lyrics",
-       "Copyright": "Copyright",
-       "Publisher": "Publisher",
-       "Composer": "Composer",
-       "Mixer": "Mixer",
-       "Author": "Author",
-       "Writer": "Writer",
-       "Engineer": "Engineer",
-       "Producer": "Producer",
-       "Branch": "Branch",
-       "Version": "Version",
-       "Based on": "Based on",
-       "Maintainers": "Maintainers",
-       "Repo": "Repo",
-       "FAQ": "FAQ",
-       "Official mirrors": "Official mirrors",
-       "Interface": "Interface",
-       "Telegram Contacts": "Telegram Contacts",
-       "News Channel": "News Channel",
-       "Betas Channel": "Betas Channel",
-       "Stable Releases Channel": "Stable Releases Channel",
-       "Special Thanks to": "Special Thanks to",
-       "Feedback": "Feedback",
-       "Feedback_Text": "Do you have some feedback or want to ask for some new features? Open a <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">new Issue</a> and add the 'Feature' label.",
-       "Reporting Bugs": "Reporting Bugs",
-       "Bugs_Text": "If you experience any bugs first of all check the <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/FAQ\" target=\"_blank\">FAQ page</a>.<br> If you can't find a solution for your problem, open a <a href=\"https://github.com/RemixDev/DRemixIssues/issues/new/choose\" target=\"_blank\">new issue</a> and send the bug report there, thank you.",
-       "Contacts": "Contacts",
-       "Contacts_Text": "If you want to discuss or help with the app you can do so in the <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Telegram group</a>!",
-       "Attention!": "Attention!",
-       "Attention_Text": "The authors do not call to commit crimes!<br/>The usage of this tool may be illegal in your country, please inform yourself!<br/>The authors give no guarantees at all and aren't responsible for any damage or harm of any kind resulting from the use of this software!",
-       "Changelog": "Changelog",
-       "Full Changelog Here": "Full Changelog Here",
-       "License": "License",
-       "Contributions": "Contributions",
-       "Contributions_Text": "<h5>You want to contribute to this project? You can do that <b>in different ways!</b></h5><p>If you know JavaScript, HTML, CSS or Node.js you could contribute writing code, fixing bugs and adding features using the <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix\" target=\"_blank\">Official Repo</a>.</p><p>If you are good at graphics and design you could help by submitting a new design, you can open a new issue with some design <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">here</a>.<br><p>Keep in mind that we are (sorta) following the <a href=\"https://material.io/\" target=\"_blank\">Material Design Principles</a>.</p>If you are good at finding bugs you can help Beta Test the app before release.<br>Join our <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Telegram Group</a> to be notified when betas come out!</p><hr><h5>You want to contribute monetarily? You could make a donation!</h5><p>If you can donate you can do that with this links.<br>You shoud remember that <b>this is a free project</b> and <b>you should support the artists you love</b> before supporting the developer.<br>Don't feel obligated to donate, I appreciate you anyway!</p>",
-       "I got it!": "I got it!",
-       "Available Countries for": "Available Countries for",
-       "Song/Album URL": "Song/Album URL",
-       "LinkAnalyzer_Info": "You can use this section to find out more information about the link you are trying to download<br/>This is usefull if you're trying to download some tracks that are not available in your country and want to know where they are available",
-       "DownloadURL_Info": "Song/Playlist/Album/Artist URL, separated by ';'",
-       "Download selection": "Download selection",
-       "Save ID3v1 tags as well": "Save ID3v1 tags as well",
-       "Language": "Language",
-       "You setted it up wrong!": "You setted it up wrong!",
-       "Somehow you managed to fuck it up. Good job.<br>Now go do the guide again.<br><br>If you need the link again <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">Here it is</a>": "Somehow you managed to fuck it up. Good job.<br>Now go do the guide again.<br><br>If you need the link again <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">Here it is</a>",
-       "You need to restart the app to apply the changes": "You need to restart the app to apply the changes",
-       "Changing the spotify settings id and secret requires an app restart": "Changing the spotify settings id and secret requires an app restart",
-       "Spotify Features is not enabled": "Spotify Features is not enabled",
-       "spotifyFeaturesMessage": "You should add spotify's clientId and clientSecret in the settings and then restart the app to use this feature<br>You can see how to do that in <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">this guide</a><br><br>THIS FEATURE DOES'T LET YOU DOWNLOAD FROM SPOTIFY. This just enables a practical in app metadata converter. If a song is not on Deezer it can't be downloaded",
-       "Can't find the track on Deezer!": "Can't find the track on Deezer!",
-       "Can't find the album on Deezer!": "Can't find the album on Deezer!"
-}
\ No newline at end of file
diff --git a/app/locales/it.json b/app/locales/it.json
deleted file mode 100644 (file)
index 6fd1c2c..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-{
-       "Settings": "Impostazioni",
-       "About the App": "Sull'applicazione",
-       "About": "Info",
-       "Search": "Cerca",
-       "Charts": "Classifiche",
-       "Playlists": "Playlist",
-       "Link Analyzer": "Analizza Link",
-       "Download from URL": "Scarica da URL",
-       "Downloads": "Downloads",
-       "Enable Night Mode": "Attiva Modalità Notte",
-       "Start searching...": "Inizia a cercare...",
-       "Song": "Brano",
-       "Album": "Album",
-       "Artist": "Artista",
-       "Playlist": "Playlist",
-       "Songs": "Brani",
-       "Type": "Tipo",
-       "Albums": "Album",
-       "Name": "Nome",
-       "Nothing found!": "Trovato nulla!",
-       "Country": "Nazione",
-       "Download Playlist": "Scarica Playlist",
-       "Refresh Playlists": "Ricarica Playlists",
-       "See Available Countries": "Mostra Paesi Disponibili",
-       "Alternative Link": "Link Alternativo",
-       "Duration": "Durata",
-       "Disc Number": "Numero Disco",
-       "Track Number": "Numero Traccia",
-       "Release Date": "Data d'Uscita",
-       "Show Tracklist": "Mostra Scaletta",
-       "Label": "Casa Discografica",
-       "Record Type": "Tipo di Disco",
-       "Genres": "Generi",
-       "Open Downloads Folder": "Apri Cartella di Download",
-       "Cancel All Downloads": "Annulla tutti i Download",
-       "Clear List": "Pulisci Lista",
-       "Size": "Dimensione",
-       "Downloaded": "Scaricati",
-       "Failed": "Errori",
-       "original code by ZzMTV": "codice originale di ZzMTV",
-       "Please login to your deezer account": "Effettua il login con il tuo account Deezer",
-       "Email": "Email",
-       "Password": "Password",
-       "userToken": "userToken",
-       "How do I get my userToken?": "Come ottengo il mio userToken?",
-       "Log in": "Login",
-       "Sign up": "Registrati",
-       "Path Settings": "Impostazioni percorsi",
-       "Download folder path": "Percorso di download",
-       "Tracknames template": "Template nome traccia",
-       "Supported variables are": "Variabili supportate",
-       "Album tracknames template": "Template nome traccia negli Album",
-       "Album names template": "Template nomi Album",
-       "Playlist tracknames template": "Template nome traccia nelle Playlist",
-       "More Path Settings": "Altre impostazioni percorsi",
-       "Create folders for Artists": "Crea cartelle per gli Artisti",
-       "Create folders for Albums": "Crea cartelle per gli Album",
-       "Create folders for CDs": "Crea cartelle per i CD",
-       "Create Artist, Albums and CDs folders for Playlists too": "Crea cartelle per Artisti, Album e CD anche per le Playlist",
-       "Write all Artists in track filename": "Scrivi tutti gli artisti nel nome del file",
-       "Adds 0s before %number% to have the same character length": "Aggiunge 0 in %number% in modo che tutte le traccie abbiano lo stesso numero di caratteri",
-       "Add padding to track numbers": "Aggiungi zeri ai numeri di traccia",
-       "Overwrite padding size": "Sovrascrivi il numero di zeri da aggiungere",
-       "App Settings": "Impostazioni App",
-       "Concurrent download limit": "Limite download concorrenti",
-       "Preferred bitrate": "Bitrate preferito",
-       "Fallback to lower bitrates if preferred is not available": "Ripiega a bitrate più bassi se il bitrate preferito non è presente",
-       "Fallback to search if song is not available": "Ripiega alla ricerca se il brano non è avviabile",
-       "Download albums with one track as a single track": "Scarica album con una sola traccia come traccia singola",
-       "Create log file for Errors inside download folder": "Crea file di log per gli errori dentro la cartella di download",
-       "Create log file for Alternatives inside download folder": "Crea file di log per le alternative dentro la cartella di download",
-       "Create M3U8 (Playlist) File": "Crea il file M3U8 (Playlist)",
-       "Download Synced Lyrics File (.lyr)": "Scarica il file per i testi sincronizzati (.lyr)",
-       "Minimize to system tray": "Riduci a icona al posto di uscire",
-       "Artworks": "Copertine",
-       "Artwork Size": "Dimensioni Copertine",
-       "Save Album Artwork": "Salva Copertina Album",
-       "Album Artwork Name Template": "Template Nome Copertina Album",
-       "Save Artist Artwork": "Salva Copertina Artista",
-       "Artist Artwork Name Template": "Template Nome Copertina Artista",
-       "Download images as PNGs": "Scarica immagini come PNG",
-       "Tags": "Tag",
-       "Null Character": "Carattere Nullo",
-       "with space": "con spazio",
-       "Multitag Separator": "Separatore Multitag",
-       "YY": "AA",
-       "MM": "MM",
-       "DD": "GG",
-       "Date Format": "Formato Data",
-       "digit": "caratteri",
-       "Year Format": "Formato Anno",
-       "Replaces albums tags with the playlist ones": "Rimpiazza i tag dell'album con quelli della playlist",
-       "Save Playlist as Compilation": "Salva Playlist come Compilation",
-       "Remove \"(Album Version)\" from tracknames": "Rimuovi \"(Album Version)\" dal nome della traccia",
-       "Choose Which Tags To Save": "Scegli quali tag salvare",
-       "Spotify Features": "Spotify Features",
-       "Client ID": "Client ID",
-       "Client Secret": "Client Secret",
-       "Spotify Username (for the Playlists Tab)": "Username Spotify (per la sezione Playlist)",
-       "You are logged in as": "Hai effettuato l'accesso come",
-       "Logout": "Esci",
-       "Save": "Salva",
-       "Default Settings": "Impostazioni di Default",
-       "Close": "Chiudi",
-       "Saved Tags": "Salva Tag",
-       "SpotifyFeatures_Info": "\"Spotify Features\" <b>NON</b> scaricherà musica da Spotify.<br>Questa feature è solo un playlist converter pratico. Se una canzone non è su deezer non può essere scaricata<br><a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">Qui</a> puoi vedere come ottenere il Client e Secret ID",
-       "Title": "Titolo",
-       "Cover": "Cover",
-       "Track Total": "Numero Traccie",
-       "Disc Total": "Numero Dischi",
-       "Album Artist": "Artista Album",
-       "Genre": "Genere",
-       "Year": "Anno",
-       "Date": "Data",
-       "Explicit": "Esplicito",
-       "Length": "Durata",
-       "Barcode": "Codice a Barre",
-       "Replay Gain": "Guadagno Brano",
-       "Unsynchronised Lyrics": "Testo non Sincronizzato",
-       "Copyright": "Copyright",
-       "Publisher": "Publisher",
-       "Composer": "Compositori",
-       "Mixer": "Mixaggio",
-       "Author": "Autori",
-       "Writer": "Scrittori",
-       "Engineer": "Ingegneri",
-       "Producer": "Produttori",
-       "Branch": "Ramo",
-       "Version": "Versione",
-       "Based on": "Basato su",
-       "Maintainers": "Maintainer",
-       "Repo": "Repo",
-       "FAQ": "FAQ",
-       "Official mirrors": "Mirror ufficiali",
-       "Interface": "Interfaccia",
-       "Telegram Contacts": "Contatti Telegram",
-       "News Channel": "Canale News",
-       "Betas Channel": "Canale Beta",
-       "Stable Releases Channel": "Canale Release Stabili",
-       "Special Thanks to": "Un ringraziamento speciale a",
-       "Feedback": "Feedback",
-       "Feedback_Text": "Hai qualche feedback o vuoi proporre una nuova feature? Apri un nuovo <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">Issue</a> e scegli 'Feature'.",
-       "Reporting Bugs": "Segnala un Bug",
-       "Bugs_Text": "Se incontri dei bug innanzi tutto controlla <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/FAQ\" target=\"_blank\">la FAQ</a>.<br> Se non riesci a trovare una soluzione al tuo problema, apri un nuovo <a href=\"https://github.com/RemixDev/DRemixIssues/issues/new/choose\" target=\"_blank\">issue</a> e descrivi il tuo problema, grazie.",
-       "Contacts": "Contatti",
-       "Contacts_Text": "Se vuoi parlare dell'applicazione o aiutare con lo sviluppo entra nel <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Gruppo Telegram</a> (Solo in inglese)!",
-       "Attention!": "Attenzione!",
-       "Attention_Text": "Gli autori del programma non vogliono commettere reati!<br/>L'uso di questo strumento potrebbe essere illegale nel tuo paese, perfavore informati!<br/>Gli autori non danno nessuna garazia e non sono responsabili per qualsiasi danno di qualsiasi tipo dall'utilizzo di questo software!",
-       "Changelog": "Changelog",
-       "Full Changelog Here": "Changelog Completo Qui",
-       "License": "Licenza",
-       "Contributions": "Contribuisci",
-       "Contributions_Text": "<h5>Vuoi contribuire al progetto? Puoi farlo <b>in modi diversi!</b></h5><p>Se conosci JavaScript, HTML, CSS o Node.js puoi contribuire scrivendo codice, risolvendo bug o aggiungendo feature tramite <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix\" target=\"_blank\">il Repo Ufficiale</a>.</p><p>Se sei bravo a creare UI potresti aiutare inviando nuovi design, puoi aprire un nuovo issue con le tue idee <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">qui</a>.<br><p>Ricorda che stiamo (circa) seguendo il <a href=\"https://material.io/\" target=\"_blank\">Material Design</a>.</p>Se sei bravo a trovare bug puoi aiutare facendo da beta tester.<br>Puoi trovare tutte le informazioni nel <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Gruppo Telegram</a></p><hr><h5>Vuoi dare un contributo monetario? Fai una donazione!</h5><p>Se hai la possibilità di donare puoi farlo tramite questi link.<br>Ricorda che <b>questo progetto è gratuito</b> e <b>dovresti supportare gli artisti che ami</b> prima di supportare lo sviluppatore.<br>Non sentirti in obbligo di donare, ti apprezzo lo stesso!</p>",
-       "I got it!": "Ho Capito!",
-       "Available Countries for": "Paesi Disponibili per",
-       "Song/Album URL": "URL Brano/Album",
-       "LinkAnalyzer_Info": "Puoi usare questa funzione per scoprire maggiori informazioni sui link che stai cercando di scaricare.<br/>Utile se stai cercando di scaricare un brano non disponibile nel tuo paese e vuoi scoprire in quali paesi lo è",
-       "DownloadURL_Info": "URL dei Brani/Playlist/Album/Artisti, separati da un ';'",
-       "Download selection": "Scarica selezionati",
-       "Save ID3v1 tags as well": "Salva i tag anche in ID3v1",
-       "Language": "Lingua",
-       "You setted it up wrong!": "L'hai impostato male!",
-       "Somehow you managed to fuck it up. Good job.<br>Now go do the guide again.<br><br>If you need the link again <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">Here it is</a>": "In qualche modo sei riuscito a mandare tutto a puttane. Ottimo lavoro.<br>Ora vai a rifare la guida.<br><br>Se ti serve il link della guida <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">eccolo</a>",
-       "You need to restart the app to apply the changes": "Devi riavviare l'app per applicare i cambiamenti",
-       "Changing the spotify settings id and secret requires an app restart": "Cambiare il secret e client id di spotify necessita di un riavvio dell'app",
-       "Spotify Features is not enabled": "Spotify Features non è attivato",
-       "spotifyFeaturesMessage": "Dovresti aggiungere il clientId e clientSecret di spotify nelle impostazioni e poi riavviare l'app per usare questa funzione<br>Puoi vedere come fare in <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">questa guida</a><br><br>QUESTA FUNZIONE NON TI PERMETTE DI SCARICARE DA SPOTIFY. È solo un pratico converter dei metadata. Se una canzone non è su deezer non può essere scaricata",
-       "Can't find the track on Deezer!": "Impossibile trovare il brano su Deezer!",
-       "Can't find the album on Deezer!": "Impossibile trovare l'album su Deezer!"
-}
index b5c4cf67ebef8fa8faf911142fb39ff71be0767a..0dd17cbbfa8a5b03837dd4ccf0eb88786fc9a323 100644 (file)
@@ -74,7 +74,7 @@ socket.on("getDefaultSettings", function(defaultSettings, defaultDownloadFolder)
 //Login button
 $('#modal_login_btn_login').click(function () {
        $('#modal_login_btn_login').attr("disabled", true)
-       $('#modal_login_btn_login').html("Logging in...")
+       $('#modal_login_btn_login').html(i18n("Logging in..."))
        if (serverMode){
                var userToken = $('#modal_login_input_userToken').val()
                localStorage.setItem('userToken', userToken)
@@ -88,7 +88,7 @@ $('#modal_login_btn_login').click(function () {
                                var password = $('#modal_login_input_password').val()
                                var captchaResponse = $('#modal_login_input_captchaResponse').val()
                                if (captchaResponse == ""){
-                                       $('#login-res-text').text("Error: Captcha wasn't solved.")
+                                       $('#login-res-text').text(i18n("Error: Captcha wasn't solved."))
                                        setTimeout(function(){$('#login-res-text').text("")},3000)
                                        $('#modal_login_btn_login').attr("disabled", false)
                                        $('#modal_login_btn_login').html("Log in")
@@ -148,14 +148,14 @@ $('#openDownloadsFolder').on('click', function () {
        if(typeof shell !== "undefined"){
                shell.showItemInFolder(userSettings.downloadLocation + path.sep + '.')
        }else{
-               alert("For security reasons, this button will do nothing.")
+               alert(i18n("For security reasons, this button will do nothing."))
        }
 })
 
 // Alert for replayGain tag
 $('#modal_tags_replayGain').on('click', function() {
        if ($(this).is(':checked')) {
-               message('Warning','Saving replay gain causes tracks to be quieter for some users.')
+               message(i18n('Warning'),i18n('Saving replay gain causes tracks to be quieter for some users.'))
        }
 })
 
@@ -165,7 +165,7 @@ socket.on('checkAutologin', function(){
        if (localStorage.getItem('autologin')){
                socket.emit('autologin', localStorage.getItem('autologin'), localStorage.getItem('autologin_email'))
                $('#modal_login_btn_login').attr("disabled", true)
-               $('#modal_login_btn_login').html("Logging in...")
+               $('#modal_login_btn_login').html(i18n("Logging in..."))
                if (serverMode){
                        $('#modal_login_input_userToken').val(localStorage.getItem('userToken'))
                }else{
@@ -259,10 +259,10 @@ $(document).ready(function () {
        $('#nightTimeSwitcher').change(function(){
                if(this.checked){
                        document.getElementsByTagName('link')[4].disabled = false
-                       $("#nightModeSwitch2").html(`<i class="material-icons">brightness_7</i>Disable Night Mode`)
+                       $("#nightModeSwitch2").html(`<i class="material-icons">brightness_7</i>${i18n("Disable Night Mode")}`)
                }else{
                        document.getElementsByTagName('link')[4].disabled = true
-                       $("#nightModeSwitch2").html(`<i class="material-icons">brightness_2</i>Enable Night Mode`)
+                       $("#nightModeSwitch2").html(`<i class="material-icons">brightness_2</i>${i18n("Enable Night Mode")}`)
                }
                localStorage.darkMode = this.checked
        })
@@ -345,7 +345,7 @@ $(document).ready(function () {
                selectedLang = $(this).val()
                if (currentLang !== selectedLang){
                        setCookie("lang", selectedLang, 60)
-                       message('Please restart the app', 'To change the language you need to refresh the page or restart the app!')
+                       message(i18n('Please restart the app'), i18n('To change the language you need to refresh the page or restart the app!'))
                }
        })
 })
@@ -663,11 +663,11 @@ function showResults_table_album(albums) {
                                `<tr>
                                <td><img style="width:56px;" src="${(currentResultAlbum.cover_small ? currentResultAlbum.cover_small : "img/noCover.jpg")}" class="rounded" /></td>
                                <td class="hide-on-med-and-up">
-                                       <p class="remove-margin">${(currentResultAlbum.explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i>' : '')} ${currentResultAlbum.title}</p>
+                                       <p class="remove-margin">${(currentResultAlbum.explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')} ${currentResultAlbum.title}</p>
                                        <p class="remove-margin secondary-text">${currentResultAlbum.artist.name}</p>
                                        <p class="remove-margin secondary-text">${currentResultAlbum.nb_tracks == "1" ? `1 Track` : `${currentResultAlbum.nb_tracks} Tracks`} • ${currentResultAlbum.record_type[0].toUpperCase() + currentResultAlbum.record_type.substring(1)}</p>
                                </td>
-                               <td class="hide-on-small-only">${(currentResultAlbum.explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i>' : '')} ${currentResultAlbum.title}</td>
+                               <td class="hide-on-small-only">${(currentResultAlbum.explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')} ${currentResultAlbum.title}</td>
                                <td class="hide-on-small-only"><span class="resultArtist resultLink" data-link="${currentResultAlbum.artist.link}">${currentResultAlbum.artist.name}</span></td>
                                <td class="hide-on-small-only">${currentResultAlbum.nb_tracks}</td>
                                <td class="hide-on-small-only">${currentResultAlbum.record_type[0].toUpperCase() + currentResultAlbum.record_type.substring(1)}</td>
@@ -762,7 +762,7 @@ function generateShowTracklistSelectiveButton(link) {
 function showTrackListSelective(link) {
        $('#modal_trackListSelective_table_trackListSelective_tbody_trackListSelective').addClass('hide')
        $('#modal_trackListSelective_table_trackListSelective_tbody_loadingIndicator').removeClass('hide')
-       trackListSelectiveModalApp.title = "Loading..."
+       trackListSelectiveModalApp.title = i18n("Loading...")
        trackListSelectiveModalApp.image = ""
        trackListSelectiveModalApp.metadata = ""
        trackListSelectiveModalApp.label = ""
@@ -817,7 +817,7 @@ function generateShowTracklistButton(link) {
 function showTrackList(link) {
        $('#modal_trackList_table_trackList_tbody_trackList').addClass('hide')
        $('#modal_trackList_table_trackList_tbody_loadingIndicator').removeClass('hide')
-       trackListModalApp.title = "Loading..."
+       trackListModalApp.title = i18n("Loading...")
        trackListModalApp.image = ""
        trackListModalApp.metadata = ""
        trackListModalApp.release_date = ""
@@ -835,7 +835,7 @@ socket.on("getTrackList", function (data) {
        //data.id                         -> passed id
        //data.response -> API response
        if (data.err){
-               trackListSelectiveModalApp.title = "Can't get data"
+               trackListSelectiveModalApp.title = i18n("Can't get data")
                console.log(data.err)
                return
        }
@@ -843,7 +843,7 @@ socket.on("getTrackList", function (data) {
                var trackList = data.response.data, content = ''
                var trackListSelective = data.response.data, content = ''
                if (typeof trackList == 'undefined') {
-                       alert('Well, there seems to be a problem with this part of the app. Please notify the developer.')
+                       alert(i18n('Well, there seems to be a problem with this part of the app. Please notify the developer.'))
                        return
                }
 
@@ -862,19 +862,19 @@ socket.on("getTrackList", function (data) {
                        trackListModalApp.link = `https://www.deezer.com/${data.reqType}/${data.id}`
                        trackListModalApp.head = [
                                {title: '', smallonly:true},
-                               {title: 'Album Title', hideonsmall:true},
-                               {title: 'Release Date', hideonsmall:true},
-                               {title: 'Record Type', hideonsmall:true},
+                               {title: i18n('Album Title'), hideonsmall:true},
+                               {title: i18n('Release Date'), hideonsmall:true},
+                               {title: i18n('Record Type'), hideonsmall:true},
                                {title: '', width: "56px"}
                        ]
                        for (var i = 0; i < trackList.length; i++) {
                                $(tableBody).append(
                                        `<tr>
                                        <td class="hide-on-med-and-up">
-                                               <a href="#" class="album_chip" data-link="${trackList[i].link}"><div class="chip"><img src="${trackList[i].cover_small}"/>${(trackList[i].explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i> ' : '')}${trackList[i].title}</div></a>
+                                               <a href="#" class="album_chip" data-link="${trackList[i].link}"><div class="chip"><img src="${trackList[i].cover_small}"/>${(trackList[i].explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')}${trackList[i].title}</div></a>
                                                <p class="remove-margin secondary-text">${trackList[i].record_type[0].toUpperCase() + trackList[i].record_type.substring(1)} • ${trackList[i].release_date}</p>
                                        </td>
-                                       <td class="hide-on-small-only"><a href="#" class="album_chip" data-link="${trackList[i].link}"><div class="chip"><img src="${trackList[i].cover_small}"/>${(trackList[i].explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i> ' : '')}${trackList[i].title}</div></a></td>
+                                       <td class="hide-on-small-only"><a href="#" class="album_chip" data-link="${trackList[i].link}"><div class="chip"><img src="${trackList[i].cover_small}"/>${(trackList[i].explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')}${trackList[i].title}</div></a></td>
                                        <td class="hide-on-small-only">${trackList[i].release_date}</td>
                                        <td class="hide-on-small-only">${trackList[i].record_type[0].toUpperCase() + trackList[i].record_type.substring(1)}</td>
                                        </tr>`
@@ -894,8 +894,8 @@ socket.on("getTrackList", function (data) {
                        trackListSelectiveModalApp.head = [
                                {title: '<i class="material-icons">music_note</i>', width: "24px"},
                                {title: '#'},
-                               {title: 'Song'},
-                               {title: 'Artist', hideonsmall:true},
+                               {title: i18n('Song')},
+                               {title: i18n('Artist'), hideonsmall:true},
                                {title: '<i class="material-icons">timer</i>', width: "40px"},
                                {title: '<div class="valign-wrapper"><label><input class="selectAll" type="checkbox" id="selectAll"><span></span></label></div>', width: "24px"}
                        ]
@@ -908,10 +908,10 @@ socket.on("getTrackList", function (data) {
                                        <td><i class="material-icons ${(trackList[i].preview ? `preview_playlist_controls" preview="${trackList[i].preview}"` : 'grey-text"')}>play_arrow</i></td>
                                        <td>${(i + 1)}</td>
                                        <td class="hide-on-med-and-up">
-                                               <p class="remove-margin">${(trackList[i].explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i> ' : '')}${trackList[i].title}</p>
+                                               <p class="remove-margin">${(trackList[i].explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')}${trackList[i].title}</p>
                                                <p class="remove-margin secondary-text">${trackList[i].artist.name}</p>
                                        </td>
-                                       <td class="hide-on-small-only">${(trackList[i].explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i> ' : '')}${trackList[i].title}</td>
+                                       <td class="hide-on-small-only">${(trackList[i].explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')}${trackList[i].title}</td>
                                        <td class="hide-on-small-only">${trackList[i].artist.name}</td>
                                        <td>${convertDuration(trackList[i].duration)}</td>
                                        <td>
@@ -939,8 +939,8 @@ socket.on("getTrackList", function (data) {
                        trackListSelectiveModalApp.head = [
                                {title: '<i class="material-icons">music_note</i>', width: "24px"},
                                {title: '#'},
-                               {title: 'Song'},
-                               {title: 'Artist', hideonsmall:true},
+                               {title: i18n('Song')},
+                               {title: i18n('Artist'), hideonsmall:true},
                                {title: '<i class="material-icons">timer</i>', width: "40px"},
                                {title: '<div class="valign-wrapper"><label><input class="selectAll" type="checkbox" id="selectAll"><span></span></label></div>', width: "24px"}
                        ]
@@ -963,10 +963,10 @@ socket.on("getTrackList", function (data) {
                                        <td><i class="material-icons ${(trackList[i].preview ? `preview_playlist_controls" preview="${trackList[i].preview}"` : 'grey-text"')}>play_arrow</i></td>
                                        <td>${trackList[i].track_position}</td>
                                        <td class="hide-on-med-and-up">
-                                               <p class="remove-margin">${(trackList[i].explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i> ' : '')}${trackList[i].title}</p>
+                                               <p class="remove-margin">${(trackList[i].explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')}${trackList[i].title}</p>
                                                <p class="remove-margin secondary-text">${trackList[i].artist.name}</p>
                                        </td>
-                                       <td class="hide-on-small-only">${(trackList[i].explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i> ' : '')}${trackList[i].title}</td>
+                                       <td class="hide-on-small-only">${(trackList[i].explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')}${trackList[i].title}</td>
                                        <td class="hide-on-small-only">${trackList[i].artist.name}</td>
                                        <td>${convertDuration(trackList[i].duration)}</td>
                                        <td>
@@ -991,8 +991,8 @@ socket.on("getTrackList", function (data) {
                        trackListModalApp.head = [
                                {title: '<i class="material-icons">music_note</i>', width: "24px"},
                                {title: '#'},
-                               {title: 'Song'},
-                               {title: 'Artist', hideonsmall:true},
+                               {title: i18n('Song')},
+                               {title: i18n('Artist'), hideonsmall:true},
                                {title: '<i class="material-icons">timer</i>', width: "40px"}
                        ]
                        let totalDuration = 0
@@ -1003,10 +1003,10 @@ socket.on("getTrackList", function (data) {
                                        <td><i class="material-icons ${(trackList[i].preview ? `preview_playlist_controls" preview="${trackList[i].preview}"` : 'grey-text"')}>play_arrow</i></td>
                                        <td>${(i + 1)}</td>
                                        <td class="hide-on-med-and-up">
-                                               <p class="remove-margin">${(trackList[i].explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i> ' : '')}${trackList[i].title}</p>
+                                               <p class="remove-margin">${(trackList[i].explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')}${trackList[i].title}</p>
                                                <p class="remove-margin secondary-text">${trackList[i].artist.name}</p>
                                        </td>
-                                       <td class="hide-on-small-only">${(trackList[i].explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i> ' : '')}${trackList[i].title}</td>
+                                       <td class="hide-on-small-only">${(trackList[i].explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')}${trackList[i].title}</td>
                                        <td class="hide-on-small-only">${trackList[i].artist.name}</td>
                                        <td>${convertDuration(trackList[i].duration)}</td>
                                        </tr>`
@@ -1030,7 +1030,7 @@ socket.on("getTrackList", function (data) {
                                        `<tr>
                                        <td><i class="material-icons ${(trackList[i].preview ? `preview_playlist_controls" preview="${trackList[i].preview}"` : 'grey-text"')}>play_arrow</i></td>
                                        <td>${(i + 1)}</td>
-                                       <td>${(trackList[i].explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i> ' : '')}${trackList[i].title}</td>
+                                       <td>${(trackList[i].explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')}${trackList[i].title}</td>
                                        <td>${trackList[i].artist.name}</td>
                                        <td>${convertDuration(trackList[i].duration)}</td>
                                        </tr>`
@@ -1084,11 +1084,11 @@ socket.on("getChartsTrackListByCountry", function (data) {
                                <td>${(i + 1)}</td>
                                <td><a href="#" class="rounded ${(currentChartTrack.preview ? `single-cover" preview="${currentChartTrack.preview}"><i class="material-icons preview_controls white-text">play_arrow</i>` : '">')}<img style="width:56px;" src="${(currentChartTrack.album.cover_small ? currentChartTrack.album.cover_small : "img/noCover.jpg")}" class="rounded" /></a></td>
                                <td class="hide-on-med-and-up">
-                                       <p class="remove-margin">${(currentChartTrack.explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i> ' : '')}${currentChartTrack.title}</p>
+                                       <p class="remove-margin">${(currentChartTrack.explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')}${currentChartTrack.title}</p>
                                        <p class="remove-margin secondary-text">${currentChartTrack.artist.name}</p>
                                        <p class="remove-margin secondary-text">${currentChartTrack.album.title}</p>
                                </td>
-                               <td class="hide-on-small-only">${(currentChartTrack.explicit_lyrics ? '<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="Explicit">explicit</i> ' : '')}${currentChartTrack.title}</td>
+                               <td class="hide-on-small-only">${(currentChartTrack.explicit_lyrics ? `<i class="material-icons valignicon tiny materialize-red-text tooltipped" data-tooltip="${i18n("Explicit")}">explicit</i> ` : '')}${currentChartTrack.title}</td>
                                <td class="hide-on-small-only"><span class="resultArtist resultLink" data-link="${currentChartTrack.artist.link}">${currentChartTrack.artist.name}</span></td>
                                <td class="hide-on-small-only"><span class="resultAlbum resultLink" data-link="https://www.deezer.com/album/${currentChartTrack.album.id}">${currentChartTrack.album.title}</span></td>
                                <td>${convertDuration(currentChartTrack.duration)}</td>
@@ -1158,7 +1158,7 @@ var linkAnalyzerCountryModal = new Vue({
 function parseLinkAnalyzer(link){
        type = getTypeFromLink(link)
        if (["track","album"].indexOf(type) == -1){
-               toast("Wrong Type")
+               toast(i18n("Wrong Type!"))
                return False
        }
        id = getIDFromLink(link)
@@ -1220,12 +1220,12 @@ function parseDownloadFromURL(urlsString){
        for(var i = 0; i < urls.length; i++){
                var url = urls[i]
                if (url.length == 0) {
-                       message('Blank URL Field', 'You need to insert an URL to download it!')
+                       message(i18n('Blank URL Field'), i18n('You need to insert an URL to download it!'))
                        return false
                }
                //Validate URL
                if (url.indexOf('deezer.com/') < 0 && url.indexOf('open.spotify.com/') < 0 && url.indexOf('spotify:') < 0) {
-                       message('Wrong URL', 'The URL seems to be wrong. Please check it and try it again.')
+                       message(i18n('Wrong URL'), i18n('The URL seems to be wrong. Please check it and try it again.'))
                        return false
                }
                if (url.indexOf('?') > -1) {
@@ -1240,20 +1240,20 @@ function addToQueue(url, forceBitrate=null) {
        bitrate = forceBitrate ? forceBitrate : userSettings.maxBitrate
        var type = getTypeFromLink(url), id = getIDFromLink(url, type)
        if (['track', 'spotifytrack', 'playlist', 'spotifyplaylist', 'album', 'spotifyalbum', 'artist', 'artisttop'].indexOf(type) == -1) {
-               M.toast({html: '<i class="material-icons left">error</i> Wrong Type!', displayLength: 5000, classes: 'rounded'})
+               M.toast({html: `<i class="material-icons left">error</i> ${i18n("Wrong Type!")}`, displayLength: 5000, classes: 'rounded'})
                return false
        }
        if (alreadyInQueue(id, bitrate)) {
-               M.toast({html: '<i class="material-icons left">playlist_add_check</i> Already in download-queue!', displayLength: 5000, classes: 'rounded'})
+               M.toast({html: `<i class="material-icons left">playlist_add_check</i> ${i18n("Already in download-queue!")}`, displayLength: 5000, classes: 'rounded'})
                return false
        }
        if (id.match(/^-?[0-9]+$/) == null && type.indexOf("spotify")<-1) {
-               M.toast({html: '<i class="material-icons left">error</i> Wrong ID!', displayLength: 5000, classes: 'rounded'})
+               M.toast({html: `<i class="material-icons left">error</i> ${i18n("Wrong ID!")}`, displayLength: 5000, classes: 'rounded'})
                return false
        }
        socket.emit("download" + type, {id: id, settings: userSettings, bitrate: bitrate})
        downloadQueue.push(`${id}:${bitrate}`)
-       M.toast({html: '<i class="material-icons left">add</i>Added to download-queue', displayLength: 5000, classes: 'rounded'})
+       M.toast({html: `<i class="material-icons left">add</i> ${i18n("Added to download-queue")}`, displayLength: 5000, classes: 'rounded'})
 }
 
 function alreadyInQueue(id, bitrate) {
@@ -1337,18 +1337,18 @@ socket.on('updateQueue', function (data) {
        if (data.failed == 0 && ((data.downloaded + data.failed) >= data.size)) {
                $('#' + data.queueId).find('.eventBtn').html('<i class="material-icons">done</i>')
                $('#' + data.queueId).addClass('finished')
-               M.toast({html: `<i class="material-icons left">done</i>${quoteattr(data.name)} - Completed!`, displayLength: 5000, classes: 'rounded'})
+               M.toast({html: `<i class="material-icons left">done</i>${quoteattr(data.name)} - ${i18n("Completed!")}`, displayLength: 5000, classes: 'rounded'})
        } else if (data.downloaded == 0 && ((data.downloaded + data.failed) >= data.size)) {
                $('#' + data.queueId).find('.eventBtn').html('<i class="material-icons">error</i>')
                $('#' + data.queueId).addClass('error')
-               M.toast({html: `<i class="material-icons left">error</i>${quoteattr(data.name)} - Failed!`, displayLength: 5000, classes: 'rounded'})
+               M.toast({html: `<i class="material-icons left">error</i>${quoteattr(data.name)} - ${i18n("Failed!")}`, displayLength: 5000, classes: 'rounded'})
        } else if ((data.downloaded + data.failed) >= data.size) {
                $('#' + data.queueId).find('.eventBtn').html('<i class="material-icons">warning</i>')
                $('#' + data.queueId).addClass('error')
-               M.toast({html: `<i class="material-icons left">warning</i>${quoteattr(data.name)} - Completed with errors!`, displayLength: 5000, classes: 'rounded'})
+               M.toast({html: `<i class="material-icons left">warning</i>${quoteattr(data.name)} - ${i18n("Completed with errors!")}`, displayLength: 5000, classes: 'rounded'})
        }
        if (data.errorLog != ""){
-               var errorLog = "<table><tr><th>ID</th><th>Song</th><th>Error</th></tr><tr><td>"
+               var errorLog = `<table><tr><th>${i18n("ID")}</th><th>${i18n("Song")}</th><th>${i18n("Error")}</th></tr><tr><td>`
                errorLog += data.errorLog.split("\r\n").join("</td></tr><tr><td>").split(" | ").join("</td><td>")
                errorLog = errorLog.slice(0, errorLog.length-8)+"</table>"
                $('#' + data.queueId).find('.eventBtn').click(()=>{
@@ -1368,7 +1368,7 @@ socket.on("downloadProgress", function (data) {
 })
 
 socket.on("emptyDownloadQueue", function () {
-       M.toast({html: '<i class="material-icons left">done_all</i>All downloads completed!', displayLength: 5000, classes: 'rounded'})
+       M.toast({html: `<i class="material-icons left">done_all</i>${i18n("All downloads completed!")}`, displayLength: 5000, classes: 'rounded'})
 })
 
 socket.on("cancelDownload", function (data) {
@@ -1376,7 +1376,7 @@ socket.on("cancelDownload", function (data) {
        $('#' + data.queueId).addClass('animated fadeOutRight').on('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function () {
                downloadQueue.splice( downloadQueue.indexOf(data.id), 1)
                $(this).remove()
-               if (!data.cleanAll) M.toast({html: '<i class="material-icons left">clear</i>One download removed!', displayLength: 5000, classes: 'rounded'})
+               if (!data.cleanAll) M.toast({html: `<i class="material-icons left">clear</i>${i18n("One download removed!")}`, displayLength: 5000, classes: 'rounded'})
        })
 })
 
@@ -1404,7 +1404,7 @@ $('#cancelAllTable').click(function (ev) {
 })
 
 socket.on("cancelAllDownloads", function () {
-       M.toast({html: '<i class="material-icons left">clear</i>All downloads removed!', displayLength: 5000, classes: 'rounded'})
+       M.toast({html: `<i class="material-icons left">clear</i>${i18n("All downloads removed!")}`, displayLength: 5000, classes: 'rounded'})
 })
 
 //****************************************************************************************************\\
@@ -1595,3 +1595,8 @@ function sleep(milliseconds) {
                }
   }
 }
+$.getJSON(`/locales/${currentLang}.json`, function(json) {
+       i18n.translator.add({
+               values: json
+       })
+})
diff --git a/app/public/js/i18n.min.js b/app/public/js/i18n.min.js
new file mode 100644 (file)
index 0000000..2c95877
--- /dev/null
@@ -0,0 +1 @@
+(function(){var e,t,n,r=function(e,t){return function(){return e.apply(t,arguments)}};e=function(){function e(){this.translate=r(this.translate,this);this.data={values:{},contexts:[]};this.globalContext={}}e.prototype.translate=function(e,t,n,r,i){var s,o,u,a;if(i==null){i=this.globalContext}u=function(e){var t;t=typeof e;return t==="function"||t==="object"&&!!e};if(u(t)){s=null;a=null;o=t;i=n||this.globalContext}else{if(typeof t==="number"){s=null;a=t;o=n;i=r||this.globalContext}else{s=t;if(typeof n==="number"){a=n;o=r;i=i}else{a=null;o=n;i=r||this.globalContext}}}if(u(e)){if(u(e["i18n"])){e=e["i18n"]}return this.translateHash(e,i)}else{return this.translateText(e,a,o,i,s)}};e.prototype.add=function(e){var t,n,r,i,s,o,u,a;if(e.values!=null){o=e.values;for(n in o){r=o[n];this.data.values[n]=r}}if(e.contexts!=null){u=e.contexts;a=[];for(i=0,s=u.length;i<s;i++){t=u[i];a.push(this.data.contexts.push(t))}return a}};e.prototype.setContext=function(e,t){return this.globalContext[e]=t};e.prototype.clearContext=function(e){return this.lobalContext[e]=null};e.prototype.reset=function(){this.data={values:{},contexts:[]};return this.globalContext={}};e.prototype.resetData=function(){return this.data={values:{},contexts:[]}};e.prototype.resetContext=function(){return this.globalContext={}};e.prototype.translateHash=function(e,t){var n,r;for(n in e){r=e[n];if(typeof r==="string"){e[n]=this.translateText(r,null,null,t)}}return e};e.prototype.translateText=function(e,t,n,r,i){var s,o;if(r==null){r=this.globalContext}if(this.data==null){return this.useOriginalText(i||e,t,n)}s=this.getContextData(this.data,r);if(s!=null){o=this.findTranslation(e,t,n,s.values,i)}if(o==null){o=this.findTranslation(e,t,n,this.data.values,i)}if(o==null){return this.useOriginalText(i||e,t,n)}return o};e.prototype.findTranslation=function(e,t,n,r){var i,s,o,u,a;o=r[e];if(o==null){return null}if(t==null){if(typeof o==="string"){return this.applyFormatting(o,t,n)}}else{if(o instanceof Array||o.length){for(u=0,a=o.length;u<a;u++){s=o[u];if((t>=s[0]||s[0]===null)&&(t<=s[1]||s[1]===null)){i=this.applyFormatting(s[2].replace("-%n",String(-t)),t,n);return this.applyFormatting(i.replace("%n",String(t)),t,n)}}}}return null};e.prototype.getContextData=function(e,t){var n,r,i,s,o,u,a,f;if(e.contexts==null){return null}a=e.contexts;for(o=0,u=a.length;o<u;o++){n=a[o];r=true;f=n.matches;for(i in f){s=f[i];r=r&&s===t[i]}if(r){return n}}return null};e.prototype.useOriginalText=function(e,t,n){if(t==null){return this.applyFormatting(e,t,n)}return this.applyFormatting(e.replace("%n",String(t)),t,n)};e.prototype.applyFormatting=function(e,t,n){var r,i;for(r in n){i=new RegExp("%{"+r+"}","g");e=e.replace(i,n[r])}return e};return e}();n=new e;t=n.translate;t.translator=n;t.create=function(n){var r;r=new e;if(n!=null){r.add(n)}r.translate.create=t.create;return r.translate};(typeof module!=="undefined"&&module!==null?module.exports=t:void 0)||(this.i18n=t)}).call(this)
diff --git a/app/public/locales/de.json b/app/public/locales/de.json
new file mode 100644 (file)
index 0000000..3ebffba
--- /dev/null
@@ -0,0 +1,163 @@
+{
+       "Please login to your deezer account": "Bitte loggen Sie sich in Ihr deezer-Konto ein",
+       "Email": "Email",
+       "Password": "Passwort",
+       "userToken": "Benutzertoken",
+       "How do I get my userToken?": "Wie bekomme ich meinen Benutzertoken?",
+       "Log in": "Anmelden",
+       "Sign up": "Registrieren",
+       "Settings": "Einstellungen",
+       "Path Settings": "Pfadeinstellungen",
+       "Download folder path": "Download-Ordnerpfad",
+       "Tracknames template": "Vorlage für Titelnamen",
+       "Supported variables are": "Unterstützte Varablen sind",
+       "Album tracknames template": "Vorlage für Album Titelnamen",
+       "Album names template": "Vorlage für Albumnamen",
+       "Playlist tracknames template": "Vorlage für Playlist Titelnamen",
+       "More Path Settings": "weitere Pfadeinstellungen",
+       "Create folders for Artists": "Ordner für Künstler erstellen",
+       "Create folders for Albums": "Ordner für Alben erstellen",
+       "Create folders for CDs": "Ordner für CDs erstellen",
+       "Create Artist, Albums and CDs folders for Playlists too": "Erstellen von Künstler-, Alben- und CD-Ordner auch für Wiedergabelisten.",
+       "Write all Artists in track filename": "Schreibt alle Künstler in den Dateinamen ",
+       "Adds 0s before %number% to have the same character length": "Fügt Nullen vor %number% hinzu, um eine einheitliche Zeichenlänge zu bekommen.",
+       "Add padding to track numbers": "Hinzufügen von Padding zu Titelnummern",
+       "Overwrite padding size": "Überschreiben der Paddinggröße",
+       "App Settings": "App-Einstellungen",
+       "Concurrent download limit": "Gleichzeitiges Download-Limit",
+       "Preferred bitrate": "Bevorzugte Bitrate",
+       "Fallback to lower bitrates if preferred is not available": "Falls gewünschte Bitrate nicht verfügbar, kann auf Niedrigere zurückgegriffen werden",
+       "Fallback to search if song is not available": "Rückfall zur Suche, wenn ein Song nicht verfügbar ist.",
+       "Download albums with one track as a single track": "Alben mit nur einem Titel als einzelnen Titel herunterladen",
+       "Create log file for Errors inside download folder": "Protokolldatei für Fehler im Download-Ordner erstellen",
+       "Create log file for Alternatives inside download folder": "Protokolldatei für Alternativen im Download-Ordner erstellen",
+       "Create M3U8 (Playlist) File": "Erstelle eine M3U8 (Playlist) Datei",
+       "Download Synced Lyrics File (.lyr)": "Synchrone Liedtextdatei herunterladen (.lyr)",
+       "Minimize to system tray": "In die Taskleiste minimieren",
+       "Artworks": "Bilder",
+       "Artwork Size": "Bildgröße",
+       "Save Album Artwork": "Speichere Album-Coverbilder",
+       "Album Artwork Name Template": "Namensvorlage für Album-Coverbilder",
+       "Save Artist Artwork": "Speichere Künstler Bilder",
+       "Artist Artwork Name Template": "Namensvorlage für Künstler Bilder",
+       "Download images as PNGs": "Herunterladen der Bilder als PNGs",
+       "Tags": "Tags",
+       "Null Character": "Nullzeichen",
+       "with space": "mit Leerzeichen",
+       "Multitag Separator": "Multitag Separator",
+       "YY": "JJ",
+       "MM": "MM",
+       "DD": "TT",
+       "Date Format": "Datumsformat",
+       "digit": "Digit",
+       "Year Format": "Jahresformatierung",
+       "Replaces albums tags with the playlist ones": "Ersetzt Alben-Tags durch die Playlist-Tags.",
+       "Save Playlist as Compilation": "Wiedergabeliste als Zusammenstellung speichern",
+       "Remove \"(Album Version)\" from tracknames": "Entferne \"(Album Version)\" von Titelnamen",
+       "Choose Which Tags To Save": "Wähle, welche Tags gespeichert werden sollen",
+       "Spotify Features": "Spotify Unterstützung",
+       "SpotifyFeatures_Info": "\"Spotify Unterstützung\" lädt <b>KEINE</b> Musik von Spotify.<br>Dies ermöglicht nur einen praktischen In-App-Metadatenkonverter. Wenn ein Song nicht auf Deezer verfügbar ist, kann er nicht heruntergeladen werden!<br>Infos, zur Erlangung der Client- und Secret IDs gibt es <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">hier</a>",
+       "Client ID": "Client ID",
+       "Client Secret": "Client Secret",
+       "Spotify Username (for the Playlists Tab)": "Spotify Benutzername (für das Playlist Tab)",
+       "You are logged in as": "Angemeldet als",
+       "Logout": "Logout",
+       "Save": "Speichern",
+       "Default Settings": "Standardeinstellungen",
+       "Close": "Schliessen",
+       "Saved Tags": "Gespeicherte Tags",
+       "About the App": "Über die App",
+       "About": "Über",
+       "Search": "Suchen",
+       "Charts": "Charts",
+       "Playlists": "Playlisten",
+       "Link Analyzer": "Link Analysator",
+       "Download from URL": "Download von URL",
+       "Downloads": "Downloads",
+       "Enable Night Mode": "Nachtmodus einschalten",
+       "Start searching...": "Starte Suche ...",
+       "Song": "Song",
+       "Album": "Album",
+       "Artist": "Artist",
+       "Playlist": "Playlist",
+       "Songs": "Songs",
+       "Type": "Type",
+       "Albums": "Alben",
+       "Name": "Name",
+       "Nothing found!": "Nichts gefunden!",
+       "Country": "Land",
+       "Download Playlist": "Playlist herunterladen",
+       "Refresh Playlists": "Playlisten aktualisieren",
+       "See Available Countries": "Verfügbare Länder anzeigen",
+       "Alternative Link": "Alternativer Link",
+       "Duration": "Dauer",
+       "Disc Number": "Disknumer",
+       "Track Number": "Titelnumer",
+       "Release Date": "Erscheinungs Datum",
+       "Show Tracklist": "Zeige Titelliste",
+       "Label": "Label",
+       "Record Type": "Record Type",
+       "Genres": "Genre",
+       "Open Downloads Folder": "Öffne Downloadordner",
+       "Cancel All Downloads": "Stoppe Downloads",
+       "Clear List": "Lösche Liste",
+       "Size": "Größe",
+       "Downloaded": "Heruntergeladen",
+       "Failed": "Fehlgeschlagen",
+       "original code by ZzMTV": "original code by ZzMTV",
+       "Title": "Titel",
+       "Cover": "Cover",
+       "Track Total": "Titel Total",
+       "Disc Total": "Disk Total",
+       "Album Artist": "Album Artist",
+       "Genre": "Genre",
+       "Year": "Jahr",
+       "Date": "Datum",
+       "Explicit": "Explizit",
+       "Length": "Länge",
+       "Barcode": "Barcode",
+       "Replay Gain": "Wiedergabe Verstärkung",
+       "Unsynchronised Lyrics": "Unsynchronisierte Liedtexte",
+       "Copyright": "Copyright",
+       "Publisher": "Herausgeber",
+       "Composer": "Komponist",
+       "Mixer": "Mixer",
+       "Author": "Autor",
+       "Writer": "Schriftsteller",
+       "Engineer": "Techniker",
+       "Producer": "Produzent",
+       "Branch": "Branch",
+       "Version": "Version",
+       "Based on": "Basiert auf",
+       "Maintainers": "Betreuer",
+       "Repo": "Repo",
+       "FAQ": "FAQ",
+       "Official mirrors": "Offizielle Spiegel",
+       "Interface": "Interface",
+       "Telegram Contacts": "Telegram Kontakte",
+       "News Channel": "News Kanal",
+       "Betas Channel": "Beta Kanal",
+       "Stable Releases Channel": "Stable Release Kannal",
+       "Special Thanks to": "Special Thanks to",
+       "Feedback": "Rückmeldungen",
+       "Feedback_Text": "Hast du ein paar Rückmeldungen oder möchtest du nach neuen Features fragen? Eröffne ein neues <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">Ticket</a> und füge das Label 'Feature' hinzu.",
+       "Reporting Bugs": "Fehler Melden",
+       "Bugs_Text": "Wenn du irgendwelche Fehler entdeckst, schaue zuerst auf die <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/FAQ\" target=\"_blank\">FAQ Seite</a>.<br><br/> Wenn du dort keine Lösung für dein Problem findest, erstelle ein <a href=\"https://github.com/RemixDev/DRemixIssues/issues/new/choose\" target=\"_blank\">neues Ticket</a>. Bitte erstelle eine möglichst genaue und detailierte Fehlerbeschreibung. <br>Nur so kann der Fehler nachvollzogen und beseitigt werden. DANKE<br/>",
+       "Contacts": "Kontakt",
+       "Contacts_Text": "Wenn du über die App diskutieren oder uns helfen möchtest, kannst du das in der <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Telegramgruppe</a> tun!",
+       "Attention!": "Achtung!",
+       "Attention_Text": "Die Autoren rufen nicht zu kriminellen Handlungen auf!<br><br>Die Nutzung dieses Tools kann in deinem Land illegal sein, bitte informiere dich!<br><br>Die Autoren geben keinerlei Garantien und sind nicht verantwortlich für Schäden oder Beeinträchtigungen jeglicher Art, die sich aus der Verwendung dieser Software ergeben!",
+       "Changelog": "Änderungsprotokoll",
+       "Full Changelog Here": "komplettes Änderungsprotokoll",
+       "License": "Lizenz",
+       "Contributions": "Beitragen",
+       "Contributions_Text": "<h5>Du möchtest zu diesem Projekt beitragen?<br>Du kannst das auf verschiedene Weise tun!</b></h5><p>Wenn du JavaScript, HTML, CSS oder Node.js kennst, kannst du mit Hilfe des offiziellen Repos, Code schreiben, Fehler beheben und Funktionen hinzufügen: <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix\" target=\"_blank\">offizielles Repo</a>.</p><p>Wenn du gut in Grafik und Design bist, kannst du helfen, indem du ein neues Design <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">hier</a> einreichst.<br><p>Denke daran, dass wir (sozusagen) den material Design Prinzipien folgen: <a href=\"https://material.io/\" target=\"_blank\">material Design Prinzipien</a>.</p>Wenn du gut darin bist, Fehler zu finden, kannst du uns beim Beta Test der App helfen.<br>Trete der <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Telegram Gruppe</a> bei, um über neue Betas informiert zu werden.</p><hr><h5>Du möchtest uns finanziell unterstützen?<br>Du kannst für uns Spenden!</h5><p>Du kannst mit Hilfe der nachfolgenden Links Spenden.<br>Aber bedenke, das <b>dies ein freies Projekt ist</b> und <b>das du die Künstler die du liebst unterstützt</b> bevor du den Entwicker unterstützt.<br>Fühle dich nicht verpflichtet zu spenden, ich schätze dich trotzdem!</p>",
+       "I got it!": "Ich habe es verstanden",
+       "Available Countries for": "Verfügbare Länder für",
+       "Song/Album URL": "Song/Album URL",
+       "LinkAnalyzer_Info": "In diesem Abschnitt können Sie weitere Informationen über den Link finden, den Sie herunterladen möchten.<br/>Dies ist nützlich, wenn Sie versuchen, einige Titel herunterzuladen, die in Ihrem Land nicht verfügbar sind und wissen möchten, wo sie verfügbar sind.",
+       "DownloadURL_Info": "Song/Playlist/Album/Artist URL, getrennt durch ';'",
+       "Download selection": "Download selection",
+       "Save ID3v1 tags as well": "Speichere auch ID3v1 tags",
+       "Language": "Sprache"
+}
diff --git a/app/public/locales/en.json b/app/public/locales/en.json
new file mode 100644 (file)
index 0000000..c190ac9
--- /dev/null
@@ -0,0 +1,199 @@
+{
+       "Please login to your deezer account": "Please login to your deezer account",
+       "Email": "Email",
+       "Password": "Password",
+       "userToken": "userToken",
+       "How do I get my userToken?": "How do I get my userToken?",
+       "Log in": "Log in",
+       "Sign up": "Sign up",
+       "Settings": "Settings",
+       "Path Settings": "Path Settings",
+       "Download folder path": "Download folder path",
+       "Tracknames template": "Tracknames template",
+       "Supported variables are": "Supported variables are",
+       "Album tracknames template": "Album tracknames template",
+       "Album names template": "Album names template",
+       "Playlist tracknames template": "Playlist tracknames template",
+       "More Path Settings": "More Path Settings",
+       "Create folders for Artists": "Create folders for Artists",
+       "Create folders for Albums": "Create folders for Albums",
+       "Create folders for CDs": "Create folders for CDs",
+       "Create Artist, Albums and CDs folders for Playlists too": "Create Artist, Albums and CDs folders for Playlists too",
+       "Write all Artists in track filename": "Write all Artists in track filename",
+       "Adds 0s before %number% to have the same character length": "Adds 0s before %number% to have the same character length",
+       "Add padding to track numbers": "Add padding to track numbers",
+       "Overwrite padding size": "Overwrite padding size",
+       "App Settings": "App Settings",
+       "Concurrent download limit": "Concurrent download limit",
+       "Preferred bitrate": "Preferred bitrate",
+       "Fallback to lower bitrates if preferred is not available": "Fallback to lower bitrates if preferred is not available",
+       "Fallback to search if song is not available": "Fallback to search if song is not available",
+       "Download albums with one track as a single track": "Download albums with one track as a single track",
+       "Create log file for Errors inside download folder": "Create log file for Errors inside download folder",
+       "Create log file for Alternatives inside download folder": "Create log file for Alternatives inside download folder",
+       "Create M3U8 (Playlist) File": "Create M3U8 (Playlist) File",
+       "Download Synced Lyrics File (.lyr)": "Download Synced Lyrics File (.lyr)",
+       "Minimize to system tray": "Minimize to system tray",
+       "Artworks": "Artworks",
+       "Artwork Size": "Artwork Size",
+       "Save Album Artwork": "Save Album Artwork",
+       "Album Artwork Name Template": "Album Artwork Name Template",
+       "Save Artist Artwork": "Save Artist Artwork",
+       "Artist Artwork Name Template": "Artist Artwork Name Template",
+       "Download images as PNGs": "Download images as PNGs",
+       "Tags": "Tags",
+       "Null Character": "Null Character",
+       "with space": "with space",
+       "Multitag Separator": "Multitag Separator",
+       "YY": "YY",
+       "MM": "MM",
+       "DD": "DD",
+       "Date Format": "Date Format",
+       "digit": "digit",
+       "Year Format": "Year Format",
+       "Replaces albums tags with the playlist ones": "Replaces albums tags with the playlist ones",
+       "Save Playlist as Compilation": "Save Playlist as Compilation",
+       "Remove \"(Album Version)\" from tracknames": "Remove \"(Album Version)\" from tracknames",
+       "Choose Which Tags To Save": "Choose Which Tags To Save",
+       "Spotify Features": "Spotify Features",
+       "SpotifyFeatures_Info": "\"Spotify Features\" will <b>NOT</b> download music from Spotify.<br>This just enables a practical in app metadata converter. If a song is not on Deezer it can't be downloaded<br>You can see how to get the Client and Secret IDs <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">here</a>",
+       "Client ID": "Client ID",
+       "Client Secret": "Client Secret",
+       "Spotify Username (for the Playlists Tab)": "Spotify Username (for the Playlists Tab)",
+       "You are logged in as": "You are logged in as",
+       "Logout": "Logout",
+       "Save": "Save",
+       "Default Settings": "Default Settings",
+       "Close": "Close",
+       "Saved Tags": "Saved Tags",
+       "About the App": "About the App",
+       "About": "About",
+       "Search": "Search",
+       "Charts": "Charts",
+       "Playlists": "Playlists",
+       "Link Analyzer": "Link Analyzer",
+       "Download from URL": "Download from URL",
+       "Downloads": "Downloads",
+       "Enable Night Mode": "Enable Night Mode",
+       "Start searching...": "Start searching...",
+       "Song": "Song",
+       "Album": "Album",
+       "Artist": "Artist",
+       "Playlist": "Playlist",
+       "Songs": "Songs",
+       "Type": "Type",
+       "Albums": "Albums",
+       "Name": "Name",
+       "Nothing found!": "Nothing found!",
+       "Country": "Country",
+       "Download Playlist": "Download Playlist",
+       "Refresh Playlists": "Refresh Playlists",
+       "See Available Countries": "See Available Countries",
+       "Alternative Link": "Alternative Link",
+       "Duration": "Duration",
+       "Disc Number": "Disc Number",
+       "Track Number": "Track Number",
+       "Release Date": "Release Date",
+       "Show Tracklist": "Show Tracklist",
+       "Label": "Label",
+       "Record Type": "Record Type",
+       "Genres": "Genres",
+       "Open Downloads Folder": "Open Downloads Folder",
+       "Cancel All Downloads": "Cancel All Downloads",
+       "Clear List": "Clear List",
+       "Size": "Size",
+       "Downloaded": "Downloaded",
+       "Failed": "Failed",
+       "original code by ZzMTV": "original code by ZzMTV",
+       "Title": "Title",
+       "Cover": "Cover",
+       "Track Total": "Track Total",
+       "Disc Total": "Disc Total",
+       "Album Artist": "Album Artist",
+       "Genre": "Genre",
+       "Year": "Year",
+       "Date": "Date",
+       "Explicit": "Explicit",
+       "Length": "Length",
+       "Barcode": "Barcode",
+       "Replay Gain": "Replay Gain",
+       "Unsynchronised Lyrics": "Unsynchronised Lyrics",
+       "Copyright": "Copyright",
+       "Publisher": "Publisher",
+       "Composer": "Composer",
+       "Mixer": "Mixer",
+       "Author": "Author",
+       "Writer": "Writer",
+       "Engineer": "Engineer",
+       "Producer": "Producer",
+       "Branch": "Branch",
+       "Version": "Version",
+       "Based on": "Based on",
+       "Maintainers": "Maintainers",
+       "Repo": "Repo",
+       "FAQ": "FAQ",
+       "Official mirrors": "Official mirrors",
+       "Interface": "Interface",
+       "Telegram Contacts": "Telegram Contacts",
+       "News Channel": "News Channel",
+       "Betas Channel": "Betas Channel",
+       "Stable Releases Channel": "Stable Releases Channel",
+       "Special Thanks to": "Special Thanks to",
+       "Feedback": "Feedback",
+       "Feedback_Text": "Do you have some feedback or want to ask for some new features? Open a <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">new Issue</a> and add the 'Feature' label.",
+       "Reporting Bugs": "Reporting Bugs",
+       "Bugs_Text": "If you experience any bugs first of all check the <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/FAQ\" target=\"_blank\">FAQ page</a>.<br> If you can't find a solution for your problem, open a <a href=\"https://github.com/RemixDev/DRemixIssues/issues/new/choose\" target=\"_blank\">new issue</a> and send the bug report there, thank you.",
+       "Contacts": "Contacts",
+       "Contacts_Text": "If you want to discuss or help with the app you can do so in the <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Telegram group</a>!",
+       "Attention!": "Attention!",
+       "Attention_Text": "The authors do not call to commit crimes!<br/>The usage of this tool may be illegal in your country, please inform yourself!<br/>The authors give no guarantees at all and aren't responsible for any damage or harm of any kind resulting from the use of this software!",
+       "Changelog": "Changelog",
+       "Full Changelog Here": "Full Changelog Here",
+       "License": "License",
+       "Contributions": "Contributions",
+       "Contributions_Text": "<h5>You want to contribute to this project? You can do that <b>in different ways!</b></h5><p>If you know JavaScript, HTML, CSS or Node.js you could contribute writing code, fixing bugs and adding features using the <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix\" target=\"_blank\">Official Repo</a>.</p><p>If you are good at graphics and design you could help by submitting a new design, you can open a new issue with some design <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">here</a>.<br><p>Keep in mind that we are (sorta) following the <a href=\"https://material.io/\" target=\"_blank\">Material Design Principles</a>.</p>If you are good at finding bugs you can help Beta Test the app before release.<br>Join our <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Telegram Group</a> to be notified when betas come out!</p><hr><h5>You want to contribute monetarily? You could make a donation!</h5><p>If you can donate you can do that with this links.<br>You shoud remember that <b>this is a free project</b> and <b>you should support the artists you love</b> before supporting the developer.<br>Don't feel obligated to donate, I appreciate you anyway!</p>",
+       "I got it!": "I got it!",
+       "Available Countries for": "Available Countries for",
+       "Song/Album URL": "Song/Album URL",
+       "LinkAnalyzer_Info": "You can use this section to find out more information about the link you are trying to download<br/>This is usefull if you're trying to download some tracks that are not available in your country and want to know where they are available",
+       "DownloadURL_Info": "Song/Playlist/Album/Artist URL, separated by ';'",
+       "Download selection": "Download selection",
+       "Save ID3v1 tags as well": "Save ID3v1 tags as well",
+       "Language": "Language",
+       "You setted it up wrong!": "You setted it up wrong!",
+       "Somehow you managed to fuck it up. Good job.<br>Now go do the guide again.<br><br>If you need the link again <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">Here it is</a>": "Somehow you managed to fuck it up. Good job.<br>Now go do the guide again.<br><br>If you need the link again <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">Here it is</a>",
+       "You need to restart the app to apply the changes": "You need to restart the app to apply the changes",
+       "Changing the spotify settings id and secret requires an app restart": "Changing the spotify settings id and secret requires an app restart",
+       "Spotify Features is not enabled": "Spotify Features is not enabled",
+       "spotifyFeaturesMessage": "You should add spotify's clientId and clientSecret in the settings and then restart the app to use this feature<br>You can see how to do that in <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">this guide</a><br><br>THIS FEATURE DOES'T LET YOU DOWNLOAD FROM SPOTIFY. This just enables a practical in app metadata converter. If a song is not on Deezer it can't be downloaded",
+       "Can't find the track on Deezer!": "Can't find the track on Deezer!",
+       "Can't find the album on Deezer!": "Can't find the album on Deezer!",
+       "Logging in...": "Logging in...",
+       "Error: Captcha wasn't solved." : "Error: Captcha wasn't solved.",
+       "For security reasons, this button will do nothing." : "For security reasons, this button will do nothing.",
+       "Warning" : "Warning",
+       "Saving replay gain causes tracks to be quieter for some users." : "Saving replay gain causes tracks to be quieter for some users.",
+       "Disable Night Mode" : "Disable Night Mode",
+       "Please restart the app": "Please restart the app",
+       "To change the language you need to refresh the page or restart the app!" : "To change the language you need to refresh the page or restart the app!",
+       "Loading..." : "Loading...",
+       "Can't get data" : "Can't get data",
+       "Well, there seems to be a problem with this part of the app. Please notify the developer." : "Well, there seems to be a problem with this part of the app. Please notify the developer.",
+       "Album Title" : "Album Title",
+       "Wrong Type!" : "Wrong Type!",
+       "Blank URL Field": "Blank URL Field",
+       "You need to insert an URL to download it!" : "You need to insert an URL to download it!",
+       "Wrong URL": "Wrong URL",
+       "The URL seems to be wrong. Please check it and try it again." : "The URL seems to be wrong. Please check it and try it again.",
+       "Already in download-queue!" : "Already in download-queue!",
+       "Wrong ID!" : "Wrong ID!",
+       "Added to download-queue" : "Added to download-queue",
+       "Completed!" : "Completed!",
+       "Failed!" : "Failed!",
+       "Completed with errors!" : "Completed with errors!",
+       "ID": "ID",
+       "Error" : "Error",
+       "All downloads completed!" : "All downloads completed!",
+       "One download removed!" : "One download removed!",
+       "All downloads removed!" : "All downloads removed!"
+}
diff --git a/app/public/locales/it.json b/app/public/locales/it.json
new file mode 100644 (file)
index 0000000..f7f456b
--- /dev/null
@@ -0,0 +1,199 @@
+{
+       "Settings": "Impostazioni",
+       "About the App": "Sull'applicazione",
+       "About": "Info",
+       "Search": "Cerca",
+       "Charts": "Classifiche",
+       "Playlists": "Playlist",
+       "Link Analyzer": "Analizza Link",
+       "Download from URL": "Scarica da URL",
+       "Downloads": "Downloads",
+       "Enable Night Mode": "Attiva Modalità Notte",
+       "Start searching...": "Inizia a cercare...",
+       "Song": "Brano",
+       "Album": "Album",
+       "Artist": "Artista",
+       "Playlist": "Playlist",
+       "Songs": "Brani",
+       "Type": "Tipo",
+       "Albums": "Album",
+       "Name": "Nome",
+       "Nothing found!": "Trovato nulla!",
+       "Country": "Nazione",
+       "Download Playlist": "Scarica Playlist",
+       "Refresh Playlists": "Ricarica Playlists",
+       "See Available Countries": "Mostra Paesi Disponibili",
+       "Alternative Link": "Link Alternativo",
+       "Duration": "Durata",
+       "Disc Number": "Numero Disco",
+       "Track Number": "Numero Traccia",
+       "Release Date": "Data d'Uscita",
+       "Show Tracklist": "Mostra Scaletta",
+       "Label": "Casa Discografica",
+       "Record Type": "Tipo di Disco",
+       "Genres": "Generi",
+       "Open Downloads Folder": "Apri Cartella di Download",
+       "Cancel All Downloads": "Annulla tutti i Download",
+       "Clear List": "Pulisci Lista",
+       "Size": "Dimensione",
+       "Downloaded": "Scaricati",
+       "Failed": "Errori",
+       "original code by ZzMTV": "codice originale di ZzMTV",
+       "Please login to your deezer account": "Effettua il login con il tuo account Deezer",
+       "Email": "Email",
+       "Password": "Password",
+       "userToken": "userToken",
+       "How do I get my userToken?": "Come ottengo il mio userToken?",
+       "Log in": "Login",
+       "Sign up": "Registrati",
+       "Path Settings": "Impostazioni percorsi",
+       "Download folder path": "Percorso di download",
+       "Tracknames template": "Template nome traccia",
+       "Supported variables are": "Variabili supportate",
+       "Album tracknames template": "Template nome traccia negli Album",
+       "Album names template": "Template nomi Album",
+       "Playlist tracknames template": "Template nome traccia nelle Playlist",
+       "More Path Settings": "Altre impostazioni percorsi",
+       "Create folders for Artists": "Crea cartelle per gli Artisti",
+       "Create folders for Albums": "Crea cartelle per gli Album",
+       "Create folders for CDs": "Crea cartelle per i CD",
+       "Create Artist, Albums and CDs folders for Playlists too": "Crea cartelle per Artisti, Album e CD anche per le Playlist",
+       "Write all Artists in track filename": "Scrivi tutti gli artisti nel nome del file",
+       "Adds 0s before %number% to have the same character length": "Aggiunge 0 in %number% in modo che tutte le traccie abbiano lo stesso numero di caratteri",
+       "Add padding to track numbers": "Aggiungi zeri ai numeri di traccia",
+       "Overwrite padding size": "Sovrascrivi il numero di zeri da aggiungere",
+       "App Settings": "Impostazioni App",
+       "Concurrent download limit": "Limite download concorrenti",
+       "Preferred bitrate": "Bitrate preferito",
+       "Fallback to lower bitrates if preferred is not available": "Ripiega a bitrate più bassi se il bitrate preferito non è presente",
+       "Fallback to search if song is not available": "Ripiega alla ricerca se il brano non è avviabile",
+       "Download albums with one track as a single track": "Scarica album con una sola traccia come traccia singola",
+       "Create log file for Errors inside download folder": "Crea file di log per gli errori dentro la cartella di download",
+       "Create log file for Alternatives inside download folder": "Crea file di log per le alternative dentro la cartella di download",
+       "Create M3U8 (Playlist) File": "Crea il file M3U8 (Playlist)",
+       "Download Synced Lyrics File (.lyr)": "Scarica il file per i testi sincronizzati (.lyr)",
+       "Minimize to system tray": "Riduci a icona al posto di uscire",
+       "Artworks": "Copertine",
+       "Artwork Size": "Dimensioni Copertine",
+       "Save Album Artwork": "Salva Copertina Album",
+       "Album Artwork Name Template": "Template Nome Copertina Album",
+       "Save Artist Artwork": "Salva Copertina Artista",
+       "Artist Artwork Name Template": "Template Nome Copertina Artista",
+       "Download images as PNGs": "Scarica immagini come PNG",
+       "Tags": "Tag",
+       "Null Character": "Carattere Nullo",
+       "with space": "con spazio",
+       "Multitag Separator": "Separatore Multitag",
+       "YY": "AA",
+       "MM": "MM",
+       "DD": "GG",
+       "Date Format": "Formato Data",
+       "digit": "caratteri",
+       "Year Format": "Formato Anno",
+       "Replaces albums tags with the playlist ones": "Rimpiazza i tag dell'album con quelli della playlist",
+       "Save Playlist as Compilation": "Salva Playlist come Compilation",
+       "Remove \"(Album Version)\" from tracknames": "Rimuovi \"(Album Version)\" dal nome della traccia",
+       "Choose Which Tags To Save": "Scegli quali tag salvare",
+       "Spotify Features": "Spotify Features",
+       "Client ID": "Client ID",
+       "Client Secret": "Client Secret",
+       "Spotify Username (for the Playlists Tab)": "Username Spotify (per la sezione Playlist)",
+       "You are logged in as": "Hai effettuato l'accesso come",
+       "Logout": "Esci",
+       "Save": "Salva",
+       "Default Settings": "Impostazioni di Default",
+       "Close": "Chiudi",
+       "Saved Tags": "Salva Tag",
+       "SpotifyFeatures_Info": "\"Spotify Features\" <b>NON</b> scaricherà musica da Spotify.<br>Questa feature è solo un playlist converter pratico. Se una canzone non è su deezer non può essere scaricata<br><a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">Qui</a> puoi vedere come ottenere il Client e Secret ID",
+       "Title": "Titolo",
+       "Cover": "Cover",
+       "Track Total": "Numero Traccie",
+       "Disc Total": "Numero Dischi",
+       "Album Artist": "Artista Album",
+       "Genre": "Genere",
+       "Year": "Anno",
+       "Date": "Data",
+       "Explicit": "Esplicito",
+       "Length": "Durata",
+       "Barcode": "Codice a Barre",
+       "Replay Gain": "Guadagno Brano",
+       "Unsynchronised Lyrics": "Testo non Sincronizzato",
+       "Copyright": "Copyright",
+       "Publisher": "Publisher",
+       "Composer": "Compositori",
+       "Mixer": "Mixaggio",
+       "Author": "Autori",
+       "Writer": "Scrittori",
+       "Engineer": "Ingegneri",
+       "Producer": "Produttori",
+       "Branch": "Ramo",
+       "Version": "Versione",
+       "Based on": "Basato su",
+       "Maintainers": "Maintainer",
+       "Repo": "Repo",
+       "FAQ": "FAQ",
+       "Official mirrors": "Mirror ufficiali",
+       "Interface": "Interfaccia",
+       "Telegram Contacts": "Contatti Telegram",
+       "News Channel": "Canale News",
+       "Betas Channel": "Canale Beta",
+       "Stable Releases Channel": "Canale Release Stabili",
+       "Special Thanks to": "Un ringraziamento speciale a",
+       "Feedback": "Feedback",
+       "Feedback_Text": "Hai qualche feedback o vuoi proporre una nuova feature? Apri un nuovo <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">Issue</a> e scegli 'Feature'.",
+       "Reporting Bugs": "Segnala un Bug",
+       "Bugs_Text": "Se incontri dei bug innanzi tutto controlla <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/FAQ\" target=\"_blank\">la FAQ</a>.<br> Se non riesci a trovare una soluzione al tuo problema, apri un nuovo <a href=\"https://github.com/RemixDev/DRemixIssues/issues/new/choose\" target=\"_blank\">issue</a> e descrivi il tuo problema, grazie.",
+       "Contacts": "Contatti",
+       "Contacts_Text": "Se vuoi parlare dell'applicazione o aiutare con lo sviluppo entra nel <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Gruppo Telegram</a> (Solo in inglese)!",
+       "Attention!": "Attenzione!",
+       "Attention_Text": "Gli autori del programma non vogliono commettere reati!<br/>L'uso di questo strumento potrebbe essere illegale nel tuo paese, perfavore informati!<br/>Gli autori non danno nessuna garazia e non sono responsabili per qualsiasi danno di qualsiasi tipo dall'utilizzo di questo software!",
+       "Changelog": "Changelog",
+       "Full Changelog Here": "Changelog Completo Qui",
+       "License": "Licenza",
+       "Contributions": "Contribuisci",
+       "Contributions_Text": "<h5>Vuoi contribuire al progetto? Puoi farlo <b>in modi diversi!</b></h5><p>Se conosci JavaScript, HTML, CSS o Node.js puoi contribuire scrivendo codice, risolvendo bug o aggiungendo feature tramite <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix\" target=\"_blank\">il Repo Ufficiale</a>.</p><p>Se sei bravo a creare UI potresti aiutare inviando nuovi design, puoi aprire un nuovo issue con le tue idee <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/issues/new\" target=\"_blank\">qui</a>.<br><p>Ricorda che stiamo (circa) seguendo il <a href=\"https://material.io/\" target=\"_blank\">Material Design</a>.</p>Se sei bravo a trovare bug puoi aiutare facendo da beta tester.<br>Puoi trovare tutte le informazioni nel <a href=\"https://t.me/DeezloaderRemixCommunity\" target=\"_blank\">Gruppo Telegram</a></p><hr><h5>Vuoi dare un contributo monetario? Fai una donazione!</h5><p>Se hai la possibilità di donare puoi farlo tramite questi link.<br>Ricorda che <b>questo progetto è gratuito</b> e <b>dovresti supportare gli artisti che ami</b> prima di supportare lo sviluppatore.<br>Non sentirti in obbligo di donare, ti apprezzo lo stesso!</p>",
+       "I got it!": "Ho Capito!",
+       "Available Countries for": "Paesi Disponibili per",
+       "Song/Album URL": "URL Brano/Album",
+       "LinkAnalyzer_Info": "Puoi usare questa funzione per scoprire maggiori informazioni sui link che stai cercando di scaricare.<br/>Utile se stai cercando di scaricare un brano non disponibile nel tuo paese e vuoi scoprire in quali paesi lo è",
+       "DownloadURL_Info": "URL dei Brani/Playlist/Album/Artisti, separati da un ';'",
+       "Download selection": "Scarica selezionati",
+       "Save ID3v1 tags as well": "Salva i tag anche in ID3v1",
+       "Language": "Lingua",
+       "You setted it up wrong!": "L'hai impostato male!",
+       "Somehow you managed to fuck it up. Good job.<br>Now go do the guide again.<br><br>If you need the link again <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">Here it is</a>": "In qualche modo sei riuscito a mandare tutto a puttane. Ottimo lavoro.<br>Ora vai a rifare la guida.<br><br>Se ti serve il link della guida <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">eccolo</a>",
+       "You need to restart the app to apply the changes": "Devi riavviare l'app per applicare i cambiamenti",
+       "Changing the spotify settings id and secret requires an app restart": "Cambiare il secret e client id di spotify necessita di un riavvio dell'app",
+       "Spotify Features is not enabled": "Spotify Features non è attivato",
+       "spotifyFeaturesMessage": "Dovresti aggiungere il clientId e clientSecret di spotify nelle impostazioni e poi riavviare l'app per usare questa funzione<br>Puoi vedere come fare in <a href=\"https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Spotify+Features\">questa guida</a><br><br>QUESTA FUNZIONE NON TI PERMETTE DI SCARICARE DA SPOTIFY. È solo un pratico converter dei metadata. Se una canzone non è su deezer non può essere scaricata",
+       "Can't find the track on Deezer!": "Impossibile trovare il brano su Deezer!",
+       "Can't find the album on Deezer!": "Impossibile trovare l'album su Deezer!",
+       "Logging in...": "Loggando...",
+       "Error: Captcha wasn't solved." : "Error: Il captcha non è stato risolto.",
+       "For security reasons, this button will do nothing." : "Per ragioni di sicurezza, questo bottone non farà nulla.",
+       "Warning" : "Attenzione",
+       "Saving replay gain causes tracks to be quieter for some users." : "Salvare il guadagno potrebbe rendere l'audio delle traccie più basso per alcuni utenti",
+       "Disable Night Mode" : "Disattiva Modalità Notte",
+       "Please restart the app": "Perfavore riavvia l'app",
+       "To change the language you need to refresh the page or restart the app!" : "Per cambiare la lingua devi ricaricare la pagina o riavviare l'app!",
+       "Loading..." : "Caricamento...",
+       "Can't get data" : "Impossibile trovare i dati",
+       "Well, there seems to be a problem with this part of the app. Please notify the developer." : "Beh, sembra esserci un problema con questa parte dell'app. Perfavore notifica uno sviluppatore.",
+       "Album Title" : "Titolo Album",
+       "Wrong Type!" : "Tipo Sbagliato!",
+       "Blank URL Field": "Campo URL Vuoto",
+       "You need to insert an URL to download it!" : "Devi inserire un URL per poterlo scaricare!",
+       "Wrong URL": "URL Sbagliato",
+       "The URL seems to be wrong. Please check it and try it again." : "L'URL sembra sbagliato. Perfavore ricontrollalo.",
+       "Already in download-queue!" : "Già in coda di download!",
+       "Wrong ID!" : "ID Sbagliato!",
+       "Added to download-queue" : "Aggiunto alla coda di download",
+       "Completed!" : "Completato!",
+       "Failed!" : "Fallito!",
+       "Completed with errors!" : "Completato con errori!",
+       "ID": "ID",
+       "Error" : "Errore",
+       "All downloads completed!" : "Tutti i download completati!",
+       "One download removed!" : "Un download rimosso!",
+       "All downloads removed!" : "Tutti i download rimossi!"
+}
index 2966ec0e5990d89ad6fb29e83312517c7775911b..cc406d4f71560fbcbf2ee0ed0772be9db180e1fe 100644 (file)
 <script type="text/javascript" src="js/socket.io.js"></script>
 <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
 <script type="text/javascript" src="js/materialize.min.js"></script>
+<script type="text/javascript" src="js/i18n.min.js"></script>
 <script type="text/javascript" src="js/vue.min.js"></script>
 <script type="text/javascript" src="js/appBase.js"></script>
 <script type="text/javascript" src="js/frontend.js"></script>