diff --git a/.gitignore b/.gitignore index b711319..e5b3a0a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ app/dist/ app/client/node_modules/ electron_dist/ freezer-*.tgz +translations.zip diff --git a/app/.eslintrc.js b/app/.eslintrc.js index aeb94a0..8e97371 100644 --- a/app/.eslintrc.js +++ b/app/.eslintrc.js @@ -10,6 +10,6 @@ module.exports = { "ecmaVersion": 12 }, "rules": { - "allowEmptyCatch": true + "allowEmptyCatch": 0 } }; diff --git a/app/client/.env b/app/client/.env new file mode 100644 index 0000000..f256c63 --- /dev/null +++ b/app/client/.env @@ -0,0 +1,2 @@ +VUE_APP_I18N_LOCALE=en +VUE_APP_I18N_FALLBACK_LOCALE=en diff --git a/app/client/package-lock.json b/app/client/package-lock.json index 3f2739b..a13db67 100644 --- a/app/client/package-lock.json +++ b/app/client/package-lock.json @@ -80,6 +80,27 @@ "postcss": "^7.0.0" } }, + "@intlify/vue-i18n-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@intlify/vue-i18n-loader/-/vue-i18n-loader-1.0.0.tgz", + "integrity": "sha512-y7LlpKEQ01u7Yq14l4VNlbFYEHMmSEH1QXXASOMWspj9ZcIdCebhhvHCHqk5Oy5Epw3PtoxyRJNpb6Wle5udgA==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1", + "json5": "^2.1.1" + }, + "dependencies": { + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + }, "@mdi/font": { "version": "5.5.55", "resolved": "https://registry.npmjs.org/@mdi/font/-/font-5.5.55.tgz", @@ -2170,6 +2191,50 @@ "integrity": "sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA==", "dev": true }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -2288,6 +2353,13 @@ "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", "dev": true }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "optional": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3322,6 +3394,16 @@ "domelementtype": "1" } }, + "dot-object": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/dot-object/-/dot-object-1.9.0.tgz", + "integrity": "sha512-7MPN6y7XhAO4vM4eguj5+5HNKLjJYfkVG1ZR1Aput4Q4TR6SYeSjhpVQ77IzJHoSHffKbDxBC+48aCiiRurDPw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "glob": "^7.1.4" + } + }, "dot-prop": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", @@ -3765,6 +3847,12 @@ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, + "esm": { + "version": "3.2.25", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", + "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "dev": true + }, "espree": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", @@ -4264,6 +4352,12 @@ "pinkie-promise": "^2.0.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -5524,6 +5618,12 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -9783,6 +9883,54 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz", "integrity": "sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==" }, + "vue-cli-plugin-i18n": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vue-cli-plugin-i18n/-/vue-cli-plugin-i18n-1.0.1.tgz", + "integrity": "sha512-sLo6YzudaWgn5dOMvrKixE5bb/onYGxcxm+0YexqoOx0QtR+7hZ/P5WPFBMM9v/2i1ec2YYe2PvKTBel7KE+tA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "deepmerge": "^4.2.0", + "dotenv": "^8.2.0", + "flat": "^5.0.0", + "rimraf": "^3.0.0", + "vue": "^2.6.11", + "vue-i18n": "^8.17.0", + "vue-i18n-extract": "1.0.2" + }, + "dependencies": { + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "vue-cli-plugin-vuetify": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/vue-cli-plugin-vuetify/-/vue-cli-plugin-vuetify-2.0.7.tgz", @@ -9854,6 +10002,118 @@ "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", "dev": true }, + "vue-i18n": { + "version": "8.22.1", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.22.1.tgz", + "integrity": "sha512-JNgiEJ5a8YPfk5y2lKyfOAGLmkpAVfhaUi+T4wGpSppRYZ3XSyawSDDketY5KV2CsAiBLAGEIO6jO+0l2hQubg==" + }, + "vue-i18n-extract": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vue-i18n-extract/-/vue-i18n-extract-1.0.2.tgz", + "integrity": "sha512-+zwDKvle4KcfloXZnj5hF01ViKDiFr5RMx5507D7oyDXpSleRpekF5YHgZa/+Ra6Go68//z0Nya58J9tKFsCjw==", + "dev": true, + "requires": { + "cli-table3": "^0.5.1", + "dot-object": "^1.7.1", + "esm": "^3.2.13", + "glob": "^7.1.3", + "is-valid-glob": "^1.0.0", + "yargs": "^13.2.2" + }, + "dependencies": { + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "vue-loader": { "version": "15.9.3", "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.3.tgz", diff --git a/app/client/package.json b/app/client/package.json index f1189f7..14633bc 100644 --- a/app/client/package.json +++ b/app/client/package.json @@ -5,8 +5,9 @@ "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", - "watch": "vue-cli-service build --watch", - "lint": "vue-cli-service lint" + "lint": "vue-cli-service lint", + "i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'", + "watch": "vue-cli-service build --watch" }, "dependencies": { "@mdi/font": "^5.5.55", @@ -14,11 +15,13 @@ "roboto-fontface": "*", "vue": "^2.6.11", "vue-esc": "^3.0.1", + "vue-i18n": "^8.17.3", "vue-router": "^3.2.0", "vue-socket.io": "^3.0.10", "vuetify": "^2.2.11" }, "devDependencies": { + "@intlify/vue-i18n-loader": "^1.0.0", "@vue/cli-plugin-eslint": "~4.5.0", "@vue/cli-plugin-router": "~4.5.0", "@vue/cli-service": "~4.5.0", @@ -26,6 +29,7 @@ "eslint-plugin-vue": "^6.2.2", "sass": "^1.19.0", "sass-loader": "^8.0.0", + "vue-cli-plugin-i18n": "~1.0.1", "vue-cli-plugin-vuetify": "~2.0.7", "vue-template-compiler": "^2.6.11", "vuetify-loader": "^1.3.0" diff --git a/app/client/src/App.vue b/app/client/src/App.vue index ecb1933..d160e05 100644 --- a/app/client/src/App.vue +++ b/app/client/src/App.vue @@ -31,7 +31,7 @@ mdi-home - Home + {{$t('Home')}} @@ -39,10 +39,10 @@ mdi-earth - Browse + {{$t('Browse')}} - Library + {{$t('Library')}} @@ -50,7 +50,7 @@ mdi-music-note - Tracks + {{$t('Tracks')}} @@ -58,7 +58,7 @@ mdi-playlist-music - Playlists + {{$t('Playlists')}} @@ -66,7 +66,7 @@ mdi-album - Albums + {{$t('Albums')}} @@ -74,10 +74,10 @@ mdi-account-music - Artists + {{$t('Artists')}} - More + {{$t('More')}} @@ -85,30 +85,30 @@ mdi-cog - Settings + {{$t('Settings')}} - - + + - + mdi-download - + mdi-pause - + - {{$root.downloads.length + 1}} + {{$root.downloads.queue.length + $root.downloads.threads.length}} - Downloads + {{$t('Downloads')}} @@ -133,7 +133,7 @@ solo clearable hide-no-data - placeholder='Search or paste Deezer URL. Use "/" to quickly focus.' + :placeholder='$t("Search or paste Deezer URL. Use / to quickly focus.")' :loading='searchLoading' @keyup='search' ref='searchBar' @@ -141,6 +141,7 @@ :search-input.sync='searchInput' :items='suggestions' > + @@ -355,12 +356,19 @@ export default { }, computed: { qualityText() { - return `${this.$root.playbackInfo.format} ${this.$root.playbackInfo.quality}`; + return `${this.$root.playbackInfo.qualityString}`; }, downloadPercentage() { - if (!this.$root.download) return 0; - let p = (this.$root.download.downloaded / this.$root.download.size) * 100; - if (isNaN(p)) return 0; + if (!this.$root.downloads.downloading) return 0; + + let downloaded = this.$root.downloads.threads.reduce((a, b) => a + b.downloaded, 0); + let size = this.$root.downloads.threads.reduce((a, b) => a + b.size, 0); + if (size == 0) + size = 1; + + let p = (downloaded / size) * 100; + if (p > 100) + p = 100; return Math.round(p); } }, @@ -413,6 +421,8 @@ export default { this.suggestions = []; return; } + + if (!this.$root.settings.showAutocomplete) return; this.searchLoading = true; //Prevent spam setTimeout(() => { diff --git a/app/client/src/components/AlbumTile.vue b/app/client/src/components/AlbumTile.vue index b705894..105e19f 100644 --- a/app/client/src/components/AlbumTile.vue +++ b/app/client/src/components/AlbumTile.vue @@ -33,7 +33,7 @@ mdi-play - Play + {{$t("Play")}} @@ -42,7 +42,7 @@ mdi-heart - Add to library + {{$t("Add to library")}} @@ -51,7 +51,7 @@ mdi-download - Download + {{$t("Download")}} diff --git a/app/client/src/components/ArtistTile.vue b/app/client/src/components/ArtistTile.vue index 9116a80..bf816c7 100644 --- a/app/client/src/components/ArtistTile.vue +++ b/app/client/src/components/ArtistTile.vue @@ -6,7 +6,7 @@ {{artist.name}} - {{$abbreviation(artist.fans)}} fans + {{$abbreviation(artist.fans)}} {{$t("fans")}} @@ -23,7 +23,7 @@ mdi-heart - Add to library + {{$t("Add to library")}} diff --git a/app/client/src/components/DownloadDialog.vue b/app/client/src/components/DownloadDialog.vue index f263b7d..8ae296a 100644 --- a/app/client/src/components/DownloadDialog.vue +++ b/app/client/src/components/DownloadDialog.vue @@ -5,29 +5,29 @@ - Download {{tracks.length}} tracks + {{$t("Download")}} {{tracks.length}} {{$t("tracks")}} - Cancel - Download + {{$t("Cancel")}} + {{$t("Download")}} diff --git a/app/client/src/components/LibraryHistory.vue b/app/client/src/components/LibraryHistory.vue index 027cb8d..1e8fbb4 100644 --- a/app/client/src/components/LibraryHistory.vue +++ b/app/client/src/components/LibraryHistory.vue @@ -12,10 +12,10 @@ - Streaming logging is disabled! + {{$t("Stream logging is disabled!")}} - Enable it in settings for history to work properly. + {{$t("Enable it in settings for history to work properly.")}} @@ -56,7 +56,7 @@ export default { //Load as queue and play play(index) { this.$root.queue.source = { - text: 'History', + text: this.$t('History'), source: 'history', data: null }; diff --git a/app/client/src/components/LibraryPlaylists.vue b/app/client/src/components/LibraryPlaylists.vue index 2457ed6..a78eeec 100644 --- a/app/client/src/components/LibraryPlaylists.vue +++ b/app/client/src/components/LibraryPlaylists.vue @@ -8,7 +8,7 @@ mdi-playlist-plus - Create new playlist + {{$t("Create new playlist")}} diff --git a/app/client/src/components/LibraryTracks.vue b/app/client/src/components/LibraryTracks.vue index 1f69d44..b3163d8 100644 --- a/app/client/src/components/LibraryTracks.vue +++ b/app/client/src/components/LibraryTracks.vue @@ -2,10 +2,10 @@
- {{count}} TRACKS. + {{count}} {{$t("TRACKS")}}
- +
@@ -46,10 +46,10 @@ export default { tracks: [], count: 0, sortTypes: [ - 'Date Added', - 'Name (A-Z)', - 'Artist (A-Z)', - 'Album (A-Z)' + this.$t('Date Added'), + this.$t('Name (A-Z)'), + this.$t('Artist (A-Z)'), + this.$t('Album (A-Z)') ], tracksUnsorted: null, isReversed: false diff --git a/app/client/src/components/Lyrics.vue b/app/client/src/components/Lyrics.vue index 634108d..7081645 100644 --- a/app/client/src/components/Lyrics.vue +++ b/app/client/src/components/Lyrics.vue @@ -34,7 +34,7 @@
- Error loading lyrics or lyrics not found! + {{$t("Error loading lyrics or lyrics not found!")}}
diff --git a/app/client/src/components/PlaylistPopup.vue b/app/client/src/components/PlaylistPopup.vue index 97f787f..88096a3 100644 --- a/app/client/src/components/PlaylistPopup.vue +++ b/app/client/src/components/PlaylistPopup.vue @@ -4,7 +4,7 @@ -

Create playlist

+

{{$t("Create playlist")}}

@@ -12,17 +12,17 @@ - Create + {{$t("Create")}}
-

Add to playlist

+

{{$t("Add to playlist")}}

mdi-playlist-plus - Create New + {{$t("Create new")}}
diff --git a/app/client/src/components/PlaylistTile.vue b/app/client/src/components/PlaylistTile.vue index b54a57c..519c163 100644 --- a/app/client/src/components/PlaylistTile.vue +++ b/app/client/src/components/PlaylistTile.vue @@ -15,7 +15,7 @@ {{playlist.title}} - {{$numberString(playlist.trackCount)}} tracks + {{$numberString(playlist.trackCount)}} {{$t("tracks")}} @@ -32,7 +32,7 @@ mdi-play - Play + {{$t('Play')}} @@ -42,7 +42,7 @@ mdi-playlist-remove - Remove + {{$t('Remove')}} @@ -52,7 +52,7 @@ mdi-download - Download + {{$t('Download')}} diff --git a/app/client/src/components/TrackTile.vue b/app/client/src/components/TrackTile.vue index 0c2d681..41c537e 100644 --- a/app/client/src/components/TrackTile.vue +++ b/app/client/src/components/TrackTile.vue @@ -45,7 +45,7 @@ mdi-playlist-plus - Play next + {{$t("Play next")}} @@ -54,7 +54,7 @@ mdi-playlist-plus - Add to queue + {{$t("Add to queue")}} @@ -63,7 +63,7 @@ mdi-heart - Add to library + {{$t("Add to library")}} @@ -72,7 +72,7 @@ mdi-heart-remove - Remove from library + {{$t("Remove from library")}} @@ -81,7 +81,7 @@ mdi-playlist-plus - Add to playlist + {{$t("Add to playlist")}} @@ -90,7 +90,16 @@ mdi-playlist-remove - Remove from playlist + {{$t("Remove from playlist")}} + + + + + + mdi-playlist-music + + + {{$t("Play track mix")}} @@ -99,7 +108,7 @@ mdi-album - Go to "{{track.album.title}}" + {{$t("Go to")}} "{{track.album.title}}" @@ -113,7 +122,7 @@ mdi-account-music - Go to "{{artist.name}}" + {{$t("Go to")}} "{{artist.name}}" @@ -123,7 +132,7 @@ mdi-download - Download + {{$t("Download")}} @@ -207,8 +216,18 @@ export default { this.$emit('remove'); }, //Download track - async download() { + download() { this.downloadDialog = true; + }, + async trackMix() { + let res = await this.$axios.get('/trackmix/' + this.track.id); + this.$root.queue.source = { + text: this.$t('Track Mix'), + source: 'trackmix', + data: this.track.id + }; + this.$root.replaceQueue(res.data); + this.$root.playIndex(0); } } } diff --git a/app/client/src/js/i18n.js b/app/client/src/js/i18n.js new file mode 100644 index 0000000..c65e32b --- /dev/null +++ b/app/client/src/js/i18n.js @@ -0,0 +1,23 @@ +import Vue from 'vue' +import VueI18n from 'vue-i18n' + +Vue.use(VueI18n); + +function loadLocaleMessages () { + const locales = require.context('../locales', true, /[A-Za-z0-9-_,\s]+\.json$/i) + const messages = {} + locales.keys().forEach(key => { + const matched = key.match(/([A-Za-z0-9-_]+)\./i) + if (matched && matched.length > 1) { + const locale = matched[1] + messages[locale] = locales(key) + } + }) + return messages +} + +export default new VueI18n({ + locale: process.env.VUE_APP_I18N_LOCALE || 'en', + fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en', + messages: loadLocaleMessages() +}) diff --git a/app/client/src/js/vuetify.js b/app/client/src/js/vuetify.js index f200151..e0e8f59 100644 --- a/app/client/src/js/vuetify.js +++ b/app/client/src/js/vuetify.js @@ -8,6 +8,6 @@ Vue.use(Vuetify); export default new Vuetify({ theme: { - dark: true + dark: true, } }); diff --git a/app/client/src/locales/ar.json b/app/client/src/locales/ar.json new file mode 100644 index 0000000..5344d4d --- /dev/null +++ b/app/client/src/locales/ar.json @@ -0,0 +1,112 @@ +{ + "Home": "القائمة الرئيسية", + "Browse": "تصفح", + "Library": "المكتبة", + "Tracks": "أغاني", + "Playlists": "قوائم تشغيل", + "Albums": "البومات", + "Artists": "فنانون", + "More": "المزيد", + "Settings": "الإعدادات", + "Downloads": "التنزيلات", + "Search or paste Deezer URL. Use / to quickly focus.": "ابحث أو الصق رابط ديزر, استخدم \"/\" للتركيز السريع.", + "Play": "تشغيل", + "Add to library": "إضافة إلى المكتبة", + "Download": "تنزيل", + "fans": "المتابِعين", + "tracks": "أغاني", + "Quality": "الجودة", + "Estimated size:": "الحجم المتوقع:", + "Start downloading": "بدء التنزيل", + "Cancel": "الغاء", + "Stream logging is disabled!": "تسجيل البث معطل!", + "Enable it in settings for history to work properly.": "فعله في الإعدادات لتفعيل تاريخ السماع بشكل صحيح.", + "History": "تاريخ السماع", + "Create new playlist": "انشاء قائمة تشغيل جديدة", + "TRACKS": "أغاني", + "Sort by": "ترتيب حسب", + "Date Added": "تاريخ الإضافة", + "Name (A-Z)": "الإسم (أ - ي)", + "Artist (A-Z)": "الفنان (أ - ي)", + "Album (A-Z)": "الألبوم (أ - ي)", + "Error loading lyrics or lyrics not found!": "خطأ في تحميل كلمات الاغنية او الكلمات غير موجودة!", + "Create playlist": "إنشاء قائمة التشغيل", + "Create": "إنشاء", + "Add to playlist": "اضافة الى قائمة التشغيل", + "Create new": "إنشاء جديد", + "Remove": "إزالة", + "Play next": "شغل التالي", + "Add to queue": "إضافة إلى قائمة الانتظار", + "Remove from library": "إزالة من المكتبة", + "Remove from playlist": "إزالة من قائمة التشغيل", + "Play track mix": "تشغيل مزيج الاغاني", + "Go to": "الذهاب الى", + "Track Mix": "مزيج الاغاني", + "Duration": "المدة", + "Released": "تم إصداره", + "Disk": "القرص", + "albums": "البومات", + "Play top": "تشغيل الأفضل", + "Radio": "راديو", + "Show all albums": "اضهار كل الالبومات", + "Show all singles": "إظهار كل الأغاني المنفردة", + "Show more": "اظهار المزيد", + "Downloaded": "تم التنزيل", + "Queue": "قائمة الانتظار", + "Total": "المجموع", + "Stop": "إيقاف", + "Start": "بدء", + "Show folder": "عرض المجلدات", + "Clear queue": "تفريغ قائمة الإنتظار", + "Playing from": "التشغيل من", + "Info": "معلومات", + "Lyrics": "كلمات الأغنية", + "Track number": "رقم الأغنية", + "Disk number": "رقم القرص", + "Explicit": "صريحة (شتم)", + "Source": "المصدر", + "ID": "الرقم التعريفي", + "Error logging in!": "خطأ في تسجيل الدخول!", + "Please try again later, or try another account.": "الرجاء المحاولة مرة أخرى لاحقا، أو حاول حساب آخر.", + "Logout": "تسجيل الخروج", + "Login using browser": "تسجيل الدخول باستخدام المتصفح", + "Please login using your Deezer account:": "يرجى تسجيل الدخول باستخدام حساب ديزر الخاص بك:", + "...or paste your ARL/Token below:": "...أو لصق ARL/الرمز الخاص بك أدناه:", + "ARL/Token": "ARL/الرمز المميز", + "Login": "تسجيل الدخول", + "By using this program, you disagree with Deezer's ToS.": "باستخدام هذا البرنامج، أنت لا توافق على شروط خدمة ديزر.", + "Only in Electron version!": "فقط في إصدار إلكترون!", + "Search results for:": "نتائج البحث عن:", + "Error loading data!": "خطأ في تحميل البيانات!", + "Try again later!": "حاول مرة اخرى لاحقا!", + "Search": "بحث", + "Streaming Quality": "جودة التشغيل", + "Download Quality": "جودة التنزيل", + "Downloads Directory": "مسار التنزيل", + "Simultaneous downloads": "عدد التحميلات في نفس الوقت", + "Always show download confirm dialog before downloading.": "اضهار مربع تأكيد التنزيل دائماً قبل التنزيل.", + "Show download dialog": "عرض مربع تأكيد التنزيل", + "Create folders for artists": "إنشاء ملفات للفنان", + "Create folders for albums": "إنشاء ملفات للالبوم", + "Download lyrics": "تنزيل ملف كلمات الاغنية. Lrc", + "Variables": "المتغيرات", + "UI": "واجهة المستخدم", + "Show autocomplete in search": "إظهار الإكمال التلقائي في البحث", + "Integrations": "الدمج", + "This allows listening history, flow and recommendations to work properly.": "وهذا يتيح لسجل الاستماع و فلو والتوصيات, العمل على نحو سليم.", + "Log track listens to Deezer": "سِجِل استماع الاغاني الى ديزر", + "Connect your LastFM account to allow scrobbling.": "قم بتوصيل حساب LastFM الخاص بك للسماح بالتسجيل.", + "Login with LastFM": "تسجيل الدخول في LastFM", + "Disconnect LastFM": "تسجيل الخروج من LastFm", + "Requires restart to apply!": "يتطلب إعادة التشغيل من أجل التطبيق!", + "Enable Discord Rich Presence, requires restart to toggle!": "تمكين فعالية دسكورد، يتطلب إعادة تشغيل للتبديل!", + "Discord Rich Presence": "فعالية دسكورد", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "تمكين زر انضمام دسكورد لمزامنة الاغاني، يتطلب إعادة تشغيل للتبديل!", + "Discord Join Button": "زر الانضمام في دسكورد", + "Other": "أخرى", + "Minimize to tray": "تصغير إلى شريط المهام", + "Don't minimize to tray": "عدم التصغير إلى شريط المهام", + "Close on exit": "إغلاق عند الخروج", + "Settings saved!": "تم حفظ الإعدادات!", + "Available only in Electron version!": "متاح فقط في اصدار الإلكترون!" +} \ No newline at end of file diff --git a/app/client/src/locales/de.json b/app/client/src/locales/de.json new file mode 100644 index 0000000..c4a85c9 --- /dev/null +++ b/app/client/src/locales/de.json @@ -0,0 +1,112 @@ +{ + "Home": "Start", + "Browse": "Durchsuchen", + "Library": "Mediathek", + "Tracks": "Titel", + "Playlists": "Wiedergabelisten", + "Albums": "Alben", + "Artists": "Künstler", + "More": "Mehr", + "Settings": "Einstellungen", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Suche oder füge Deezer URL ein. Benutze \"/\" um schnell zu fokussieren.", + "Play": "Wiedergeben", + "Add to library": "Zur Mediathek hinzufügen", + "Download": "Download", + "fans": "Fans", + "tracks": "Titel", + "Quality": "Qualität", + "Estimated size:": "Geschätzte Zeit:", + "Start downloading": "Download beginnen", + "Cancel": "Abbrechen", + "Stream logging is disabled!": "Streamprotokollierung ist deaktiviert!", + "Enable it in settings for history to work properly.": "Aktiviere es in den Einstellungen, damit der Verlauf korrekt funktioniert.", + "History": "Verlauf", + "Create new playlist": "Neue Wiedergabeliste erstellen", + "TRACKS": "Titel", + "Sort by": "Sortieren nach", + "Date Added": "Hinzugefügt am", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Künstler (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Fehler beim Laden der Songtexte oder Songtexte nicht gefunden!", + "Create playlist": "Wiedergabeliste erstellen", + "Create": "Erstellen", + "Add to playlist": "Zur Wiedergabeliste hinzufügen", + "Create new": "Neu erstellen", + "Remove": "Entfernen", + "Play next": "Als nächstes spielen", + "Add to queue": "Zur Warteschleife hinzufügen", + "Remove from library": "Aus der Mediathek entfernen", + "Remove from playlist": "Aus Wiedergabeliste entfernen", + "Play track mix": "Track Mix abspielen", + "Go to": "Gehe zu", + "Track Mix": "Track Mix", + "Duration": "Dauer", + "Released": "Veröffentlicht", + "Disk": "Disk", + "albums": "Alben", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Zeige alle Alben", + "Show all singles": "Zeige alle Singles", + "Show more": "Mehr anzeigen", + "Downloaded": "Heruntergeladen", + "Queue": "Warteschleife", + "Total": "Gesamt", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Ordner anzeigen", + "Clear queue": "Warteschleife löschen", + "Playing from": "Wiedergabe von", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Titelnummer", + "Disk number": "Disk-Nummer", + "Explicit": "Explizit", + "Source": "Quelle", + "ID": "ID", + "Error logging in!": "Fehler beim einloggen!", + "Please try again later, or try another account.": "Bitte versuche es später noch einmal oder versuche es mit einem anderen Konto.", + "Logout": "Abmelden", + "Login using browser": "Anmeldung über Browser", + "Please login using your Deezer account:": "Bitte melde dich mit deinem Deezer-Konto an:", + "...or paste your ARL/Token below:": "...oder füge dein ARL/Token unten ein:", + "ARL/Token": "ARL/Token", + "Login": "Anmeldung", + "By using this program, you disagree with Deezer's ToS.": "Durch die Verwendung dieses Programms lehnen Sie Deezer's ToS ab.", + "Only in Electron version!": "Nur in der Electron-Version!", + "Search results for:": "Suchergebnisse für:", + "Error loading data!": "Fehler beim Laden der Daten!", + "Try again later!": "Versuch's später nochmal!", + "Search": "Suche", + "Streaming Quality": "Streamqualität", + "Download Quality": "Download-Qualität", + "Downloads Directory": "Downloadverzeichnis", + "Simultaneous downloads": "Gleichzeitige Downloads", + "Always show download confirm dialog before downloading.": "Downloadbestätigungsdialog immer vor dem Download anzeigen.", + "Show download dialog": "Download-Dialog anzeigen", + "Create folders for artists": "Ordner für Künstler erstellen", + "Create folders for albums": "Ordner für Alben erstellen", + "Download lyrics": "Download Lyrics", + "Variables": "Variablen", + "UI": "Benutzeroberfläche", + "Show autocomplete in search": "Auto-Vervollständigung in der Suche anzeigen", + "Integrations": "Integrationen", + "This allows listening history, flow and recommendations to work properly.": "Dies ermöglicht das korrekte Arbeiten von Wiedergabeverlauf, Flow und Empfehlungen.", + "Log track listens to Deezer": "Prokotolliere gehörte Titel auf Deezer", + "Connect your LastFM account to allow scrobbling.": "Verbinde dein LastFM-Konto, um das Scrobbing zu erlauben.", + "Login with LastFM": "Anmelden mit LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Erfordert einen Neustart der App!", + "Enable Discord Rich Presence, requires restart to toggle!": "Discord Rich Presence aktivieren, erfordert einen Neustart zum Umschalten!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Aktiviere Discord Join für die Synchronisierung von Titel, benötigt einen Neustart zum Umschalten!", + "Discord Join Button": "Discord Join Button", + "Other": "Andere", + "Minimize to tray": "In Statusleiste minimieren", + "Don't minimize to tray": "Nicht in Statusleiste minimieren", + "Close on exit": "Beim Beenden schließen", + "Settings saved!": "Einstellungen gespeichert!", + "Available only in Electron version!": "Nur in der Electron-Version verfügbar!" +} \ No newline at end of file diff --git a/app/client/src/locales/el.json b/app/client/src/locales/el.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/el.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/en.json b/app/client/src/locales/en.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/en.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/es.json b/app/client/src/locales/es.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/es.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/fa.json b/app/client/src/locales/fa.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/fa.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/fil.json b/app/client/src/locales/fil.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/fil.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/fr.json b/app/client/src/locales/fr.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/fr.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/he.json b/app/client/src/locales/he.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/he.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/hi.json b/app/client/src/locales/hi.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/hi.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/hr.json b/app/client/src/locales/hr.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/hr.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/hu.json b/app/client/src/locales/hu.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/hu.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/id.json b/app/client/src/locales/id.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/id.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/it.json b/app/client/src/locales/it.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/it.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/ko.json b/app/client/src/locales/ko.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/ko.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/pl.json b/app/client/src/locales/pl.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/pl.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/pt.json b/app/client/src/locales/pt.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/pt.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/ro.json b/app/client/src/locales/ro.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/ro.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/ru.json b/app/client/src/locales/ru.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/ru.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/tr.json b/app/client/src/locales/tr.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/tr.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/uk.json b/app/client/src/locales/uk.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/uk.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/locales/ur.json b/app/client/src/locales/ur.json new file mode 100644 index 0000000..5071360 --- /dev/null +++ b/app/client/src/locales/ur.json @@ -0,0 +1,112 @@ +{ + "Home": "Home", + "Browse": "Browse", + "Library": "Library", + "Tracks": "Tracks", + "Playlists": "Playlists", + "Albums": "Albums", + "Artists": "Artists", + "More": "More", + "Settings": "Settings", + "Downloads": "Downloads", + "Search or paste Deezer URL. Use / to quickly focus.": "Search or paste Deezer URL. Use \"/\" to quickly focus.", + "Play": "Play", + "Add to library": "Add to library", + "Download": "Download", + "fans": "fans", + "tracks": "tracks", + "Quality": "Quality", + "Estimated size:": "Estimated size:", + "Start downloading": "Start downloading", + "Cancel": "Cancel", + "Stream logging is disabled!": "Stream logging is disabled!", + "Enable it in settings for history to work properly.": "Enable it in settings for history to work properly.", + "History": "History", + "Create new playlist": "Create new playlist", + "TRACKS": "TRACKS", + "Sort by": "Sort by", + "Date Added": "Date Added", + "Name (A-Z)": "Name (A-Z)", + "Artist (A-Z)": "Artist (A-Z)", + "Album (A-Z)": "Album (A-Z)", + "Error loading lyrics or lyrics not found!": "Error loading lyrics or lyrics not found!", + "Create playlist": "Create playlist", + "Create": "Create", + "Add to playlist": "Add to playlist", + "Create new": "Create new", + "Remove": "Remove", + "Play next": "Play next", + "Add to queue": "Add to queue", + "Remove from library": "Remove from library", + "Remove from playlist": "Remove from playlist", + "Play track mix": "Play track mix", + "Go to": "Go to", + "Track Mix": "Track Mix", + "Duration": "Duration", + "Released": "Released", + "Disk": "Disk", + "albums": "albums", + "Play top": "Play top", + "Radio": "Radio", + "Show all albums": "Show all albums", + "Show all singles": "Show all singles", + "Show more": "Show more", + "Downloaded": "Downloaded", + "Queue": "Queue", + "Total": "Total", + "Stop": "Stop", + "Start": "Start", + "Show folder": "Show folder", + "Clear queue": "Clear queue", + "Playing from": "Playing from", + "Info": "Info", + "Lyrics": "Lyrics", + "Track number": "Track number", + "Disk number": "Disk number", + "Explicit": "Explicit", + "Source": "Source", + "ID": "ID", + "Error logging in!": "Error logging in!", + "Please try again later, or try another account.": "Please try again later, or try another account.", + "Logout": "Logout", + "Login using browser": "Login using browser", + "Please login using your Deezer account:": "Please login using your Deezer account:", + "...or paste your ARL/Token below:": "...or paste your ARL/Token below:", + "ARL/Token": "ARL/Token", + "Login": "Login", + "By using this program, you disagree with Deezer's ToS.": "By using this program, you disagree with Deezer's ToS.", + "Only in Electron version!": "Only in Electron version!", + "Search results for:": "Search results for:", + "Error loading data!": "Error loading data!", + "Try again later!": "Try again later!", + "Search": "Search", + "Streaming Quality": "Streaming Quality", + "Download Quality": "Download Quality", + "Downloads Directory": "Downloads Directory", + "Simultaneous downloads": "Simultaneous downloads", + "Always show download confirm dialog before downloading.": "Always show download confirm dialog before downloading.", + "Show download dialog": "Show download dialog", + "Create folders for artists": "Create folders for artists", + "Create folders for albums": "Create folders for albums", + "Download lyrics": "Download lyrics", + "Variables": "Variables", + "UI": "UI", + "Show autocomplete in search": "Show autocomplete in search", + "Integrations": "Integrations", + "This allows listening history, flow and recommendations to work properly.": "This allows listening history, flow and recommendations to work properly.", + "Log track listens to Deezer": "Log track listens to Deezer", + "Connect your LastFM account to allow scrobbling.": "Connect your LastFM account to allow scrobbling.", + "Login with LastFM": "Login with LastFM", + "Disconnect LastFM": "Disconnect LastFM", + "Requires restart to apply!": "Requires restart to apply!", + "Enable Discord Rich Presence, requires restart to toggle!": "Enable Discord Rich Presence, requires restart to toggle!", + "Discord Rich Presence": "Discord Rich Presence", + "Enable Discord join button for syncing tracks, requires restart to toggle!": "Enable Discord join button for syncing tracks, requires restart to toggle!", + "Discord Join Button": "Discord Join Button", + "Other": "Other", + "Minimize to tray": "Minimize to tray", + "Don't minimize to tray": "Don't minimize to tray", + "Close on exit": "Close on exit", + "Settings saved!": "Settings saved!", + "Available only in Electron version!": "Available only in Electron version!" +} \ No newline at end of file diff --git a/app/client/src/main.js b/app/client/src/main.js index a19793f..16210bc 100644 --- a/app/client/src/main.js +++ b/app/client/src/main.js @@ -5,6 +5,7 @@ import vuetify from './js/vuetify'; import axios from 'axios'; import VueEsc from 'vue-esc'; import VueSocketIO from 'vue-socket.io'; +import i18n from './js/i18n'; //Globals let ipcRenderer; @@ -52,7 +53,8 @@ Vue.prototype.$filesize = (bytes) => { //Sockets Vue.use(new VueSocketIO({ - connection: window.location.origin + connection: window.location.toString(), + options: {path: '/socket'} })); Vue.config.productionTip = false; @@ -66,10 +68,7 @@ new Vue({ authorized: false, loadingPromise: null, - //Downloads - downloading: false, - downloads: [], - download: null, + downloads: {}, //Player track: null, @@ -111,6 +110,7 @@ new Vue({ //Used to prevent double listen logging logListenId: null }, + methods: { // PLAYBACK METHODS isPlaying() { @@ -199,7 +199,12 @@ new Vue({ if (this.audio) this.audio.currentTime = 0; //Load track meta - this.playbackInfo = await this.loadPlaybackInfo(track.streamUrl, track.duration); + let playbackInfo = await this.loadPlaybackInfo(track.streamUrl, track.duration); + if (!playbackInfo) { + this.skipNext(); + return; + } + this.playbackInfo = playbackInfo; //Stream URL let url = `${window.location.origin}${this.playbackInfo.url}`; @@ -290,6 +295,7 @@ new Vue({ //Update media session with current track metadata updateMediaSession() { if (!this.track || !('mediaSession' in navigator)) return; + // eslint-disable-next-line no-undef navigator.mediaSession.metadata = new MediaMetadata({ title: this.track.title, @@ -315,11 +321,25 @@ new Vue({ //Get playback info let quality = this.settings.streamQuality; let infoUrl = `/streaminfo/${streamUrl}?q=${quality}`; - let res = await this.$axios.get(infoUrl); + let res; + try { + res = await this.$axios.get(infoUrl); + } catch (_) { + return null; + } + let info = res.data; - //Calculate flac bitrate - if (!info.quality.includes('kbps')) { - info.quality = Math.round((parseInt(info.quality, 10)*8) / duration) + 'kbps'; + //Generate qualityString + switch (info.quality) { + case 9: + info.qualityString = 'FLAC ' + Math.round((info.size*8) / duration) + 'kbps'; + break; + case 3: + info.qualityString = 'MP3 320kbps'; + break; + case 1: + info.qualityString = 'MP3 128kbps'; + break; } return info; }, @@ -341,6 +361,10 @@ new Vue({ //Load meta this.gapless.track = this.queue.data[this.queue.index + 1]; let info = await this.loadPlaybackInfo(this.gapless.track.streamUrl, this.gapless.track.duration); + if (!info) { + this.resetGapless(); + if (this.gapless.promise) resolve(); + } this.gapless.info = info this.gapless.audio = new Audio(`${window.location.origin}${info.url}`); @@ -382,12 +406,12 @@ new Vue({ //Get downloads from server async getDownloads() { let res = await this.$axios.get('/downloads'); - this.downloading = res.data.downloading; - this.downloads = res.data.downloads; + if (res.data) + this.downloads = res.data; }, //Start stop downloading async toggleDownload() { - if (this.downloading) { + if (this.downloads.downloading) { await this.$axios.delete('/download'); } else { await this.$axios.put('/download'); @@ -411,8 +435,12 @@ new Vue({ //Send state update to integrations async updateState() { //Wait for duration - if (this.state == 2 && (this.duration() == null || isNaN(this.duration()))) - await new Promise((res) => setTimeout(res, 1000)); + if (this.state == 2 && (this.duration() == null || isNaN(this.duration()))) { + setTimeout(() => { + this.updateState(); + }, 500); + return; + } this.$socket.emit('stateChange', { position: this.position, duration: this.duration(), @@ -424,14 +452,20 @@ new Vue({ if (this.settings.electron) { ipcRenderer.send('playing', this.state == 2); } + }, + updateLanguage(l) { + i18n.locale = l; } }, + async created() { //Load settings, create promise so `/login` can await it let r; this.loadingPromise = new Promise((resolve) => r = resolve); let res = await this.$axios.get('/settings'); this.settings = res.data; + this.$vuetify.theme.themes.dark.primary = this.settings.primaryColor; + i18n.locale = this.settings.language; this.volume = this.settings.volume; //Restore playback data @@ -480,17 +514,17 @@ new Vue({ } //Get downloads - this.getDownloads(); + await this.getDownloads(); //Sockets + //Queue change this.sockets.subscribe('downloads', (data) => { - this.downloading = data.downloading; - this.downloads = data.downloads; + this.downloads = data; }); //Current download change - this.sockets.subscribe('download', (data) => { - this.download = data; + this.sockets.subscribe('currentlyDownloading', (data) => { + this.downloads.threads = data; }); //Play at offset (for integrations) this.sockets.subscribe('playOffset', async (data) => { @@ -501,6 +535,7 @@ new Vue({ r(); }, + mounted() { //Save settings on unload window.addEventListener('beforeunload', () => { @@ -548,6 +583,7 @@ new Vue({ } }); }, + watch: { //Watch state for integrations state() { @@ -558,5 +594,6 @@ new Vue({ router, vuetify, + i18n, render: function (h) { return h(App) } }).$mount('#app'); diff --git a/app/client/src/views/AlbumPage.vue b/app/client/src/views/AlbumPage.vue index 21e358f..6c32b5b 100644 --- a/app/client/src/views/AlbumPage.vue +++ b/app/client/src/views/AlbumPage.vue @@ -16,24 +16,24 @@

{{album.title}}

{{album.artistString}}

- {{album.tracks.length}} tracks
- Duration: {{duration}}
+ {{album.tracks.length}} {{$t("tracks")}}
+ {{$t("Duration")}}: {{duration}}
{{$numberString(album.fans)}} fans
- Released: {{album.releaseDate}}
+ {{$t("Released")}}: {{album.releaseDate}}
mdi-play - Play + {{$t("Play")}} mdi-heart - Library + {{$t("Library")}} mdi-download - Download + {{$t("Download")}}
@@ -48,7 +48,7 @@ v-if='index == 0 || track.diskNumber != album.tracks[index-1].diskNumber' class='mx-4 text-subtitle-1' > - Disk {{track.diskNumber}} + {{$t("Disk")}} {{track.diskNumber}}
diff --git a/app/client/src/views/ArtistPage.vue b/app/client/src/views/ArtistPage.vue index 36b3f97..7cb5b23 100644 --- a/app/client/src/views/ArtistPage.vue +++ b/app/client/src/views/ArtistPage.vue @@ -16,18 +16,22 @@

{{artist.name}}

- {{artist.albumCount}} albums
- {{$numberString(artist.fans)}} fans
+ {{artist.albumCount}} {{$t("albums")}}
+ {{$numberString(artist.fans)}} {{$t("fans")}}
mdi-play - Play top + {{$t("Play top")}} mdi-heart - Library + {{$t("Library")}} + + + mdi-radio + {{$t("Radio")}}
@@ -67,7 +71,7 @@ - Show all albums + {{$t("Show all albums")}}
@@ -91,7 +95,7 @@ - Show all singles + {{$t('Show all singles')}} @@ -179,6 +183,19 @@ export default { this.allSingles = true; this.loadMoreAlbums(); }, + async radio() { + //Load + let res = await this.$axios.get('/smartradio/' + this.artist.id); + if (res.data) { + this.$root.queue.source = { + text: this.artist.name, + source: 'radio', + data: this.artist.id + }; + this.$root.replaceQueue(res.data); + this.$root.playIndex(0); + } + }, //On scroll load more albums scroll(event) { if (!this.allAlbums && !this.allSingles) return; diff --git a/app/client/src/views/DeezerPage.vue b/app/client/src/views/DeezerPage.vue index dd1592e..b48b542 100644 --- a/app/client/src/views/DeezerPage.vue +++ b/app/client/src/views/DeezerPage.vue @@ -23,7 +23,7 @@
- Show more + {{$t("Show more")}}
diff --git a/app/client/src/views/DownloadsPage.vue b/app/client/src/views/DownloadsPage.vue index 6957cc2..e175c48 100644 --- a/app/client/src/views/DownloadsPage.vue +++ b/app/client/src/views/DownloadsPage.vue @@ -1,51 +1,51 @@