diff --git a/_scripts/webpack.web.config.js b/_scripts/webpack.web.config.js index 0716f1b3e9c6..35e59c37ed49 100644 --- a/_scripts/webpack.web.config.js +++ b/_scripts/webpack.web.config.js @@ -107,7 +107,8 @@ const config = { fs: 'empty', net: 'empty', tls: 'empty', - child_process: 'empty' + child_process: 'empty', + dns: 'empty' }, plugins: [ // new WriteFilePlugin(), diff --git a/package-lock.json b/package-lock.json index f10e39126d3a..87a0336730c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "freetube", - "version": "0.11.1", + "version": "0.11.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -1287,19 +1287,20 @@ } }, "@electron/get": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.2.tgz", - "integrity": "sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.12.3.tgz", + "integrity": "sha512-NFwSnVZQK7dhOYF1NQCt+HGqgL1aNdj0LUSx75uCqnZJqyiWCVdAMFV4b4/kC8HjUJAnsvdSEmjEt4G2qNQ9+Q==", "dev": true, "requires": { "debug": "^4.1.1", "env-paths": "^2.2.0", + "filenamify": "^4.1.0", "fs-extra": "^8.1.0", "global-agent": "^2.0.2", "global-tunnel-ng": "^2.7.1", "got": "^9.6.0", "progress": "^2.0.3", - "sanitize-filename": "^1.6.2", + "semver": "^6.2.0", "sumchecker": "^3.0.1" }, "dependencies": { @@ -1317,6 +1318,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -1387,9 +1394,9 @@ } }, "@eslint/eslintrc": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz", - "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", + "integrity": "sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -1399,7 +1406,7 @@ "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", - "lodash": "^4.17.19", + "lodash": "^4.17.20", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, @@ -1957,28 +1964,28 @@ } }, "@nodelib/fs.scandir": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", - "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.stat": "2.0.4", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", - "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.3", + "@nodelib/fs.scandir": "2.1.4", "fastq": "^1.6.0" } }, @@ -2041,6 +2048,11 @@ "defer-to-connect": "^1.0.1" } }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, "@types/anymatch": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", @@ -2316,13 +2328,13 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.13.0.tgz", - "integrity": "sha512-ygqDUm+BUPvrr0jrXqoteMqmIaZ/bixYOc3A4BRwzEPTZPi6E+n44rzNZWaB0YvtukgP+aoj0i/fyx7FkM2p1w==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.14.0.tgz", + "integrity": "sha512-IJ5e2W7uFNfg4qh9eHkHRUCbgZ8VKtGwD07kannJvM5t/GU8P8+24NX8gi3Hf5jST5oWPY8kyV1s/WtfiZ4+Ww==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.13.0", - "@typescript-eslint/scope-manager": "4.13.0", + "@typescript-eslint/experimental-utils": "4.14.0", + "@typescript-eslint/scope-manager": "4.14.0", "debug": "^4.1.1", "functional-red-black-tree": "^1.0.1", "lodash": "^4.17.15", @@ -2358,28 +2370,28 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.13.0.tgz", - "integrity": "sha512-/ZsuWmqagOzNkx30VWYV3MNB/Re/CGv/7EzlqZo5RegBN8tMuPaBgNK6vPBCQA8tcYrbsrTdbx3ixMRRKEEGVw==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.14.0.tgz", + "integrity": "sha512-6i6eAoiPlXMKRbXzvoQD5Yn9L7k9ezzGRvzC/x1V3650rUk3c3AOjQyGYyF9BDxQQDK2ElmKOZRD0CbtdkMzQQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.13.0", - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/typescript-estree": "4.13.0", + "@typescript-eslint/scope-manager": "4.14.0", + "@typescript-eslint/types": "4.14.0", + "@typescript-eslint/typescript-estree": "4.14.0", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" } }, "@typescript-eslint/parser": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.13.0.tgz", - "integrity": "sha512-KO0J5SRF08pMXzq9+abyHnaGQgUJZ3Z3ax+pmqz9vl81JxmTTOUfQmq7/4awVfq09b6C4owNlOgOwp61pYRBSg==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.14.0.tgz", + "integrity": "sha512-sUDeuCjBU+ZF3Lzw0hphTyScmDDJ5QVkyE21pRoBo8iDl7WBtVFS+WDN3blY1CH3SBt7EmYCw6wfmJjF0l/uYg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.13.0", - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/typescript-estree": "4.13.0", + "@typescript-eslint/scope-manager": "4.14.0", + "@typescript-eslint/types": "4.14.0", + "@typescript-eslint/typescript-estree": "4.14.0", "debug": "^4.1.1" }, "dependencies": { @@ -2401,29 +2413,29 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.13.0.tgz", - "integrity": "sha512-UpK7YLG2JlTp/9G4CHe7GxOwd93RBf3aHO5L+pfjIrhtBvZjHKbMhBXTIQNkbz7HZ9XOe++yKrXutYm5KmjWgQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.14.0.tgz", + "integrity": "sha512-/J+LlRMdbPh4RdL4hfP1eCwHN5bAhFAGOTsvE6SxsrM/47XQiPSgF5MDgLyp/i9kbZV9Lx80DW0OpPkzL+uf8Q==", "dev": true, "requires": { - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/visitor-keys": "4.13.0" + "@typescript-eslint/types": "4.14.0", + "@typescript-eslint/visitor-keys": "4.14.0" } }, "@typescript-eslint/types": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.13.0.tgz", - "integrity": "sha512-/+aPaq163oX+ObOG00M0t9tKkOgdv9lq0IQv/y4SqGkAXmhFmCfgsELV7kOCTb2vVU5VOmVwXBXJTDr353C1rQ==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.14.0.tgz", + "integrity": "sha512-VsQE4VvpldHrTFuVPY1ZnHn/Txw6cZGjL48e+iBxTi2ksa9DmebKjAeFmTVAYoSkTk7gjA7UqJ7pIsyifTsI4A==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.13.0.tgz", - "integrity": "sha512-9A0/DFZZLlGXn5XA349dWQFwPZxcyYyCFX5X88nWs2uachRDwGeyPz46oTsm9ZJE66EALvEns1lvBwa4d9QxMg==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.14.0.tgz", + "integrity": "sha512-wRjZ5qLao+bvS2F7pX4qi2oLcOONIB+ru8RGBieDptq/SudYwshveORwCVU4/yMAd4GK7Fsf8Uq1tjV838erag==", "dev": true, "requires": { - "@typescript-eslint/types": "4.13.0", - "@typescript-eslint/visitor-keys": "4.13.0", + "@typescript-eslint/types": "4.14.0", + "@typescript-eslint/visitor-keys": "4.14.0", "debug": "^4.1.1", "globby": "^11.0.1", "is-glob": "^4.0.1", @@ -2459,12 +2471,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.13.0.tgz", - "integrity": "sha512-6RoxWK05PAibukE7jElqAtNMq+RWZyqJ6Q/GdIxaiUj2Ept8jh8+FUVlbq9WxMYxkmEOPvCE5cRSyupMpwW31g==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.14.0.tgz", + "integrity": "sha512-MeHHzUyRI50DuiPgV9+LxcM52FCJFYjJiWHtXlbyC27b80mfOwKeiKI+MHOTEpcpfmoPFm/vvQS88bYIx6PZTA==", "dev": true, "requires": { - "@typescript-eslint/types": "4.13.0", + "@typescript-eslint/types": "4.14.0", "eslint-visitor-keys": "^2.0.0" } }, @@ -2848,6 +2860,29 @@ "pkcs7": "^1.0.4" } }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -7102,13 +7137,13 @@ } }, "eslint": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.17.0.tgz", - "integrity": "sha512-zJk08MiBgwuGoxes5sSQhOtibZ75pz0J35XTRlZOk9xMffhpA9BTbQZxoXZzOl5zMbleShbGwtw+1kGferfFwQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.18.0.tgz", + "integrity": "sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@eslint/eslintrc": "^0.2.2", + "@eslint/eslintrc": "^0.3.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -7132,7 +7167,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.19", + "lodash": "^4.17.20", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -7250,9 +7285,9 @@ } }, "eslint-config-prettier": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", - "integrity": "sha512-9sm5/PxaFG7qNJvJzTROMM1Bk1ozXVTKI0buKOyb0Bsr1hrwi0H/TzxF/COtf1uxikIK8SwhX7K6zg78jAzbeA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", + "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", "dev": true }, "eslint-config-standard": { @@ -7992,9 +8027,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", - "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -8017,9 +8052,9 @@ "dev": true }, "fastq": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", - "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", + "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -8115,6 +8150,23 @@ "minimatch": "^3.0.4" } }, + "filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", + "dev": true + }, + "filenamify": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.2.0.tgz", + "integrity": "sha512-pkgE+4p7N1n7QieOopmn3TqJaefjdWXwEkj2XLZJLKfOgcQKkn11ahvGNgTD8mLggexLiDFQxeTs14xVU22XPA==", + "dev": true, + "requires": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.1", + "trim-repeated": "^1.0.0" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -8298,9 +8350,9 @@ } }, "flatted": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", - "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", "dev": true }, "flush-write-stream": { @@ -8666,9 +8718,9 @@ }, "dependencies": { "core-js": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.2.tgz", - "integrity": "sha512-FfApuSRgrR6G5s58casCBd9M2k+4ikuu4wbW6pJyYU7bd9zvFc9qf7vr5xmrZOhT9nn+8uwlH1oRR9jTnFoA3A==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.3.tgz", + "integrity": "sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q==", "dev": true, "optional": true }, @@ -8986,8 +9038,7 @@ "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, "highlight.js": { "version": "9.18.3", @@ -9139,11 +9190,6 @@ "util.promisify": "1.0.0" } }, - "html2json": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html2json/-/html2json-1.0.2.tgz", - "integrity": "sha1-ydbSAvplQCOGwgKzRc9RvOgO0e8=" - }, "htmlparser2": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", @@ -9236,6 +9282,31 @@ "requires-port": "^1.0.0" } }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "http-proxy-middleware": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", @@ -9379,6 +9450,30 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", @@ -9387,7 +9482,7 @@ }, "humanize-plus": { "version": "1.8.2", - "resolved": "http://registry.npmjs.org/humanize-plus/-/humanize-plus-1.8.2.tgz", + "resolved": "https://registry.npmjs.org/humanize-plus/-/humanize-plus-1.8.2.tgz", "integrity": "sha1-pls0RZrWNnrbs3B6gqPJ+RYWcDA=", "dev": true }, @@ -9572,8 +9667,7 @@ "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" }, "ip-regex": { "version": "2.1.0", @@ -12510,6 +12604,14 @@ } } }, + "node-html-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-2.0.2.tgz", + "integrity": "sha512-N2000Ho9dkabvRZcyiwm6zOpdiAzxAxcJ0Z0WNoh/yXHG0YCuiK2WpNQfN+9vheLNY/h/It11Gk7uwT4QTfk9Q==", + "requires": { + "he": "1.2.0" + } + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -14703,9 +14805,9 @@ "dev": true }, "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", "dev": true }, "run-queue": { @@ -14740,7 +14842,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -14903,9 +15005,9 @@ } }, "sass": { - "version": "1.32.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.4.tgz", - "integrity": "sha512-N0BT0PI/t3+gD8jKa83zJJUb7ssfQnRRfqN+GIErokW6U4guBpfYl8qYB+OFLEho+QvnV5ZH1R9qhUC/Z2Ch9w==", + "version": "1.32.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.5.tgz", + "integrity": "sha512-kU1yJ5zUAmPxr7f3q0YXTAd1oZjSR1g3tYyv+xu0HZSl5JiNOaE987eiz7wCUvbm4I9fGWGU2TgApTtcP4GMNQ==", "dev": true, "requires": { "chokidar": ">=2.0.0 <4.0.0" @@ -15267,6 +15369,11 @@ "is-fullwidth-code-point": "^3.0.0" } }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==" + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -15425,6 +15532,40 @@ } } }, + "socks": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.5.1.tgz", + "integrity": "sha512-oZCsJJxapULAYJaEYBSzMcz8m3jqgGrHaGhkmU/o/PQfFWYWxkAaA0UMGImb6s6tEXfKi959X6VJjMMQ3P6TTQ==", + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz", + "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==", + "requires": { + "agent-base": "6", + "debug": "4", + "socks": "^2.3.3" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", @@ -15923,6 +16064,15 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "style-loader": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", @@ -16491,6 +16641,15 @@ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.2" + } + }, "truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -17228,9 +17387,9 @@ "integrity": "sha1-55jgMYC4kzU53v4x+S5TuSQrlAY=" }, "vue-eslint-parser": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.3.0.tgz", - "integrity": "sha512-n5PJKZbyspD0+8LnaZgpEvNCrjQx1DyDHw8JdWwoxhhC+yRip4TAvSDpXGf9SWX6b0umeB5aR61gwUo6NVvFxw==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.4.1.tgz", + "integrity": "sha512-AFvhdxpFvliYq1xt/biNBslTHE/zbEvSnr1qfHA/KxRIpErmEDrQZlQnvEexednRHmLfDNOMuDYwZL5xkLzIXQ==", "dev": true, "requires": { "debug": "^4.1.1", @@ -17288,9 +17447,9 @@ "dev": true }, "vue-i18n": { - "version": "8.22.3", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.22.3.tgz", - "integrity": "sha512-Vhyx7sZEmmW/aZLkzSlXei08Rv3hTondx4J9wbOjnThocTIK1QiXV6QRdT4BTnhT24JixDSf6kGkxqCXSaJ3Jw==" + "version": "8.22.4", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.22.4.tgz", + "integrity": "sha512-XLI5s0AdqMP2Lf4I4CmdmOq8kjb5DDFGR77wAuxCfpEuYSfhTRyyx6MetgZMiL6Lxa0DasjBOiOcciU3NkL3/Q==" }, "vue-loader": { "version": "15.9.6", @@ -19076,12 +19235,12 @@ } }, "yt-comment-scraper": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/yt-comment-scraper/-/yt-comment-scraper-1.3.11.tgz", - "integrity": "sha512-F7a1/BAjASsX3MheAqO1uvY0sPfstLKmkHETiFyDe3Hp+qUMyniuPmAvXrZPOanvBHyb6sH5+d3wVj/S9dD/ug==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yt-comment-scraper/-/yt-comment-scraper-2.0.0.tgz", + "integrity": "sha512-goa9Z5REPXRKddKO6MJUzaa/cBgdQPj/akIGbyb1R5KnOgl4bLy6d4nD1pVUhLkP0Z8aEqwJAMmYpPBjeXTOIg==", "requires": { "axios": "^0.21.1", - "html2json": "^1.0.2" + "node-html-parser": "^2.0.2" }, "dependencies": { "axios": { @@ -19127,11 +19286,26 @@ } }, "yt-trending-scraper": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/yt-trending-scraper/-/yt-trending-scraper-1.0.4.tgz", - "integrity": "sha512-RWNHDP0Gx1cKBGy0229jG8XzunsGXF4ZPG1gOtbFF54oF+smahCeWmsuYlmzr+5MwTWzq2s968spTGVgpkNjTA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/yt-trending-scraper/-/yt-trending-scraper-1.1.0.tgz", + "integrity": "sha512-9QCSbzKFMTHyvj9y8oRnRZcLH9aVK/8GcPWSAiayfOfswXDnLZYONqavy/04kz/nXZfZQeuIGMsxCW2RxokWlQ==", "requires": { - "axios": "^0.19.2" + "axios": "^0.21.1" + }, + "dependencies": { + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "follow-redirects": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", + "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" + } } }, "yt-xml2vtt": { @@ -19140,9 +19314,9 @@ "integrity": "sha512-4ZzqHIUfdPFa0Xb+8M3vsbokXooOhQuFuXa8bw4CJ5V0xWjRA/CPlZ3u0VTYoce4sUmMgoOVN7Xcj8NpUNujXA==" }, "ytdl-core": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.4.3.tgz", - "integrity": "sha512-0GexY2dMk0pvIE0UAB5GPiyaNjiawqDi5eUCUHW7CP1ZNyEco8Lct8/3AsI6aO0EQLGK774ocDvWxOE7W0qrTg==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.4.4.tgz", + "integrity": "sha512-/IFJTM5RjN20q6RVaE/9rv9tKoBtx95lKZCI/pUPDiDzu9fXyuPbkVzEQJmsYEwzi0zdv4d6iJy0gHWz49o6mw==", "requires": { "m3u8stream": "^0.8.3", "miniget": "^4.0.0", @@ -19186,9 +19360,9 @@ } }, "ytsr": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ytsr/-/ytsr-3.2.1.tgz", - "integrity": "sha512-iN2woG5bfXiAWs9Tv6MPVGx3f1zdpeshyevGAbm0ggCYLmOnSNIA3lkgqlkfa0CH5WKIB/yjwRPU1hc49AUN+g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/ytsr/-/ytsr-3.2.2.tgz", + "integrity": "sha512-0Yt00R/LfP2tlPos6xCLazdkSJYfTD15VY/2oqbZvS0Ym8+4rMyXRg0AWJlmCJIhPsTPzc1nDjZvhDo/6A0/WA==", "requires": { "miniget": "^4.1.0" }, diff --git a/package.json b/package.json index 15ca17008cff..26b8dc166374 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,8 @@ "bulma-pro": "^0.2.0", "dateformat": "^4.4.1", "electron-context-menu": "^2.4.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", "jquery": "^3.5.1", "js-yaml": "^4.0.0", "lodash.debounce": "^4.0.8", @@ -27,6 +29,7 @@ "nedb": "^1.8.0", "opml-to-json": "1.0.1", "rss-parser": "^3.10.0", + "socks-proxy-agent": "^5.0.0", "video.js": "7.10.2", "videojs-abloop": "^1.2.0", "videojs-contrib-quality-levels": "^2.0.9", @@ -36,7 +39,7 @@ "videojs-vtt-thumbnails-freetube": "0.0.15", "vue": "^2.6.12", "vue-electron": "^1.0.6", - "vue-i18n": "^8.22.3", + "vue-i18n": "^8.22.4", "vue-observe-visibility": "^1.0.0", "vue-router": "^3.4.9", "vuex": "^3.6.0", @@ -44,13 +47,13 @@ "youtube-chat": "^1.1.0", "youtube-suggest": "^1.1.0", "yt-channel-info": "^1.2.0", - "yt-comment-scraper": "^1.3.11", - "yt-dash-manifest-generator": "^1.1.0", - "yt-trending-scraper": "1.0.4", + "yt-comment-scraper": "^2.0.0", + "yt-dash-manifest-generator": "1.1.0", + "yt-trending-scraper": "1.1.0", "yt-xml2vtt": "^1.2.0", - "ytdl-core": "^4.4.3", + "ytdl-core": "^4.4.4", "ytpl": "^2.0.4", - "ytsr": "^3.2.1" + "ytsr": "^3.2.2" }, "description": "A private YouTube client", "devDependencies": { @@ -59,21 +62,21 @@ "@babel/plugin-proposal-object-rest-spread": "^7.12.1", "@babel/preset-env": "^7.12.11", "@babel/preset-typescript": "^7.12.7", - "@typescript-eslint/eslint-plugin": "^4.13.0", - "@typescript-eslint/parser": "^4.13.0", + "@typescript-eslint/eslint-plugin": "^4.14.0", + "@typescript-eslint/parser": "^4.14.0", "acorn": "^8.0.4", "babel-eslint": "^10.1.0", "babel-loader": "^8.2.2", "copy-webpack-plugin": "6.4.0", "css-loader": "^5.0.1", "devtron": "^1.4.0", - "electron": "^11.1.1", + "electron": "11.1.1", "electron-builder": "^22.9.1", "electron-builder-squirrel-windows": "^22.10.4", "electron-debug": "^3.2.0", "electron-rebuild": "^2.3.4", - "eslint": "^7.17.0", - "eslint-config-prettier": "^7.1.0", + "eslint": "^7.18.0", + "eslint-config-prettier": "^7.2.0", "eslint-config-standard": "^16.0.2", "eslint-plugin-import": "^2.22.1", "eslint-plugin-node": "^11.1.0", @@ -81,7 +84,7 @@ "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^5.0.0", "eslint-plugin-vue": "^7.4.1", - "fast-glob": "^3.2.4", + "fast-glob": "^3.2.5", "file-loader": "^6.2.0", "html-webpack-plugin": "^4.5.1", "jest": "^26.6.3", @@ -90,14 +93,14 @@ "node-loader": "^1.0.2", "npm-run-all": "^4.1.5", "prettier": "^2.2.1", - "sass": "^1.32.4", + "sass": "^1.32.5", "sass-loader": "^10.1.1", "style-loader": "^2.0.0", "tree-kill": "1.2.2", "typescript": "^4.1.3", "url-loader": "^4.1.1", "vue-devtools": "^5.1.4", - "vue-eslint-parser": "^7.3.0", + "vue-eslint-parser": "^7.4.1", "vue-loader": "^15.9.6", "vue-style-loader": "^4.1.2", "vue-template-compiler": "^2.6.12", @@ -143,5 +146,5 @@ "test": "run-s rebuild:node pack:workers jest", "test:watch": "run-s rebuild:node pack:workers jest:watch" }, - "version": "0.11.1" + "version": "0.11.2" } diff --git a/src/renderer/components/data-settings/data-settings.js b/src/renderer/components/data-settings/data-settings.js index 975543a31eee..1e89a684e929 100644 --- a/src/renderer/components/data-settings/data-settings.js +++ b/src/renderer/components/data-settings/data-settings.js @@ -8,7 +8,7 @@ import FtPrompt from '../ft-prompt/ft-prompt.vue' import { remote } from 'electron' import fs from 'fs' -import opmlToJson from 'opml-to-json' +import { opmlToJSON } from 'opml-to-json' import ytch from 'yt-channel-info' const app = remote.app @@ -357,17 +357,7 @@ export default Vue.extend({ return } - opmlToJson(data, async (err, json) => { - if (err) { - console.log(err) - console.log('error reading') - const message = this.$t('Settings.Data Settings.Invalid subscriptions file') - this.showToast({ - message: `${message}: ${err}` - }) - return - } - + opmlToJSON(data).then((json) => { let feedData = json.children[0].children if (typeof feedData === 'undefined') { @@ -442,6 +432,13 @@ export default Vue.extend({ this.updateShowProgressBar(false) } }) + }).catch((err) => { + console.log(err) + console.log('error reading') + const message = this.$t('Settings.Data Settings.Invalid subscriptions file') + this.showToast({ + message: `${message}: ${err}` + }) }) }) }) diff --git a/src/renderer/components/ft-video-player/ft-video-player.js b/src/renderer/components/ft-video-player/ft-video-player.js index 98b76249f07c..4009c081c606 100644 --- a/src/renderer/components/ft-video-player/ft-video-player.js +++ b/src/renderer/components/ft-video-player/ft-video-player.js @@ -76,6 +76,8 @@ export default Vue.extend({ maxFramerate: 0, activeSourceList: [], mouseTimeout: null, + touchTimeout: null, + lastTouchTime: null, dataSetup: { fluid: true, nativeTextTracks: false, @@ -116,7 +118,6 @@ export default Vue.extend({ 2.25, 2.5, 2.75, - 2.75, 3 ] } @@ -284,7 +285,7 @@ export default Vue.extend({ return } - if (videoWidth < videoHeight) { + if ((videoWidth - videoHeight) <= 240) { this.player.fluid(false) this.player.aspectRatio('16:9') } @@ -719,6 +720,25 @@ export default Vue.extend({ } }, + handleTouchStart: function (event) { + const v = this + this.touchPauseTimeout = setTimeout(() => { + v.togglePlayPause() + }, 1000) + + const touchTime = new Date() + + if (this.lastTouchTime !== null && (touchTime.getTime() - this.lastTouchTime.getTime()) < 250) { + this.toggleFullscreen() + } + + this.lastTouchTime = touchTime + }, + + handleTouchEnd: function (event) { + clearTimeout(this.touchPauseTimeout) + }, + keyboardShortcutHandler: function (event) { const activeInputs = $('.ft-input') diff --git a/src/renderer/components/ft-video-player/ft-video-player.vue b/src/renderer/components/ft-video-player/ft-video-player.vue index 0827a643f10d..06674ac62668 100644 --- a/src/renderer/components/ft-video-player/ft-video-player.vue +++ b/src/renderer/components/ft-video-player/ft-video-player.vue @@ -7,6 +7,8 @@ controls preload="auto" :data-setup="JSON.stringify(dataSetup)" + @touchstart="handleTouchStart" + @touchend="handleTouchEnd" > { console.log(response) const instances = response.filter((instance) => { diff --git a/src/renderer/components/general-settings/general-settings.vue b/src/renderer/components/general-settings/general-settings.vue index 08cfa2fab5fa..1f3499e9d1a3 100644 --- a/src/renderer/components/general-settings/general-settings.vue +++ b/src/renderer/components/general-settings/general-settings.vue @@ -97,6 +97,13 @@ @input="handleInvidiousInstanceInput" /> + + + {{ $t('Settings.General Settings.View all Invidious instance information') }} + + diff --git a/src/renderer/components/watch-video-comments/watch-video-comments.js b/src/renderer/components/watch-video-comments/watch-video-comments.js index 9093dac01c6a..da403115f57a 100644 --- a/src/renderer/components/watch-video-comments/watch-video-comments.js +++ b/src/renderer/components/watch-video-comments/watch-video-comments.js @@ -5,10 +5,7 @@ import FtLoader from '../../components/ft-loader/ft-loader.vue' import FtSelect from '../../components/ft-select/ft-select.vue' import FtTimestampCatcher from '../../components/ft-timestamp-catcher/ft-timestamp-catcher.vue' import autolinker from 'autolinker' -import { fork } from 'child_process' -import path from 'path' -// eslint-disable-next-line -import commentControllerRelativePath from 'file-loader!../../../process/comment-module-controller.js' +import ytcm from 'yt-comment-scraper' export default Vue.extend({ name: 'WatchVideoComments', @@ -93,8 +90,9 @@ export default Vue.extend({ this.sortNewest = !this.sortNewest switch (this.backendPreference) { case 'local': - console.log('In handle') - this.sortingChanged = true + this.isLoading = true + this.commentData = [] + this.nextPageToken = undefined this.getCommentDataLocal() break case 'invidious': @@ -122,7 +120,6 @@ export default Vue.extend({ this.showToast({ message: this.$t('Comments.There are no more comments for this video') }) - this.getCommentData() } else { this.getCommentData() } @@ -144,90 +141,72 @@ export default Vue.extend({ }, getCommentDataLocal: function () { - // we need the path from the working directory to fork correctly - if (this.commentProcess === null) { - let modulePath - if (this.isDev) { - modulePath = '../../../process/comment-module-controller.js' - } else { - modulePath = commentControllerRelativePath - } + const payload = { + videoId: this.id, + setCookie: false, + sortByNewest: this.sortNewest, + continuation: this.nextPageToken ? this.nextPageToken : undefined + } - this.commentProcess = fork(path.join(__dirname, modulePath), ['args'], { - stdio: ['pipe', 'pipe', 'pipe', 'ipc'] - }) + ytcm.getComments(payload).then((response) => { + console.log(response) + const commentData = response.comments.map((comment) => { + comment.showReplies = false + comment.dataType = 'local' + this.toLocalePublicationString({ + publishText: (comment.time + ' ago'), + templateString: this.$t('Video.Publicationtemplate'), + timeStrings: this.$t('Video.Published'), + liveStreamString: this.$t('Video.Watching'), + upcomingString: this.$t('Video.Published.Upcoming'), + isLive: false, + isUpcoming: false, + isRSS: false + }).then((data) => { + comment.time = data + }).catch((error) => { + console.error(error) + }) + if (this.hideCommentLikes) { + comment.likes = null + } + comment.text = autolinker.link(comment.text) - this.commentProcess.on('message', (msg) => { - if (msg.error === null) { - const commentJSON = JSON.parse(msg.comments) - if (commentJSON === null) { - this.showToast({ - message: this.$t('Comments.No more comments available'), - time: 7000, - action: () => { - } - }) - this.isLoading = false - } else { - // console.log(msg.comments) - const commentData = commentJSON.map((comment) => { - comment.showReplies = false - comment.dataType = 'local' - this.toLocalePublicationString({ - publishText: (comment.time + ' ago'), - templateString: this.$t('Video.Publicationtemplate'), - timeStrings: this.$t('Video.Published'), - liveStreamString: this.$t('Video.Watching'), - upcomingString: this.$t('Video.Published.Upcoming'), - isLive: false, - isUpcoming: false, - isRSS: false - }).then((data) => { - comment.time = data - }).catch((error) => { - console.error(error) - }) - if (this.hideCommentLikes) { - comment.likes = null - } - comment.text = autolinker.link(comment.text) - comment.replies.forEach((reply) => { - reply.text = autolinker.link(reply.text) - }) - return comment - }) - if (this.sortingChanged) { - this.commentData = [] - this.sortingChanged = false - } - this.commentData = this.commentData.concat(commentData) - this.isLoading = false - this.showComments = true - this.nextPageToken = '' - } - } else { - console.log(msg.error) - const errorMessage = this.$t('Local API Error (Click to copy)') - this.showToast({ - message: `${errorMessage}: ${msg.error}`, - time: 10000, - action: () => { - navigator.clipboard.writeText(msg.error) - } + if (comment.numReplies > 0) { + comment.replies.forEach((reply) => { + reply.text = autolinker.link(reply.text) }) - if (this.backendFallback && this.backendPreference === 'local') { - this.showToast({ - message: this.$t('Falling back to Invidious API') - }) - this.getCommentDataInvidious() - } else { - this.isLoading = false - } } - }) - } - this.commentProcess.send({ id: this.id, sortNewest: this.sortNewest }) + return comment + }) + if (this.sortingChanged) { + this.commentData = [] + this.sortingChanged = false + } + this.commentData = this.commentData.concat(commentData) + this.isLoading = false + this.showComments = true + this.nextPageToken = response.continuation + }).catch((err) => { + console.log(err) + const errorMessage = this.$t('Local API Error (Click to copy)') + this.showToast({ + message: `${errorMessage}: ${err}`, + time: 10000, + action: () => { + navigator.clipboard.writeText(err) + } + }) + if (this.backendFallback && this.backendPreference === 'local') { + this.showToast({ + message: this.$t('Falling back to Invidious API') + }) + this.getCommentDataInvidious() + } else { + this.isLoading = false + } + }) }, getCommentDataInvidious: function () { @@ -269,7 +248,6 @@ export default Vue.extend({ return comment }) - console.log(commentData) this.commentData = this.commentData.concat(commentData) this.nextPageToken = response.continuation this.isLoading = false @@ -329,7 +307,6 @@ export default Vue.extend({ return comment }) - console.log(commentData) this.commentData[index].replies = commentData this.commentData[index].showReplies = true this.isLoading = false diff --git a/src/renderer/components/watch-video-comments/watch-video-comments.vue b/src/renderer/components/watch-video-comments/watch-video-comments.vue index bb2ff828a219..5c490d716df0 100644 --- a/src/renderer/components/watch-video-comments/watch-video-comments.vue +++ b/src/renderer/components/watch-video-comments/watch-video-comments.vue @@ -1,8 +1,5 @@ diff --git a/src/renderer/store/modules/ytdl.js b/src/renderer/store/modules/ytdl.js index 2ba6998c22f8..6ce2edd640d2 100644 --- a/src/renderer/store/modules/ytdl.js +++ b/src/renderer/store/modules/ytdl.js @@ -3,6 +3,9 @@ import ytsr from 'ytsr' import ytpl from 'ytpl' import IsEqual from 'lodash.isequal' +import { SocksProxyAgent } from 'socks-proxy-agent' +import { HttpsProxyAgent } from 'https-proxy-agent' +import { HttpProxyAgent } from 'http-proxy-agent' const state = { main: 0, @@ -38,6 +41,47 @@ const actions = { duration: '' } + let agent = {} + const settings = rootState.settings + const useProxy = settings.useProxy + + if (useProxy) { + const proxyProtocol = settings.proxyProtocol + const proxyHostname = settings.proxyHostname + const proxyPort = settings.proxyPort + + switch (proxyProtocol) { + case 'http': + agent = new HttpProxyAgent({ + host: proxyHostname, + port: proxyPort + }) + break + case 'https': + agent = new HttpsProxyAgent({ + host: proxyHostname, + port: proxyPort + }) + break + case 'socks4': + agent = new SocksProxyAgent({ + host: proxyHostname, + port: proxyPort, + type: 4 + }) + break + case 'socks5': + agent = new SocksProxyAgent({ + host: proxyHostname, + port: proxyPort, + type: 5 + }) + break + } + + payload.options.requestOptions = { agent } + } + commit('toggleIsYtSearchRunning') if (!IsEqual(defaultFilters, rootState.utils.searchSettings)) { @@ -79,7 +123,51 @@ const actions = { }, async ytSearchGetFilters ({ rootState }, payload) { - let filter = await ytsr.getFilters(payload.query) + let options = null + let agent = null + const settings = rootState.settings + const useProxy = settings.useProxy + + if (useProxy) { + const proxyProtocol = settings.proxyProtocol + const proxyHostname = settings.proxyHostname + const proxyPort = settings.proxyPort + + switch (proxyProtocol) { + case 'http': + agent = new HttpProxyAgent({ + host: proxyHostname, + port: proxyPort + }) + break + case 'https': + agent = new HttpsProxyAgent({ + host: proxyHostname, + port: proxyPort + }) + break + case 'socks4': + agent = new SocksProxyAgent({ + host: proxyHostname, + port: proxyPort, + type: 4 + }) + break + case 'socks5': + agent = new SocksProxyAgent({ + host: proxyHostname, + port: proxyPort, + type: 5 + }) + break + } + } + + options = { + requestOptions: { agent } + } + + let filter = await ytsr.getFilters(payload.query, options) let filterUrl = null let searchSettings = payload.searchSettings @@ -104,7 +192,7 @@ const actions = { break } filterUrl = filter.get('Sort by').get(filterValue).url - filter = await ytsr.getFilters(filterUrl) + filter = await ytsr.getFilters(filterUrl, options) } console.log(`Current ref: ${filterUrl}`) @@ -118,7 +206,7 @@ const actions = { } filterUrl = filter.get('Duration').get(filterValue).url - filter = await ytsr.getFilters(filterUrl) + filter = await ytsr.getFilters(filterUrl, options) } console.log(`Current ref: ${filterUrl}`) @@ -145,7 +233,7 @@ const actions = { } filterUrl = filter.get('Upload date').get(filterValue).url - filter = await ytsr.getFilters(filterUrl) + filter = await ytsr.getFilters(filterUrl, options) } console.log(`Current ref: ${filterUrl}`) @@ -153,7 +241,7 @@ const actions = { if (searchSettings.type !== 'all') { const filterValue = searchSettings.type.charAt(0).toUpperCase() + searchSettings.type.slice(1) filterUrl = filter.get('Type').get(filterValue).url - filter = await ytsr.getFilters(filterUrl) + filter = await ytsr.getFilters(filterUrl, options) } console.log(`Current ref: ${filterUrl}`) @@ -163,11 +251,52 @@ const actions = { }) }, - ytGetPlaylistInfo (_, playlistId) { + ytGetPlaylistInfo ({ rootState }, playlistId) { return new Promise((resolve, reject) => { console.log(playlistId) console.log('Getting playlist info please wait...') - ytpl(playlistId, { limit: 'Infinity' }).then((result) => { + let agent = null + const settings = rootState.settings + const useProxy = settings.useProxy + + if (useProxy) { + const proxyProtocol = settings.proxyProtocol + const proxyHostname = settings.proxyHostname + const proxyPort = settings.proxyPort + + switch (proxyProtocol) { + case 'http': + agent = new HttpProxyAgent({ + host: proxyHostname, + port: proxyPort + }) + break + case 'https': + agent = new HttpsProxyAgent({ + host: proxyHostname, + port: proxyPort + }) + break + case 'socks4': + agent = new SocksProxyAgent({ + host: proxyHostname, + port: proxyPort, + type: 4 + }) + break + case 'socks5': + agent = new SocksProxyAgent({ + host: proxyHostname, + port: proxyPort, + type: 5 + }) + break + } + } + ytpl(playlistId, { + limit: 'Infinity', + requestOptions: { agent } + }).then((result) => { resolve(result) }).catch((err) => { reject(err) @@ -175,11 +304,51 @@ const actions = { }) }, - ytGetVideoInformation (_, videoId) { + ytGetVideoInformation ({ rootState }, videoId) { return new Promise((resolve, reject) => { console.log('Getting video info please wait...') + let agent = null + const settings = rootState.settings + const useProxy = settings.useProxy + + if (useProxy) { + const proxyProtocol = settings.proxyProtocol + const proxyHostname = settings.proxyHostname + const proxyPort = settings.proxyPort + + switch (proxyProtocol) { + case 'http': + agent = new HttpProxyAgent({ + host: proxyHostname, + port: proxyPort + }) + break + case 'https': + agent = new HttpsProxyAgent({ + host: proxyHostname, + port: proxyPort + }) + break + case 'socks4': + agent = new SocksProxyAgent({ + host: proxyHostname, + port: proxyPort, + type: 4 + }) + break + case 'socks5': + agent = new SocksProxyAgent({ + host: proxyHostname, + port: proxyPort, + type: 5 + }) + break + } + } + ytdl.getInfo(videoId, { - lang: localStorage.getItem('locale') + lang: localStorage.getItem('locale'), + requestOptions: { agent } }).then((result) => { resolve(result) }).catch((err) => { diff --git a/src/renderer/views/Search/Search.js b/src/renderer/views/Search/Search.js index c0328929b600..16855e4547d7 100644 --- a/src/renderer/views/Search/Search.js +++ b/src/renderer/views/Search/Search.js @@ -16,6 +16,8 @@ export default Vue.extend({ data: function () { return { isLoading: false, + apiUsed: 'local', + amountOfResults: 0, query: '', searchPage: 1, nextPageRef: '', @@ -122,6 +124,10 @@ export default Vue.extend({ return } + this.apiUsed = 'local' + + this.amountOfResults = result.results + const returnData = result.items.filter((item) => { if (typeof item !== 'undefined') { return item.type === 'video' || item.type === 'channel' || item.type === 'playlist' @@ -179,7 +185,8 @@ export default Vue.extend({ query: payload.query, data: this.shownResults, searchSettings: this.searchSettings, - nextPageRef: result.continuation + nextPageRef: result.continuation, + amountOfResults: result.results } this.$store.commit('addToSessionSearchHistory', historyPayload) @@ -228,6 +235,8 @@ export default Vue.extend({ return } + this.apiUsed = 'invidious' + console.log(result) const returnData = result.filter((item) => { @@ -287,13 +296,21 @@ export default Vue.extend({ console.log(payload) - this.showToast({ - message: this.$t('Search Filters["Fetching results. Please wait"]') - }) - - if (this.nextPageRef !== '') { - this.performSearchLocal(payload) + if (this.apiUsed === 'local') { + if (this.amountOfResults <= this.shownResults.length) { + this.showToast({ + message: this.$t('Search Filters.There are no more results for this search') + }) + } else { + this.showToast({ + message: this.$t('Search Filters["Fetching results. Please wait"]') + }) + this.performSearchLocal(payload) + } } else { + this.showToast({ + message: this.$t('Search Filters["Fetching results. Please wait"]') + }) this.performSearchInvidious(payload) } }, @@ -302,6 +319,7 @@ export default Vue.extend({ this.query = history.query this.shownResults = history.data this.searchSettings = history.searchSettings + this.amountOfResults = history.amountOfResults if (typeof (history.nextPageRef) !== 'undefined') { this.nextPageRef = history.nextPageRef diff --git a/src/renderer/views/UserPlaylists/UserPlaylists.js b/src/renderer/views/UserPlaylists/UserPlaylists.js index 8e6068cc74eb..ac88c43777d0 100644 --- a/src/renderer/views/UserPlaylists/UserPlaylists.js +++ b/src/renderer/views/UserPlaylists/UserPlaylists.js @@ -3,6 +3,7 @@ import FtCard from '../../components/ft-card/ft-card.vue' import FtFlexBox from '../../components/ft-flex-box/ft-flex-box.vue' import FtTooltip from '../../components/ft-tooltip/ft-tooltip.vue' import FtLoader from '../../components/ft-loader/ft-loader.vue' +import FtButton from '../../components/ft-button/ft-button.vue' import FtElementList from '../../components/ft-element-list/ft-element-list.vue' export default Vue.extend({ @@ -12,6 +13,7 @@ export default Vue.extend({ 'ft-flex-box': FtFlexBox, 'ft-tooltip': FtTooltip, 'ft-loader': FtLoader, + 'ft-button': FtButton, 'ft-element-list': FtElementList }, data: function () { @@ -26,10 +28,11 @@ export default Vue.extend({ }, activeData: function () { + const data = [].concat(this.favoritesPlaylist.videos).reverse() if (this.favoritesPlaylist.videos.length < this.dataLimit) { - return this.favoritesPlaylist.videos + return data } else { - return this.favoritesPlaylist.videos.slice(0, this.dataLimit) + return data.slice(0, this.dataLimit) } } }, diff --git a/src/renderer/views/Watch/Watch.js b/src/renderer/views/Watch/Watch.js index e1e19785dfc8..683885303029 100644 --- a/src/renderer/views/Watch/Watch.js +++ b/src/renderer/views/Watch/Watch.js @@ -864,12 +864,16 @@ export default Vue.extend({ console.log('update watch progress') this.updateWatchProgress(payload) } + } + + if (!this.isUpcoming && !this.isLoading) { + const player = this.$refs.videoPlayer.player if (player !== null && !player.paused() && player.isInPictureInPicture()) { const playerId = this.videoId setTimeout(() => { player.play() - player.on('leavepictureinpicture', () => { + player.on('leavepictureinpicture', (event) => { const watchTime = player.currentTime() if (this.$route.fullPath.includes('/watch')) { const routeId = this.$route.params.id diff --git a/static/locales/ar.yaml b/static/locales/ar.yaml index fb00450936a4..ae869862616a 100644 --- a/static/locales/ar.yaml +++ b/static/locales/ar.yaml @@ -266,6 +266,7 @@ Settings: One or more subscriptions were unable to be imported: تعذر استيراد واحد أو أكثر من الاشتراكات Check for Legacy Subscriptions: تحقق من وجود اشتراك قديم + Manage Subscriptions: إدارة الإشتراكات Distraction Free Settings: Hide Live Chat: اخفي الدردشة المباشرة Hide Popular Videos: اخفي الفيديوهات الأكثر شعبية @@ -278,6 +279,18 @@ Settings: Distraction Free Settings: إعدادات عدم الإزعاج The app needs to restart for changes to take effect. Restart and apply change?: البرنامج يحتاج لإعادة التشغيل كي يسري مفعول التغييرات. هل تريد إعادة التشغيل و تطبيق التغييرات؟ + Proxy Settings: + City: المدينة + Region: المنطقة + Country: البلد + Ip: عنوان الإيبي + Your Info: معلوماتك + Test Proxy: اختبار البروكسي + Proxy Port Number: رقم منفذ البروكسي + Proxy Host: خادوم البروكسي + Proxy Protocol: بروتوكول البروكسي + Enable Tor / Proxy: تفعيل تور / البروكسي + Proxy Settings: خيارات البروكسي About: #On About page About: 'حول' @@ -309,6 +322,19 @@ About: Latest FreeTube News: 'آخر أخبار FreeTube' + Donate: التبرع + Translate: ساعدنا في ترجمة Freetube + Chat on Matrix: الدردشة على ماتريكس + Mastodon: ماستدون + Email: البريد الإلكتروني + Blog: المدوّنة + Website: موقع الويب + Report a problem: الإبلاغ عن مشكلة + FAQ: الأسئلة المتداولة + Help: المساعدة + View License: اعرض الرخصة + Source code: الشفرة المصدرية + Beta: تجريبي Profile: All Channels: 'جميع القنوات' Profile Manager: 'مدير الملف الشخصي' @@ -466,6 +492,8 @@ Video: Open Channel in Invidious: افتح القناة على انفيديوس Copy YouTube Channel Link: انسخ رابط قناة اليوتيوب Open Channel in YouTube: افتح القناة على يوتيوب + Video has been saved: تم حفظ الفيديو + Save Video: احفظ الفيديو Videos: #& Sort By Sort By: diff --git a/static/locales/bg.yaml b/static/locales/bg.yaml index d541999990c1..fffcfe241683 100644 --- a/static/locales/bg.yaml +++ b/static/locales/bg.yaml @@ -88,6 +88,13 @@ Most Popular: 'Най-популярни' Playlists: 'Плейлисти' User Playlists: Your Playlists: 'Вашите плейлисти' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Запазените + ви видеоклипове са празни. Кликнете върху бутона за запазване в ъгъла на видеоклипа, + за да го добавите тук + Playlist Message: Тази страница не отразява напълно работещи плейлисти. В него са + изброени само видеоклипове, които сте запазили или избрали за любими. Когато работата + приключи, всички видеоклипове, които в момента са тук, ще бъдат мигрирани в плейлист + „Любими“. History: # On History Page History: 'История' @@ -243,6 +250,7 @@ Settings: Unknown data key: 'Непознат ключ данни' How do I import my subscriptions?: 'Как да внеса абонаментите си?' Check for Legacy Subscriptions: Проверка за стари абонаменти + Manage Subscriptions: Управление на абонаменти Advanced Settings: Advanced Settings: 'Разширени настройки' Enable Debug Mode (Prints data to the console): 'Активиране на режим за дебъгване @@ -280,8 +288,26 @@ Settings: Hide Video Likes And Dislikes: Скриване оценките на видеата Hide Video Views: Скриване броя показвания на видеата Distraction Free Settings: Настройки за неразсейване + Hide Active Subscriptions: Скриване на активни абонаменти The app needs to restart for changes to take effect. Restart and apply change?: Приложението трябва да се рестартира за да се приложат промените. Рестартиране? + Proxy Settings: + Error getting network information. Is your proxy configured properly?: Грешка + при получаване на информация за мрежата. Правилно ли е конфигуриран вашият прокси + сървър? + City: Град + Region: Регион + Country: Държава + Ip: Ip + Your Info: Вашата информация + Test Proxy: Тестово прокси + Clicking on Test Proxy will send a request to: Кликването върху тестово прокси + ще изпрати заявка до + Proxy Port Number: Номер на прокси порта + Proxy Host: Прокси хост + Proxy Protocol: Прокси протокол + Enable Tor / Proxy: Активирайте Tor / Proxy + Proxy Settings: Настройки на прокси About: #On About page About: 'Относно' @@ -313,6 +339,29 @@ About: Latest FreeTube News: 'Последни FreeTube новини' + Donate: Дарете + these people and projects: тези хора и проекти + FreeTube is made possible by: FreeTube е възможен чрез + Translate: Превод + room rules: правилата за стаите + Please read the: Моля, прочетете + Chat on Matrix: Чат в Matrix + Mastodon: Mastodon + Email: Имейл + Blog: Блог + Website: Уебсайт + Please check for duplicates before posting: Моля, проверете за дубликати преди публикуване + GitHub issues: GitHub проблеми + Report a problem: Съобщете за проблем + FAQ: ЧЗВ + FreeTube Wiki: FreeTube Wiki + Help: Помощ + GitHub releases: GitHub издания + Downloads / Changelog: Изтегляния / Дневник с промени + View License: Преглед на лиценза + Licensed under the AGPLv3: Лицензиран съгласно AGPLv3 + Source code: Програмен код + Beta: Бета Profile: Profile Select: 'Избор на профил' All Channels: 'Всички канали' @@ -473,6 +522,10 @@ Video: Open Channel in YouTube: Отваряне на канала в YouTube Started streaming on: Начало на излъчването Streamed on: Излъчване + Video has been removed from your saved list: Видеоклипът е премахнат от вашия запазен + списък + Video has been saved: Видеото е запазено + Save Video: Запазване на видео Videos: #& Sort By Sort By: diff --git a/static/locales/cs.yaml b/static/locales/cs.yaml index 7885fa0715eb..ff68cc4e71a2 100644 --- a/static/locales/cs.yaml +++ b/static/locales/cs.yaml @@ -70,6 +70,8 @@ Search Filters: Fetching results. Please wait: 'Načítání výsledků. Prosím, čekejte' Fetch more results: 'Načíst více výsledků' # Sidebar + There are no more results for this search: Pro toto hledání nejsou k dispozici žádné + další výsledky Subscriptions: # On Subscriptions Page Subscriptions: 'Odběry' @@ -86,6 +88,12 @@ Most Popular: 'Nejpopulárnější' Playlists: 'Playlisty' User Playlists: Your Playlists: 'Vaše playlisty' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Vaše + uložená videa jsou prázdná. Kliknutím na tlačítko Uložit v rohu videa jej zobrazíte + zde + Playlist Message: Tato stránka neodráží plně funkční seznamy skladeb. Uvádí pouze + videa, která jste uložili nebo zařadili mezi oblíbená. Po dokončení práce budou + všechna aktuálně zde umístěná videa přenesena do seznamu „Oblíbené“. History: # On History Page History: 'Historie' @@ -123,6 +131,8 @@ Settings: instance (Výchozí je https://invidious.snopyta.org)' Region for Trending: 'Region pro trendy' #! List countries + View all Invidious instance information: Zobrazit všechny informace o instanci + Invidious Theme Settings: Theme Settings: 'Nastavení motivu' Match Top Bar with Main Color: 'Přizpůsobit hlavní lištu hlavní barvě' @@ -251,6 +261,7 @@ Settings: Unable to write file: 'Soubor nelze uložit' Unknown data key: 'Neznámý datový klíč' How do I import my subscriptions?: 'Jak mohu importovat své odebírané kanály?' + Manage Subscriptions: Spravovat odběry Advanced Settings: Advanced Settings: 'Rozšířené nastavení' Enable Debug Mode (Prints data to the console): 'Povolit režim ladění (výstup @@ -277,6 +288,22 @@ Settings: #& Yes #& No + Proxy Settings: + Proxy Settings: Nastavení proxy + City: Město + Ip: IP + Your Info: Vaše informace + Enable Tor / Proxy: Povolit Tor / Proxy + Region: Region + Country: Země + Test Proxy: Otestovat proxy + Clicking on Test Proxy will send a request to: Kliknutím na Otestovat proxy se + odešle dotaz na + Proxy Port Number: Port proxy + Proxy Host: Adresa proxy + Proxy Protocol: Protokol proxy + Error getting network information. Is your proxy configured properly?: Chyba při + získávání informací o síti. Je vaše proxy správně nakonfigurována? About: #On About page About: 'O aplikaci' @@ -308,6 +335,30 @@ About: Latest FreeTube News: 'Nejnovější zprávy z FreeTube' + Licensed under the AGPLv3: Licencováno pod licencí AGPLv3 + Source code: Zdrojový kód + Beta: Beta + Donate: Přispět + Credits: Poděkování + room rules: pravidla místnosti + Please read the: Prosím, přečtěte si + Chat on Matrix: Chat na síti Matrix + Mastodon: mastodon + Email: Email + Blog: Blog + Website: Webová stránka + FAQ: Často kladné dotazy + FreeTube Wiki: FreeTube Wiki + Downloads / Changelog: Ke stažení / Seznam změn + View License: Zobrazit licenci + Translate: Překlady + these people and projects: těmto lidem a projektům + FreeTube is made possible by: FreeTube je možné udělat díky + Please check for duplicates before posting: Před odesláním zkontrolujte duplicity + GitHub issues: Chyby na GitHub + Report a problem: Nahlásit problém + Help: Pomoc + GitHub releases: Vydaní na GitHub Profile: Profile Select: 'Výběr profilu' All Channels: 'Všechny kanály' @@ -441,20 +492,20 @@ Video: Oct: 'Říjen' Nov: 'Listopad' Dec: 'Prosinec' - Second: 'Sekunda' - Seconds: 'Sekundy' - Minute: 'Minuta' - Minutes: 'Minuty' - Hour: 'Hodina' - Hours: 'Hodiny' - Day: 'Den' - Days: 'Dny' - Week: 'Týden' - Weeks: 'Týdny' - Month: 'Měsíc' - Months: 'Měsíce' - Year: 'Rok' - Years: 'Roky' + Second: 'sekundou' + Seconds: 'sekundami' + Minute: 'minutou' + Minutes: 'minutami' + Hour: 'hodinou' + Hours: 'hodinami' + Day: 'dnem' + Days: 'dny' + Week: 'týdnem' + Weeks: 'týdny' + Month: 'měsícem' + Months: 'měsíci' + Year: 'rokem' + Years: 'lety' Ago: 'Před' Upcoming: 'Premiéra' Published on: 'Publikováno' @@ -463,6 +514,10 @@ Video: #& Videos Started streaming on: Začátek vysílání Streamed on: Vysíláno + Video has been saved: Video bylo uloženo + Save Video: Uložit video + Video has been removed from your saved list: Video bylo odstraněno z vašeho uloženého + seznamu Videos: #& Sort By Sort By: diff --git a/static/locales/de-DE.yaml b/static/locales/de-DE.yaml index 956394688085..cd4c2134de5c 100644 --- a/static/locales/de-DE.yaml +++ b/static/locales/de-DE.yaml @@ -82,6 +82,13 @@ Most Popular: Am beliebtesten Playlists: Wiedergabelisten User Playlists: Your Playlists: Deine Wiedergabelisten + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Deine + gespeicherten Videos sind leer. Klicken Sie auf die Schaltfläche "Speichern" in + der Ecke eines Videos, damit es hier aufgelistet wird + Playlist Message: Diese Seite spiegelt nicht die vollständig funktionierenden Wiedergabelisten + wider. Sie listet nur Videos auf, die Sie gespeichert oder favorisiert haben. + Wenn die Arbeiten abgeschlossen sind, werden alle Videos, die sich derzeit hier + befinden, in eine Wiedergabeliste "Favoriten" migriert. History: # On History Page History: Verlauf @@ -272,6 +279,7 @@ Settings: Select Import Type: Wähle Importtyp Data Settings: Dateneinstellungen Check for Legacy Subscriptions: Prüfung auf Altabonnements + Manage Subscriptions: Abonnements verwalten Distraction Free Settings: Hide Live Chat: Live-Chat verbergen Hide Popular Videos: Beliebte Videos verbergen @@ -286,6 +294,22 @@ Settings: The app needs to restart for changes to take effect. Restart and apply change?: Um die Änderungen anzuwenden muss die Anwendung neustarten. Jetzt neustarten und Änderungen aktivieren? + Proxy Settings: + Ip: IP-Adresse + Error getting network information. Is your proxy configured properly?: Fehler + beim Abrufen von Netzwerkinformationen. Ist dein Proxy richtig konfiguriert? + City: Stadt + Region: Region / Bundesland + Country: Land / Nation + Your Info: Deine Info + Test Proxy: Proxy testen + Clicking on Test Proxy will send a request to: In dem du auf Proxy Testen klickst, + schickst du eine Anfrage an + Proxy Port Number: Proxy-Portnummer + Proxy Host: Proxy-Host + Proxy Protocol: Proxy-Protokoll + Enable Tor / Proxy: Tor / Proxy aktivieren + Proxy Settings: Proxy-Einstellungen About: #On About page About: Über @@ -338,12 +362,29 @@ About: Useful Links: Nützliche Links Help: Hilfe Contact: Kontakt + these people and projects: diesen Menschen und Projekten + FreeTube is made possible by: FreeTube wird ermöglicht von + Translate: Übersetzen + room rules: Raum-Regeln + Please read the: Bitte lese die + Chat on Matrix: Chatten bei Matrix + Mastodon: Mastodon + Please check for duplicates before posting: Bitte überprüfe vor dem absenden, ob + es Duplikate gibt + GitHub issues: GitHub Issues + Report a problem: Problem melden + FreeTube Wiki: FreeTube Wiki + GitHub releases: GitHub Veröffentlichungen + Downloads / Changelog: Downloads / Änderungsverlauf + View License: Lizenz einsehen + Licensed under the AGPLv3: Lizensiert unter der AGPLv3 + Source code: Quellcode Channel: Subscriber: Abonnement Subscribers: Abonnements Subscribe: Abonnieren Unsubscribe: Deabonnieren - Search Channel: Suche Kanal + Search Channel: Durchsuche Kanal Your search results have returned 0 results: Deine Suche hat 0 Ergebnisse geliefert Sort By: Sortiere nach Videos: @@ -455,6 +496,10 @@ Video: Open Channel in YouTube: Kanal auf YouTube öffnen Started streaming on: Streaming angefangen am Streamed on: Gestreamt am + Video has been removed from your saved list: Video wurde aus der Liste der gespeicherten + Videos entfernt + Video has been saved: Video wurde gespeichert + Save Video: Video speichern Videos: #& Sort By Sort By: diff --git a/static/locales/en-US.yaml b/static/locales/en-US.yaml index d7e278b647eb..410d9431f998 100644 --- a/static/locales/en-US.yaml +++ b/static/locales/en-US.yaml @@ -69,6 +69,7 @@ Search Filters: Search Results: Search Results Fetching results. Please wait: Fetching results. Please wait Fetch more results: Fetch more results + There are no more results for this search: There are no more results for this search # Sidebar Subscriptions: # On Subscriptions Page @@ -86,8 +87,11 @@ Most Popular: Most Popular Playlists: Playlists User Playlists: Your Playlists: Your Playlists - Playlist Message: This page is not reflective of fully working playlists. It only lists videos that you have saved or favorited. When the work has finished, all videos currently here will be migrated to a 'Favorites' playlist. - Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Your saved videos are empty. Click on the save button on the corner of a video to have it listed here + Playlist Message: This page is not reflective of fully working playlists. It only + lists videos that you have saved or favorited. When the work has finished, all + videos currently here will be migrated to a 'Favorites' playlist. + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Your saved videos are empty. Click on the save button on the corner of a video to have + it listed here History: # On History Page History: History @@ -123,6 +127,7 @@ Settings: End: End 'Invidious Instance (Default is https://invidious.snopyta.org)': Invidious Instance (Default is https://invidious.snopyta.org) + View all Invidious instance information: View all Invidious instance information Region for Trending: Region for Trending #! List countries Theme Settings: diff --git a/static/locales/es.yaml b/static/locales/es.yaml index 3fcae4da29ee..6f4412c4be18 100644 --- a/static/locales/es.yaml +++ b/static/locales/es.yaml @@ -80,6 +80,11 @@ Most Popular: 'Más populares' Playlists: 'Playlists' User Playlists: Your Playlists: 'Tus listas de reproducción' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Tus + favoritos están vacios. Haz click en la estrella de cada video para añadirlo aquí + Playlist Message: Esta página no refleja el estado final de las playlists, solo + muestra los videos guardados. En futuras actualizaciones, estos videos migrarán + a la playlist "Favoritos". History: # On History Page History: 'Historial' @@ -233,6 +238,7 @@ Settings: One or more subscriptions were unable to be imported: Una o varias de las suscripciones no han podido ser importadas Check for Legacy Subscriptions: Comprobar suscripciones Legacy + Manage Subscriptions: Administrar suscripciones Advanced Settings: Advanced Settings: 'Ajustes avanzados' Enable Debug Mode (Prints data to the console): 'Activar modo de depuración (muestra @@ -273,6 +279,22 @@ Settings: Hide Active Subscriptions: Ocultar suscripciones activas The app needs to restart for changes to take effect. Restart and apply change?: ¿Quieres reiniciar FreeTube ahora para aplicar los cambios? + Proxy Settings: + Error getting network information. Is your proxy configured properly?: Error al + obtener información sobre la red. ¿Has configurado el Proxy correctamente? + City: Ciudad + Region: Región + Country: País + Ip: IP + Your Info: Tu información + Test Proxy: Probar Proxy + Clicking on Test Proxy will send a request to: Al cliquear en "Probar Proxy" se + enviará una solicitud a + Proxy Port Number: Número de puerto del Proxy + Proxy Host: Host del Proxy + Proxy Protocol: Protocolo Proxy + Enable Tor / Proxy: Habilitar Tor / Proxy + Proxy Settings: Proxy About: #On About page About: 'Acerca de' @@ -304,6 +326,31 @@ About: Latest FreeTube News: 'Últimas noticias de FreeTube' + Donate: Donar + these people and projects: estas personas y proyectos + FreeTube is made possible by: FreeTube es posible gracias a + Credits: Créditos + Translate: Traducir + room rules: reglas de la sala + Please read the: Por favor, lee el + Chat on Matrix: Chat en Matrix + Mastodon: Mastodon + Email: Correo electrónico + Blog: Blog + Website: Página web + Please check for duplicates before posting: Por favor, antes de publicar asegúrate + de no duplicar temas + GitHub issues: Sugerencias en GitHub + Report a problem: Informar de un problema + FAQ: Preguntas frecuentes + FreeTube Wiki: Wiki de FreeTube + Help: Ayuda + GitHub releases: Lanzamientos de GitHub + Downloads / Changelog: Descargas / Changelog + View License: Ver licencia + Licensed under the AGPLv3: Licencia AGPLv3 + Source code: Código fuente + Beta: Beta Profile: All Channels: 'Todos los canales' Profile Manager: 'Administrador de perfiles' @@ -464,6 +511,10 @@ Video: Open Channel in YouTube: Visitar canal en YouTube Started streaming on: Comenzó a transmitir en Streamed on: Transmitido en + Video has been removed from your saved list: El video ha sido eliminado de tu lista + de guardados + Video has been saved: El video ha sido guardado + Save Video: Guardiar video Videos: #& Sort By Sort By: diff --git a/static/locales/fr-FR.yaml b/static/locales/fr-FR.yaml index 515bd0ac6a1b..f67a8fe52f8c 100644 --- a/static/locales/fr-FR.yaml +++ b/static/locales/fr-FR.yaml @@ -63,6 +63,8 @@ Search Filters: Fetching results. Please wait: 'Récupération des résultats. Veuillez patienter' Fetch more results: 'Montrer plus de résultats' # Sidebar + There are no more results for this search: Il n'y a plus de résultats pour cette + recherche Subscriptions: # On Subscriptions Page Subscriptions: 'Abonnements' @@ -83,6 +85,13 @@ Most Popular: 'Les plus populaires' Playlists: 'Listes de lecture' User Playlists: Your Playlists: 'Vos listes de lecture' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Vous + n'avez enregistré aucune vidéo. Cliquez sur le bouton Enregistrer dans le coin + d'une vidéo pour l'afficher ici + Playlist Message: Cette page ne reflète pas les listes de lecture entièrement fonctionnelles. + Elle ne répertorie que les vidéos que vous avez enregistrées ou mises en favoris. + Une fois le travail terminé, toutes les vidéos actuellement présentes ici seront + migrées vers une liste de lecture «Favoris». History: # On History Page History: 'Historique' @@ -300,8 +309,8 @@ Settings: Ip: Ip Your Info: Vos informations Test Proxy: Test du Proxy - Clicking on Test Proxy will send a request to: En cliquant sur Test Proxy, une - demande sera envoyée à + Clicking on Test Proxy will send a request to: En cliquant sur Test du Proxy, + une demande sera envoyée à Proxy Port Number: Numéro de port du proxy Proxy Host: Hôte du proxy Proxy Protocol: Protocole du proxy @@ -358,13 +367,23 @@ About: Beta: Bêta Donate: Faire un don Useful Links: Liens utiles - Translate: Traduire + Translate: Aidez-nous à traduire FreeTube Chat on Matrix: Chatter sur Matrix Mastodon: Mastodon Report a problem: Signaler un problème View License: Voir la license Licensed under the AGPLv3: Sous licence AGPLv3 Source code: Code source + these people and projects: ces personnes et projets + FreeTube is made possible by: FreeTube est rendu possible par + room rules: règles du salon + Please read the: Veuillez lire les + Please check for duplicates before posting: Veuillez vérifier s'il y a des doublons + avant de poster + GitHub issues: Les problèmes identifiés par la communauté sur GitHub + FreeTube Wiki: Wiki de FreeTube + GitHub releases: Les différentes versions de FreeTube disponibles sur GitHub + Downloads / Changelog: Téléchargements / Journal des modifications Channel: Subscriber: 'Abonnement' Subscribers: 'Abonnements' @@ -484,6 +503,10 @@ Video: Open Channel in YouTube: Ouvrir la chaîne sur YouTube Started streaming on: Diffusion lancée le Streamed on: Diffusé le + Video has been removed from your saved list: La vidéo a été supprimée de votre liste + enregistrée + Video has been saved: La vidéo a été enregistrée + Save Video: Enregistrer la vidéo Videos: #& Sort By Sort By: diff --git a/static/locales/he.yaml b/static/locales/he.yaml index 7d2ca33ca792..031189137d1d 100644 --- a/static/locales/he.yaml +++ b/static/locales/he.yaml @@ -70,6 +70,7 @@ Search Filters: Fetching results. Please wait: 'נאספות תוצאות. נא להמתין' Fetch more results: 'חיפוש תוצאות נוספות' # Sidebar + There are no more results for this search: אין תוצאות נוספות לחיפוש הזה Subscriptions: # On Subscriptions Page Subscriptions: 'מינויים' @@ -103,13 +104,12 @@ Settings: General Settings: 'הגדרות כלליות' Check for Updates: 'בדוק אם קיימים עדכונים' Check for Latest Blog Posts: 'בדוק אם קיימים פוסטים חדשים בבלוג' - Fallback to Non-Preferred Backend on Failure: 'לסגת לממשק נסתר שאינו מועדף בעת - כשל' + Fallback to Non-Preferred Backend on Failure: 'נסיגה למנגנון שאינו מועדף בעת כשל' Enable Search Suggestions: 'אפשר הצעות לחיפוש' Default Landing Page: 'דף נחיתה כבררת מחדל' Locale Preference: 'העדפת שפה' Preferred API Backend: - Preferred API Backend: 'ממשק API נסתר מועדף' + Preferred API Backend: 'מנגנון API מועדף' Local API: 'API מקומי' Invidious API: 'API של Invidious' Video View Type: @@ -126,6 +126,7 @@ Settings: (ברירת המחדל היא https://invidious.snopyta.org)' Region for Trending: 'אזור לסרטונים חמים' #! List countries + View all Invidious instance information: הצגת כל פרטי העותק של Invidious Theme Settings: Theme Settings: 'הגדרת מראה' Match Top Bar with Main Color: 'התאמת האזור העליון לצבע הראשי' @@ -159,7 +160,7 @@ Settings: Disable Smooth Scrolling: השבתת גלילה חלקה Player Settings: Player Settings: 'הגדרת נגן' - Force Local Backend for Legacy Formats: 'לכפות את הממשק הנסתר המקומי לתצורות המיושנות' + Force Local Backend for Legacy Formats: 'כפיית המנגנון לניגון בפורמטים ישנים' Play Next Video: 'ניגון הסרטון הבא' Turn on Subtitles by Default: 'הפעלת כתוביות כברירת מחדל' Autoplay Videos: 'הפעלה אוטומטית לסרטונים' @@ -272,8 +273,8 @@ Settings: Distraction Free Settings: Hide Live Chat: הסתרת צ׳אט חי Hide Popular Videos: הסתרת סרטונים נפוצים - Hide Trending Videos: הסתרת סרטונים חמים - Hide Recommended Videos: הסתרת סרטונים מומלצים + Hide Trending Videos: הסתרת הסרטונים החמים + Hide Recommended Videos: הסתרת הסרטונים המומלצים Hide Comment Likes: הסתרת לייקים על תגובות Hide Channel Subscribers: הסתרת מנויי הערוץ Hide Video Likes And Dislikes: הסתרת לייקים ודיסלייקים לסרטון @@ -344,6 +345,22 @@ About: Useful Links: קישורים שימושיים Help: עזרה Contact: יצירת קשר + these people and projects: האנשים והמיזמים האלו + FreeTube is made possible by: FreeTube זמין לך בזכות + Translate: תרגום + room rules: כללי החדר + Please read the: נא לקרוא את + Chat on Matrix: צ׳אט ב־Matrix + Mastodon: Mastodon + Please check for duplicates before posting: נא לבדוק כפילויות בטרם פרסום תקלה + GitHub issues: תקלות ב־GitHub + Report a problem: דיווח על תקלה + FreeTube Wiki: הוויקי של FreeTube + GitHub releases: מהדורות ב־GitHub + Downloads / Changelog: הורדות / יומן שינויים + View License: הצגת הרישיון + Licensed under the AGPLv3: בכפוף לרישיון AGPLv3 + Source code: קוד מקור Profile: Profile Select: 'בחירת פרופיל' All Channels: 'כל הערוצים' @@ -444,7 +461,7 @@ Video: Enable Live Chat: 'אפשר צ''אט' Live Chat is currently not supported in this build.: 'הצ''אט כרגע לא נתמך בגרסה זו.' - 'Chat is disabled or the Live Stream has ended.': 'הצ''אט נחסם או שהשידור החי נגמר.' + 'Chat is disabled or the Live Stream has ended.': 'הצ׳אט נחסם או שהשידור החי נגמר.' Live chat is enabled. Chat messages will appear here once sent.: 'הצ''אט מופעל. ההודעות יופיעו פה כאשר יישלחו.' 'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': 'מנגנון @@ -594,8 +611,8 @@ Tooltips: Fallback to Non-Preferred Backend on Failure: כאשר ל־API המועדף עליך יש בעיה, FreeTube ינסה להשתמש ב־API בעדיפות הנמוכה יותר באופן אוטומטי כשיטת נסיגה כאשר האפשרות פעילה - Preferred API Backend: נא לבחור את המנגנון בו ישתמש FreeTube כדי לקבל נתונים. - ה־API המקומי הוא מחלץ מובנה. ה־API של Invidious דורש התחברות לשרת Invidious. + Preferred API Backend: נא לבחור את המנגנון לשימוש FreeTube כדי לקבל נתונים. ה־API + המקומי הוא מחלץ מובנה. ה־API של Invidious דורש התחברות לשרת Invidious. Region for Trending: מגמות אזוריות מאפשר לך לבחור סרטונים חמים של איזו מדינה מעניין אותך לראות. לא כל המדינות שמוצגות אכן נתמכות על ידי YouTube Invidious Instance: העותק של Invidious שאליו FreeTube יתחבר לפניות API. מחיקת @@ -603,7 +620,7 @@ Tooltips: Thumbnail Preference: כל התמונות הייצוגיות ברחבי FreeTube תוחלפנה בתמונית מתוך הסרטון במקום התמונה הייצוגית כבררת המחדל Player Settings: - Force Local Backend for Legacy Formats: עובד רק כאשר ה־API של Invidious הוא בררת + Force Local Backend for Legacy Formats: עובד רק כאשר ה־API של Invidious הוא ברירת המחדל שלך. כאשר האפשרות פעילה, ה־API המקומי יופעל וישתמש בתצורות המיושנות שהוחזרו על ידיו במקום באלו שהוחזרו על ידי Invidious. מועיל כאשר הסרטונים שמוחזרים על ידי Invidious לא מתנגנים עקב מגבלות חוקיות במדינה diff --git a/static/locales/hr.yaml b/static/locales/hr.yaml index 4d99dbafda0b..fc9ffe174bff 100644 --- a/static/locales/hr.yaml +++ b/static/locales/hr.yaml @@ -3,7 +3,7 @@ Locale Name: 'Hrvatski' FreeTube: 'FreeTube' # Currently on Subscriptions, Playlists, and History 'This part of the app is not ready yet. Come back later when progress has been made.': >- - Ovaj dio programa još nije spreman. Navrati kasnije. + Ovaj dio programa još nije gotov. Navrati kasnije. # Webkit Menu Bar File: 'Datoteka' @@ -33,7 +33,7 @@ Forward: 'Naprijed' Search / Go to URL: 'Pretraži / Idi na URL' # In Filter Button Search Filters: - Search Filters: 'Filtri za pretraživanje' + Search Filters: 'Filtri pretrage' Sort By: Sort By: 'Redoslijed' Most Relevant: 'Najrelevantniji' @@ -60,7 +60,7 @@ Search Filters: Short (< 4 minutes): 'Kratko (< 4 min)' Long (> 20 minutes): 'Dugo (> 20 min)' # On Search Page - Search Results: 'Rezultati pretraživanja' + Search Results: 'Rezultati pretrage' Fetching results. Please wait: 'Rezultati se dohvaćaju. Pričekaj' Fetch more results: 'Dohvati još rezultata' # Sidebar @@ -82,6 +82,12 @@ Most Popular: 'Najpopularniji' Playlists: 'Zbirke' User Playlists: Your Playlists: 'Tvoje zbirke' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Nemaš + spremljenih videa. Pritisni gumb za spremanje u sličici videa, kako bi se video + ovdje prikazao + Playlist Message: Ova stranica ne odražava potpuno funkcionalne zbirke. Prikazuje + samo spremljena ili označena videa. Kad posao završi, svi trenutačno ovdje prisutni + videi premjestit će se u zbirku „Favoriti”. History: # On History Page History: 'Povijest' @@ -94,7 +100,7 @@ Settings: General Settings: 'Opće postavke' Fallback to Non-Preferred Backend on Failure: 'U slučaju problema koristi sekundarni pozadinski sustav' - Enable Search Suggestions: 'Aktiviraj prijedloge pretraživanja' + Enable Search Suggestions: 'Aktiviraj prijedloge pretrage' Default Landing Page: 'Standardna odredišna stranica' Locale Preference: 'Jezik' Preferred API Backend: @@ -145,7 +151,7 @@ Settings: Deep Orange: 'Tamnonarančasta' Secondary Color Theme: 'Sekundarna boja teme' #* Main Color Theme - UI Scale: Skaliranje korisničkog sučelja + UI Scale: Uvećanje korisničkog sučelja Disable Smooth Scrolling: Deaktiviraj neisprekidano klizanje Expand Side Bar by Default: Standardno proširi bočnu traku Player Settings: @@ -181,10 +187,10 @@ Settings: Privacy Settings: 'Postavke privatnosti' Remember History: 'Zapamti povijest' Save Watched Progress: 'Spremi napredak gledanja' - Clear Search Cache: 'Isprazni predmemoriju pretraživanja' + Clear Search Cache: 'Isprazni predmemoriju pretrage' Are you sure you want to clear out your search cache?: 'Stvarno želiš isprazniti - predmemoriju pretraživanja?' - Search cache has been cleared: 'Predmemorija pretraživanja je ispražnjena' + predmemoriju pretrage?' + Search cache has been cleared: 'Predmemorija pretrage je ispražnjena' Remove Watch History: 'Ukloni povijest gledanja' Are you sure you want to remove your entire watch history?: 'Stvarno želiš ukloniti cijelu povijest gledanja?' @@ -267,19 +273,36 @@ Settings: One or more subscriptions were unable to be imported: Neuspio uvoz jedne ili više pretplata Check for Legacy Subscriptions: Potraži stare pretplate + Manage Subscriptions: Upravljaj pretplatama Distraction Free Settings: Hide Trending Videos: Sakrij videa u trendu Hide Recommended Videos: Sakrij preporučena videa Hide Channel Subscribers: Sakrij pretplatnike na kanal - Hide Live Chat: Sakrij chat u živo + Hide Live Chat: Sakrij razgovor uživo Hide Popular Videos: Sakrij popularna videa Hide Comment Likes: Sakrij ocjene komentara Hide Video Likes And Dislikes: Sakrij ocjenjivanje videa Hide Video Views: Sakrij broj gledanja videa Distraction Free Settings: Postavke za nesmetan rad Hide Active Subscriptions: Sakrij aktivne pretplate - The app needs to restart for changes to take effect. Restart and apply change?: Za - primjenu promjena, program se mora ponovo pokrenuti. Ponovo pokrenuti program? + The app needs to restart for changes to take effect. Restart and apply change?: Promjene + će se primijeniti nakon ponovnog pokeretanja programa. Ponovo pokrenuti program? + Proxy Settings: + Country: Zemlja + Error getting network information. Is your proxy configured properly?: Greška + pri dohvaćanju mrežnih podataka. Je li tvoj posrednik pravilno konfiguriran? + City: Grad + Region: Regija + Ip: IP + Your Info: Tvoji podaci + Test Proxy: Provjeri posrednika + Clicking on Test Proxy will send a request to: Pritiskom gumba „Provjeri posrednika” + šalje se zahtjev na + Proxy Port Number: Broj priključka posrednika + Proxy Host: Računalo posrednika + Proxy Protocol: Protokol posrednika + Enable Tor / Proxy: Aktiviraj Tor/Posrednik + Proxy Settings: Postavke posrednika About: #On About page About: 'Informacije' @@ -328,6 +351,23 @@ About: Useful Links: Korisne poveznice Help: Pomoć Contact: Kontakt + Chat on Matrix: Razgovaraj na Matrixu + Please check for duplicates before posting: Prije slanja greške, provjeri, je li + ista greška već prijavljena + these people and projects: ovi ljudi i projekti + FreeTube is made possible by: FreeTube omogućuju + Translate: Prevodi + room rules: pravila sobe + Please read the: Pročitaj + Mastodon: Mastodon + GitHub issues: GitHub problemi + Report a problem: Prijavi grešku + FreeTube Wiki: FreeTube Wiki + GitHub releases: GitHub izdanja + Downloads / Changelog: Preuzimanja/dnevnik promjena + View License: Pogledaj licencu + Licensed under the AGPLv3: AGPLv3 licenca + Source code: Izvorni kod Profile: All Channels: 'Svi kanali' Profile Manager: 'Upravljač profila' @@ -418,15 +458,15 @@ Video: # As in a Live Video Live: 'Uživo' Live Now: 'Sada uživo' - Live Chat: 'Chat uživo' - Enable Live Chat: 'Aktiviraj chat uživo' - Live Chat is currently not supported in this build.: 'Chat uživo trenutačno nije - podržan u ovoj verziji.' - 'Chat is disabled or the Live Stream has ended.': 'Chat je deaktiviran ili je prijenos - uživo završio.' - Live chat is enabled. Chat messages will appear here once sent.: 'Chat uživo je - aktiviran. Poruke chata pojavit će se ovdje nakon slanja.' - 'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': 'Chat + Live Chat: 'Razgovor uživo' + Enable Live Chat: 'Aktiviraj razgovor uživo' + Live Chat is currently not supported in this build.: 'Razgovor uživo trenutačno + nije podržan u ovoj verziji.' + 'Chat is disabled or the Live Stream has ended.': 'Razgovor je deaktiviran ili je + prijenos uživo završio.' + Live chat is enabled. Chat messages will appear here once sent.: 'Razgovor uživo + je aktiviran. Poruke razgovora pojavit će se ovdje nakon slanja.' + 'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': 'Razgovor uživo trenutačno nije podržan s Invidious sučeljem. Potrebna je izravna veza s YouTubeom.' Published: @@ -484,6 +524,10 @@ Video: Open Channel in YouTube: 'Otvori kanal na YouTube stranici' Started streaming on: Početak prijenosa Streamed on: Prijenos + Video has been removed from your saved list: Video je uklonjen iz tvojeg popisa + spremljenih + Video has been saved: Video je spremljen + Save Video: Spremi video Videos: #& Sort By Sort By: @@ -588,10 +632,10 @@ Tooltips: Player Settings: Default Video Format: Postavi formate za reprodukciju videa. Dash formati mogu reproducirati višu kvalitetu slike. Stari formati su ograničeni na 720 p, ali - su zato brži. Prijenosi audioformata sadrže samo audiosnimke + su zato brži. Audioformati sadrže samo audiosnimke Proxy Videos Through Invidious: Za reprodukciju videa povezat će se s Invidiousom umjesto izravnog povezivanja s YouTubeom. Zanemaruje postavke sučelja - Force Local Backend for Legacy Formats: Radi samo, kad postaviš Invidious kao + Force Local Backend for Legacy Formats: Radi samo, kad se Invidious postavi kao standardno sučelje. Kad je aktivirano, lokalno sučelje će pokretati i koristiti stare formate umjesto onih koje dostavlja Invidious. Pomaže u slučajevima, kad je reprodukcija videa koje dostavlja Invidious u zemlji zabranjena/ograničena diff --git a/static/locales/hu.yaml b/static/locales/hu.yaml index 0a45206e70d2..96ed8f37ce2e 100644 --- a/static/locales/hu.yaml +++ b/static/locales/hu.yaml @@ -71,6 +71,7 @@ Search Filters: Fetching results. Please wait: 'Eredmények lekérése. Kis türelmet kérünk' Fetch more results: 'További eredmények lekérése' # Sidebar + There are no more results for this search: Nincs több találat erre a keresésre Subscriptions: # On Subscriptions Page Subscriptions: 'Feliratkozások' @@ -90,6 +91,13 @@ Most Popular: 'Legnépszerűbbek' Playlists: 'Lejátszási listák' User Playlists: Your Playlists: 'A lejátszási listáid' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: A + mentett videók üresek. Kattintson a videó sarkában található mentés gombra, hogy + itt szerepeljen + Playlist Message: Ez az oldal nem tükrözi a teljesen működő lejátszási listákat. + Csak azokat a videókat sorolja fel, amelyeket Ön elmentett vagy a kedvencek közé + helyezett. A munka befejezése után az összes itt található videó átkerül a „Kedvencek” + lejátszási listára. History: # On History Page History: 'Előzmények' @@ -125,6 +133,8 @@ Settings: (Alapértelmezés: https://invidious.snopyta.org)' Region for Trending: 'Népszerű területe' #! List countries + View all Invidious instance information: Az Invidious példány összes tájékoztatásának + megtekintése Theme Settings: Theme Settings: 'Téma beállítások' Match Top Bar with Main Color: 'Illessze a felső sávot a fő színnel' @@ -242,6 +252,7 @@ Settings: Unknown data key: 'Ismeretlen adatkulcs' How do I import my subscriptions?: 'Hogyan lehet importálni feliratkozásaimmal?' Check for Legacy Subscriptions: Örökölt feliratkozások keresése + Manage Subscriptions: Feliratkozások kezelése Advanced Settings: Advanced Settings: 'További beállítások' Enable Debug Mode (Prints data to the console): 'Hibakeresési mód engedélyezése @@ -284,6 +295,20 @@ Settings: The app needs to restart for changes to take effect. Restart and apply change?: Az alkalmazásnak újra kell indulnia, hogy a változtatások életbe lépjenek. Indítsa újra és alkalmazza a módosítást? + Proxy Settings: + City: Helység + Region: Körzet + Country: Ország + Ip: IP-cím + Your Info: Az Ön adatai + Clicking on Test Proxy will send a request to: 'A Meghatalmazás-ellenőrzés gombra + kattintva kérést küld a következő címre:' + Test Proxy: Meghatalmazás-ellenőrzés + Proxy Port Number: Meghatalmazás kikötőszáma + Proxy Host: Meghatalmazás gazdaszámítógép + Proxy Protocol: Meghatalmazás protokoll + Enable Tor / Proxy: Tor/meghatalmazás engedélyezése + Proxy Settings: Meghatalmazás beállításai About: #On About page About: 'Névjegy' diff --git a/static/locales/id.yaml b/static/locales/id.yaml index 21b0dd454a65..1926c6244f9d 100644 --- a/static/locales/id.yaml +++ b/static/locales/id.yaml @@ -70,6 +70,8 @@ Search Filters: Fetching results. Please wait: 'Mengambil hasil. Silakan tunggu' Fetch more results: 'Ambil lebih banyak hasil' # Sidebar + There are no more results for this search: Tidak ada hasil lagi untuk pencarian + ini Subscriptions: # On Subscriptions Page Subscriptions: 'Langganan' @@ -87,6 +89,8 @@ Most Popular: 'Paling Populer' Playlists: 'Daftar Putar' User Playlists: Your Playlists: 'Daftar Putar anda' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Penyimpanan + video Anda kosong. Klik tombol simpan pada pojok video untuk menyimpannya di sini History: # On History Page History: 'Riwayat' @@ -122,6 +126,7 @@ Settings: (Bawaan: https://invidious.snopyta.org)' Region for Trending: 'Wilayah untuk Sedang Tren' #! List countries + View all Invidious instance information: Lihat semua informasi situs Invidious Theme Settings: Theme Settings: 'Pengaturan Tema' Match Top Bar with Main Color: 'Samakan Bilah Atas dengan Warna Utama' diff --git a/static/locales/ja.yaml b/static/locales/ja.yaml index 7309dba76295..d64d0e35fbd3 100644 --- a/static/locales/ja.yaml +++ b/static/locales/ja.yaml @@ -62,6 +62,7 @@ Search Filters: Fetching results. Please wait: '結果の取得中。お待ちください' Fetch more results: 'もっと見る' # Sidebar + There are no more results for this search: 検索結果は、これ以上ありません Subscriptions: # On Subscriptions Page Subscriptions: '登録チャンネル' @@ -78,6 +79,8 @@ Most Popular: '人気' Playlists: '再生リスト' User Playlists: Your Playlists: 'あなたの再生リスト' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: 保存した動画はありません。一覧に表示させるには、ビデオの角にある保存ボタンをクリックする + Playlist Message: このページは、完全に動作するプレイリストではありません。保存またはお気に入りと設定した動画のみが表示されます。操作が完了すると、現在ここにあるすべての動画は「お気に入り」のプレイリストに移動します。 History: # On History Page History: '履歴' @@ -112,6 +115,7 @@ Settings: #! List countries Check for Latest Blog Posts: 新着ブログの確認 Check for Updates: 最新版の確認 + View all Invidious instance information: すべての Invidious インスタンス情報の表示 Theme Settings: Theme Settings: 'テーマの設定' Match Top Bar with Main Color: '上部バーをメイン カラーと同じにする' @@ -250,6 +254,7 @@ Settings: Data Settings: データ設定 One or more subscriptions were unable to be imported: いくつかの登録チャンネルはインポートできませんでした Check for Legacy Subscriptions: 旧型式の登録チャンネルの確認 + Manage Subscriptions: 登録チャンネルの管理 Distraction Free Settings: Hide Live Chat: ライブチャットの非表示 Hide Popular Videos: 人気動画の非表示 @@ -262,6 +267,20 @@ Settings: Distraction Free Settings: 集中モード Hide Active Subscriptions: 使用中の登録チャンネルの非表示 The app needs to restart for changes to take effect. Restart and apply change?: 変更の反映には、アプリの再起動が必要です。再起動して変更を適用しますか? + Proxy Settings: + Error getting network information. Is your proxy configured properly?: ネットワーク情報の取得中にエラーが発生しました。プロキシーを正しく設定してますか? + City: 都市名 + Region: 地域 + Country: 国名 + Ip: Ip + Your Info: あなたの情報 + Test Proxy: テスト プロキシー + Clicking on Test Proxy will send a request to: テスト プロキシーをクリックして、送信するリクエスト先は + Proxy Port Number: プロキシーのポート番号 + Proxy Host: プロキシーのホスト + Proxy Protocol: プロキシーのプロトコル + Enable Tor / Proxy: Tor / プロキシーの有効化 + Proxy Settings: プロキシーの設定 About: #On About page About: 'About' @@ -290,6 +309,30 @@ About: Latest FreeTube News: 'FreeTube 新着情報' #On Channel Page + Donate: 寄付 + FreeTube is made possible by: FreeTube が実現できているのは + these people and projects: これらの人々とプロジェクト + Credits: クレジット + Translate: 翻訳 + room rules: ルームの規則 + Please read the: ご覧ください + Chat on Matrix: Matrix でチャット + Mastodon: Mastodon + Email: メール アドレス + Blog: ブログ + Website: WEB サイト + Please check for duplicates before posting: 投稿する前に重複を確認してください + GitHub issues: GitHub の課題ツール + Report a problem: 問題の報告 + FAQ: よくある質問 + FreeTube Wiki: FreeTube の Wiki + Help: ヘルプ + GitHub releases: GitHub リリース + Downloads / Changelog: ダウンロード / 変更ログ + View License: ライセンスの表示 + Licensed under the AGPLv3: AGPLv3 の下でライセンス供与 + Source code: ソースコード + Beta: ベータ Channel: Subscriber: '人の登録者' Subscribers: '人の登録者' @@ -399,6 +442,9 @@ Video: Open Channel in YouTube: YouTube でチャンネル表示 Started streaming on: ライブ配信の開始 Streamed on: ライブ配信 + Video has been removed from your saved list: 動画を保存一覧から削除しました + Video has been saved: ビデオを保存しました + Save Video: 動画の保存 Videos: #& Sort By Sort By: diff --git a/static/locales/ko.yaml b/static/locales/ko.yaml index 6b4ddb4ff465..a4551d2cd704 100644 --- a/static/locales/ko.yaml +++ b/static/locales/ko.yaml @@ -74,20 +74,22 @@ Subscriptions: Subscriptions: '구독' Latest Subscriptions: '최근 구독' This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: '이 - 프로필에서 너무 많이 구독했습니다. RSS가 제한을 피할 수 있게 강제합니다' + 프로필에서 최대 구독 제한을 초과 하였습니다. RSS 피드 구독 수신으로 전환 합니다.' 'Your Subscription list is currently empty. Start adding subscriptions to see them here.': '구독한 - 채널이 없습니다. 여기서 채널을 보려면 구독을 추가하세요.' - 'Getting Subscriptions. Please wait.': '구독중입니다. 잠시만 기다려주세요.' - Refresh Subscriptions: '구독 새로고침' + 채널이 없습니다. 구독 피드를 보려면 원하시는 채널을 구독하세요' + 'Getting Subscriptions. Please wait.': '구독 목록을 가져오는 중입니다. 잠시만 기다려 주세요.' + Refresh Subscriptions: '구독 피드 새로 고침' Load More Videos: '더 많은 동영상 불러오기' -Trending: '트렌드' +Trending: '트렌딩' Most Popular: '인기 동영상' -Playlists: '플레이리스트' +Playlists: '재생 목록' User Playlists: - Your Playlists: '나의 플레이리스트' + Your Playlists: '나의 재생 목록' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: 재생 + 목록이 없습니다. 영상의 오른쪽 아래에 있는 저장 버튼을 사용하여 재생 목록에 영상을 추가하세요 History: # On History Page - History: '기록' + History: '재생 기록' Watch History: '시청 기록' Your history list is currently empty.: '기록이 없습니다.' Settings: diff --git a/static/locales/ku.yaml b/static/locales/ku.yaml index b94205f07cda..a5f92db2ecc1 100644 --- a/static/locales/ku.yaml +++ b/static/locales/ku.yaml @@ -1,5 +1,5 @@ # Put the name of your locale in the same language -Locale Name: 'کوردی' +Locale Name: 'kur-ckb' FreeTube: 'فریتیوب' # Currently on Subscriptions, Playlists, and History 'This part of the app is not ready yet. Come back later when progress has been made.': >- @@ -33,7 +33,7 @@ Forward: 'چونەپێشەوە' Version $ is now available! Click for more details: 'ڤێرژنی $ ئێستا بەردەستە! کلیک بکە بۆ زانیاری زیاتر' Download From Site: 'دایبەزێنە لە سایتەکەوە' -A new blog is now available, $. Click to view more: 'بڵۆگێکە نوێ بەردەستە، $. کلیک +A new blog is now available, $. Click to view more: 'بڵۆگێکی نوێ بەردەستە، $. کلیک بکە بۆ بینینی زیاتر' # Search Bar @@ -43,7 +43,7 @@ Search Filters: Search Filters: 'فیلتەری گەڕان' Sort By: Sort By: 'بگەڕی بە' - Most Relevant: '' + Most Relevant: 'گرنگترین' Rating: 'ڕەیتینگ' Upload Date: 'کاتی بڵاوکردنەوە' View Count: 'ژماری بینراو' @@ -80,25 +80,35 @@ Subscriptions: 'Getting Subscriptions. Please wait.': 'بەشداریکراوەکان وەردەگیرێن. تکایە چاوەڕوان بە.' Refresh Subscriptions: 'بەشداریکراوەکان تازە بکەرەوە' -Trending: '' -Most Popular: '' -Playlists: '' + Load More Videos: ڤیدیۆی زیاتر بهێنە + This profile has a large number of subscriptions. Forcing RSS to avoid rate limiting: .ئەم + پرۆفایلە ژمارەیەکی زۆری هەیە لە سەبسکریپشن. بۆ دورکەوتنەوە لە سنوور دانان (رسس) + بەکاردەهێندرێت +Trending: 'زۆر باسکراو' +Most Popular: 'بەناوبانگترین' +Playlists: 'پلەیلیست' User Playlists: - Your Playlists: '' + Your Playlists: 'پلیەلیستەکانت' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: ڤیدیۆ + سەڤکراوەکانت بەتاڵن. کلیک لە دوگمەی سەیڤ کە لە سووچی ڤیدیۆیەک بۆ ئەوەی لێرە لیستکرێت + Playlist Message: ئەم پەیجە شێوەی کۆتایی پلەیلیستەکە دەرناخات. تەنها ڤیدیۆت پیشان + دەدات کە سیڤت کردووە یان فەیڤرتت کردووە. کاتێک کارەکە تەواو بووە، گشت ئەم ڤیدیۆیانەی + لێرەدان دەبرێنە لیستی 'فەیڤرتەکان'. History: # On History Page - History: '' - Watch History: '' - Your history list is currently empty.: '' + History: 'مێژوو' + Watch History: 'لیستی سەیرکراو' + Your history list is currently empty.: 'لیستی سەیرکراوەکانت بەتاڵە.' Settings: # On Settings Page - Settings: '' + Settings: 'دەستکاریکردن' General Settings: - General Settings: '' - Check for Updates: '' - Check for Latest Blog Posts: '' - Fallback to Non-Preferred Backend on Failure: '' - Enable Search Suggestions: '' + General Settings: 'دەستکاریکردنی گشتی' + Check for Updates: 'بزانە تازەکاری هاتووە' + Check for Latest Blog Posts: 'چێکی تازەترین بلۆگ بکە' + Fallback to Non-Preferred Backend on Failure: 'گەڕانەوە بۆ سیستەمە ناخوازراوەکە + لەکاتی فەشەلدا' + Enable Search Suggestions: 'پێشنیارکردن بەکاربخە لەکاتی گەڕاندا' Default Landing Page: '' Locale Preference: '' Preferred API Backend: @@ -216,10 +226,11 @@ Settings: History object has insufficient data, skipping item: '' All watched history has been successfully imported: '' All watched history has been successfully exported: '' - Unable to read file: '' - Unable to write file: '' - Unknown data key: '' - How do I import my subscriptions?: '' + Unable to read file: 'ناتواندرێت فایلەکە بخوێندرێتەوە' + Unable to write file: 'ناتواندریت فایلەکە بنوسرێت' + Unknown data key: 'کلیلی داتای نەناسراو' + How do I import my subscriptions?: 'چۆن بەشدارییەکانم داخڵ بکەم؟' + Manage Subscriptions: بەشدارییەکانت رێکبخە Advanced Settings: Advanced Settings: '' Enable Debug Mode (Prints data to the console): '' @@ -242,9 +253,28 @@ Settings: #& Yes #& No + Proxy Settings: + Error getting network information. Is your proxy configured properly?: کێشە لە + وەرگرتنی زانیاری نێتۆرک. ئایە پرۆکسێکەت بە رێکوپێکی رێکخراوە؟ + City: شار + Region: ناوچە + Country: وڵات + Ip: ئەدرێسی ئەلکترۆنی + Your Info: زانیاریت + Test Proxy: تاقیکردنەوەی پرۆکسی + Clicking on Test Proxy will send a request to: کلیکردن لەسەر تێستی پرۆکسی داواکارییەک + دەنێریت بۆ + Proxy Port Number: ژمارەی پۆرتی پرۆکسی + Proxy Host: پرۆکسی بڵاوکەر + Proxy Protocol: پرۆتۆکۆڵی پڕۆکسی + Enable Tor / Proxy: تۆر/پرۆکسی بەکاربخە + Proxy Settings: گۆڕانکاری پرۆکسی + The app needs to restart for changes to take effect. Restart and apply change?: ئەم + ئەپڵیکەیشنە دەبێت دووبارە بکرێتەوە بۆ ئەوەی گۆڕانکارێکان بگانە ئەنجام. دووبارە + کردنەوە و چەسپکردنی گۆڕانکارێکان؟ About: #On About page - About: '' + About: 'دەربارە' #& About 'This software is FOSS and released under the GNU Affero General Public License v3.0.': '' @@ -264,27 +294,51 @@ About: Latest FreeTube News: '' + Donate: دۆنەیشن + these people and projects: ئەم کەسانە و پڕۆژانە + FreeTube is made possible by: فریتوب بونی هەیە بەهۆی + Translate: تەرجومە + room rules: یاسای ژوورەکە + Please read the: تکایە شتەکە بخوێنەوە + Chat on Matrix: Matrix موناقەشە کە لە + Mastodon: ماستۆدۆن + Email: نامەی ئەلکترۆنی + Blog: بلۆگ + Website: وێبسایت + Please check for duplicates before posting: تکایە چێک بکە بۆ دووبارە پێش پۆستکردن + GitHub issues: GitHub کێشاکانی + Report a problem: کێشەیەک ڕاگەیەنە + FAQ: پرسیارانەی زۆر دەکرێن + FreeTube Wiki: ویکی فریتیوب + Help: یارمەتی + GitHub releases: GitHub دەرچونەکانی + Downloads / Changelog: دابەزاندنەکان / لیستی گۆڕانکاری + View License: قەیدەکە پیشاندە + Licensed under the AGPLv3: AGPLv3 دەرکراوە لەژیر + Source code: سەرچاوەی کۆد + Beta: تاقیکارییە Profile: - Profile Select: '' - All Channels: '' - Profile Manager: '' - Create New Profile: '' - Edit Profile: '' - Color Picker: '' - Custom Color: '' - Profile Preview: '' - Create Profile: '' - Update Profile: '' - Make Default Profile: '' - Delete Profile: '' - Are you sure you want to delete this profile?: '' - All subscriptions will also be deleted.: '' - Profile could not be found: '' - Your profile name cannot be empty: '' - Profile has been created: '' - Profile has been updated: '' - Your default profile has been set to $: '' - Removed $ from your profiles: '' + Profile Select: 'پرۆفایلەکە دیاریکە' + All Channels: 'هەموو کەناڵەکان' + Profile Manager: 'ڕێخەری پڕۆفایل' + Create New Profile: 'پڕۆفایلێکی نوێ دروستبکە' + Edit Profile: 'پڕۆفایل دەستکاری بکە' + Color Picker: 'ڕەنگ هەڵبژاردەر' + Custom Color: 'رەنگی تایبەت' + Profile Preview: 'پڕۆفایل بیشاندە' + Create Profile: 'پرۆفایل دروستبکە' + Update Profile: 'پرۆفایل تازەبکەرەوە' + Make Default Profile: 'بیکە بە پڕۆفایلی ئەسایی' + Delete Profile: 'پڕۆفایلەکە بسڕەوە' + Are you sure you want to delete this profile?: 'ئایە دڵنیایت کە دەتەوێت ئەم پڕۆفایلە + بسڕیتەوە؟' + All subscriptions will also be deleted.: 'هەموو بەشداریکردنەکانیش بە هامەنشێوە دەسڕێنەوە.' + Profile could not be found: 'پڕۆفایلەکە ناتواندرێت بدۆزرێتەوە' + Your profile name cannot be empty: 'ناوی پڕۆفایلەکەت نابێت بەتاڵبێت' + Profile has been created: 'پڕۆفایلەکە دروستکرا' + Profile has been updated: 'پرۆفایلەکە تازەکرایەوە' + Your default profile has been set to $: 'پرۆفایلە ئاساییەکەت دانراوە بۆ $' + Removed $ from your profiles: 'سڕاوەتەوە لە پرۆفایلەکانت $' Your default profile has been changed to your primary profile: '' $ is now the active profile: '' Subscription List: '' diff --git a/static/locales/nl.yaml b/static/locales/nl.yaml index db3c1b3f1191..d4cf003718fb 100644 --- a/static/locales/nl.yaml +++ b/static/locales/nl.yaml @@ -83,6 +83,13 @@ Most Popular: 'Populair' Playlists: 'Afspeellijsten' User Playlists: Your Playlists: 'Uw afspeellijsten' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Je + opgeslagen video's is leeg. Klik op de video opslaan knop in de hoek van een video + om het hier in de lijst te plaatsen + Playlist Message: Deze pagina is niet reflectief van volledig functionele afspeellijst. + Er worden alleen video's weergegeven die jij hebt opgeslagen of gefavoriet. Wanneer + we klaar zijn met de ontwikkeling van deze feature zullen al deze video's worden + gemigreerd naar de 'favorieten' afspeellijst. History: # On History Page History: 'Geschiedenis' @@ -95,7 +102,7 @@ Settings: General Settings: 'Algemene instellingen' Fallback to Non-Preferred Backend on Failure: 'Val terug op een Niet-Voorkeur Backend bij falen' - Enable Search Suggestions: 'Schakel Zoek Suggesties in' + Enable Search Suggestions: 'Zoeksuggesties Inschakelen' Default Landing Page: 'Standaard Landingspagina' Locale Preference: 'Locale Voorkeur' Preferred API Backend: @@ -270,6 +277,7 @@ Settings: All watched history has been successfully imported: De bekeken geschiedenis is met succes geïmporteerd Check for Legacy Subscriptions: Controleer op Legacy Abonnementen + Manage Subscriptions: Beheer Abonnementen Distraction Free Settings: Hide Live Chat: Verberg Live Chat Hide Popular Videos: Verberg Populaire Video's @@ -284,6 +292,22 @@ Settings: The app needs to restart for changes to take effect. Restart and apply change?: De applicatie moet opnieuw opstarten om de veranderingen aan te brengen. Wilt u opnieuw opstarten? + Proxy Settings: + Error getting network information. Is your proxy configured properly?: Fout bij + het opvragen van netwerk informatie. Is uw proxy correct geconfigureerd? + City: Stad + Region: Regio + Country: Land + Ip: Ip + Your Info: Uw Informatie + Test Proxy: Test Proxy + Clicking on Test Proxy will send a request to: Door op Test Proxy te klikken zal + er een request worden verstuurd naar + Proxy Port Number: Proxy Poortnummer + Proxy Host: Proxy Host + Proxy Protocol: Proxy Protocol + Enable Tor / Proxy: Tor / Proxy Inschakelen + Proxy Settings: Proxy Instellingen About: #On About page About: 'Over' @@ -316,6 +340,31 @@ About: Latest FreeTube News: 'Laatste FreeTube nieuws' #On Channel Page + Donate: Doneer + these people and projects: deze mensen en project + FreeTube is made possible by: FreeTube is mogelijk gemaakt door + Credits: Met dank aan + Translate: Vertalen + room rules: room regels + Please read the: Lees alstublieft de + Chat on Matrix: Chat op Matrix + Mastodon: Mastodon + Email: Email + Blog: Blog + Website: Website + Please check for duplicates before posting: Controleer op duplicaten voordat u een + issue post + GitHub issues: GitHub issues + Report a problem: Rapporteer een probleem + FAQ: Veelgestelde vragen + FreeTube Wiki: FreeTube Wiki + Help: Hulp + GitHub releases: GitHub releases + Downloads / Changelog: Downloads / Changelog + View License: Bekijk Licentie + Licensed under the AGPLv3: Vrijgegeven onder de AGPLv3 licentie + Source code: Broncode + Beta: Beta Channel: Subscriber: 'Abonnee' Subscribers: 'Abonnees' @@ -433,6 +482,10 @@ Video: Open Channel in YouTube: Open Kanaal op YouTube Started streaming on: Gestart met streamen op Streamed on: Gestreamd op + Video has been removed from your saved list: Video is verwijderd uit uw opgeslagen + video's lijst + Video has been saved: Video is opgeslagen + Save Video: Video Opslaan Videos: #& Sort By Sort By: diff --git a/static/locales/pl.yaml b/static/locales/pl.yaml index a6c2b0d09104..66c82985d637 100644 --- a/static/locales/pl.yaml +++ b/static/locales/pl.yaml @@ -82,6 +82,13 @@ Most Popular: 'Popularne' Playlists: 'Playlisty' User Playlists: Your Playlists: 'Twoje playlisty' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Nie + masz zachowanych filmów. Kliknij przycisk „Zachowaj” w rogu filmu, aby został + tu wymieniony. + Playlist Message: Ta strona nie odzwierciedla w pełni działających playlist. Są + tu jedynie wymienione filmy, które zachowałeś lub oznaczyłeś jako ulubione. Kiedy + prace nad tą stroną zostaną zakończone, wszystkie filmy tu obecne zostaną przeniesione + do playlisty „Ulubione”. History: # On History Page History: 'Historia' @@ -269,7 +276,7 @@ Settings: Select Import Type: Wybierz typ importu Data Settings: Ustawienia danych One or more subscriptions were unable to be imported: Nie można było zaimportować - conajmniej jednej subskrypcji + co najmniej jednej subskrypcji Check for Legacy Subscriptions: Sprawdź subskrypcje ze starej wersji Manage Subscriptions: Zarządzaj subskrypcjami Distraction Free Settings: @@ -351,6 +358,22 @@ About: Useful Links: Przydatne linki Help: Pomoc Contact: Kontakt + these people and projects: tym ludziom i projektom + Translate: Przetłumacz + room rules: zasady pokoju + Chat on Matrix: Czat na Matrix + Mastodon: Mastodon + Please read the: Proszę przeczytać + Please check for duplicates before posting: Proszę poszukać duplikatów przed wysłaniem + GitHub issues: problemy na GitHub + Report a problem: Zgłoś problem + FreeTube Wiki: Wiki FreeTube + GitHub releases: wydania na GitHub + Downloads / Changelog: Wydania / Lista zmian + View License: Zobacz licencję + Licensed under the AGPLv3: Na licencji AGPLv3 + Source code: Kod źródłowy + FreeTube is made possible by: FreeTube powstał dzięki Channel: Subscriber: 'Subskrybent/ka' Subscribers: 'subskrybentów' @@ -469,6 +492,10 @@ Video: Open Channel in YouTube: Otwórz kanał na stronie YouTube Started streaming on: Rozpoczęto transmitowanie dnia Streamed on: Transmitowane dnia + Video has been removed from your saved list: Film został usunięty z twojej listy + zachowanych + Video has been saved: Film został zachowany + Save Video: Zachowaj film Videos: #& Sort By Sort By: diff --git a/static/locales/sk.yaml b/static/locales/sk.yaml index fc2cb5e94278..6ddb8ef901a8 100644 --- a/static/locales/sk.yaml +++ b/static/locales/sk.yaml @@ -63,6 +63,8 @@ Search Filters: Fetching results. Please wait: 'Načítavajú sa výsledky. Prosím čakajte' Fetch more results: 'Načítať viac výsledkov' # Sidebar + There are no more results for this search: Pre toto hľadanie nie sú k dispozícii + žiadne ďalšie výsledky Subscriptions: # On Subscriptions Page Subscriptions: 'Odbery' @@ -80,6 +82,11 @@ Most Popular: 'Najpopulárnejšie' Playlists: 'Zoznamy' User Playlists: Your Playlists: 'Vaše zoznamy' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Vaše + uložené videá sú prázdne. Kliknutím na tlačidlo uložiť v rohu videa ho tu zobrazíte + Playlist Message: Táto stránka neodráža plne funkčné zoznamy videí. Uvádza iba zoznam + videí, ktoré ste uložili alebo zaradili medzi obľúbené. Po dokončení práce sa + všetky videá, ktoré sa tu nachádzajú, migrujú do zoznamu „Obľúbené“. History: # On History Page History: 'História' @@ -252,6 +259,7 @@ Settings: Select Export Type: Vybrať typ exportu Select Import Type: Vybrať typ importu Data Settings: Nastavenia dát + Manage Subscriptions: Spravovať odbery Distraction Free Settings: Hide Live Chat: Skryť živý chat Hide Popular Videos: Skryť populárne videá @@ -262,6 +270,7 @@ Settings: Hide Video Likes And Dislikes: Skryť palce hore a dolu na videách Hide Video Views: Skryť počet zhliadnutí Distraction Free Settings: Nastavenia nerušenia + Hide Active Subscriptions: Skryť aktívne odbery Privacy Settings: Are you sure you want to remove all subscriptions and profiles? This cannot be undone.: Naozaj chcete odstrániť všetky odbery a profily? Toto je nenávratná akcia. @@ -279,6 +288,22 @@ Settings: Search cache has been cleared: Vyrovnávacia pamäť vyhľadávania bola vymazaná The app needs to restart for changes to take effect. Restart and apply change?: Aplikácia požaduje reštartovanie aby sa prejavili zmeny. Reštartovať a aplikovať zmeny? + Proxy Settings: + Error getting network information. Is your proxy configured properly?: Chyba pri + získavaní informácií o sieti. Je váš server proxy správne nakonfigurovaný? + City: Mesto + Region: Región + Country: Krajina + Ip: Internetový Protokol + Your Info: Informácie o Vás + Test Proxy: Vyskúšať proxy + Clicking on Test Proxy will send a request to: Kliknutím na "Vyskúšať Proxy" pošlete + žiadosť do + Proxy Port Number: Číslo portu proxy servera + Proxy Host: Proxy Hosť + Proxy Protocol: Proxy Protokol + Enable Tor / Proxy: Povoliť Tor / server Proxy + Proxy Settings: Nastavenia servera proxy About: #On About page About: 'O FreeTube' @@ -311,6 +336,31 @@ About: Latest FreeTube News: 'Najnovšie správy o FreeTube' #On Channel Page + FreeTube Wiki: Wiki FreeTube + Help: Pomoc + GitHub releases: Vydania na GitHube + Downloads / Changelog: Súbory na stiahnutie / Zoznam zmien + View License: Zobraziť licenciu + Licensed under the AGPLv3: Na základe licencie AGPLv3 + Beta: Testovacia verzia + Source code: Zdrojový kód + GitHub issues: Problémy z GitHubu + Report a problem: Nahlásiť problém + FAQ: Otázky a odpovede + Donate: Darujte + FreeTube is made possible by: FreeTube umožňujú + these people and projects: títo ľudia a projekty + Credits: Zásluhy + Translate: Preložiť + room rules: pravidlá miestností + Please read the: Prečítajte si + Chat on Matrix: Napíšte nám na Matrix-e + Mastodon: Mastodon + Email: Elektronická pošta + Blog: Blog + Website: Webstránka + Please check for duplicates before posting: Pred odoslaním prosím skontrolujte duplicitné + otázky Channel: Subscriber: 'Odberateľ' Subscribers: 'Odberateľov' @@ -341,6 +391,7 @@ Channel: Added channel to your subscriptions: Kanál bol pridaný k vašim odberom Channel has been removed from your subscriptions: Kanál bol odstránený z vašich odberov + Removed subscription from $ other channel(s): Odstránené predplatné z $ iných kanálov Video: Mark As Watched: 'Označiť ako zhliadnuté' Remove From History: 'Vymazať z histórie' @@ -352,7 +403,7 @@ Video: Copy YouTube Embedded Player Link: 'Skopírovať link na vložený prehrávač Youtube' Open in Invidious: 'Otvoriť v Invidious' Copy Invidious Link: 'Skopírovať Invidious linku' - View: '' + View: 'Pozrieť' Views: 'Zhliadnutí' # Context is "X People Watching" Watching: 'Sleduje' @@ -426,6 +477,9 @@ Video: Open Channel in Invidious: Otvoriť kanál v Invidious Copy YouTube Channel Link: Skopírovať Youtube link na kanál Open Channel in YouTube: Otvoriť kanál v Youtube + Video has been removed from your saved list: Video odstránené z uložených + Video has been saved: Video uložené + Save Video: Uložiť Video Videos: #& Sort By Sort By: diff --git a/static/locales/sv.yaml b/static/locales/sv.yaml index 9d985a3d98c4..937a9ffaeb24 100644 --- a/static/locales/sv.yaml +++ b/static/locales/sv.yaml @@ -87,6 +87,12 @@ Most Popular: 'Mest populära' Playlists: 'Spellistor' User Playlists: Your Playlists: 'Dina spellistor' + Your saved videos are empty. Click on the save button on the corner of a video to have it listed here: Dina + sparade videor är tomma. Klicka på sparknappen på hörnet av en video för att få + den listad här + Playlist Message: Den här sidan är inte reflekterande av fullt fungerande spellistor. + Den listar bara videor som du har sparat eller favorited. När arbetet är klart + kommer alla videor som för närvarande här att migreras till en spellista för 'Favoriter'. History: # On History Page History: 'Historik' @@ -237,6 +243,7 @@ Settings: Unknown data key: 'Okänd datanyckel' How do I import my subscriptions?: 'Hur importerar jag mina prenumerationer?' Check for Legacy Subscriptions: Sök efter Legacy prenumerationer + Manage Subscriptions: Hantera prenumerationer Advanced Settings: Advanced Settings: 'Avancerade inställningar' Enable Debug Mode (Prints data to the console): 'Aktivera felsökningsläge (Skriver @@ -274,8 +281,25 @@ Settings: Hide Channel Subscribers: Dölj kanalprenumeranter Hide Video Views: Dölj videovisningar Distraction Free Settings: Distraktionsfri + Hide Active Subscriptions: Dölj aktiva prenumerationer The app needs to restart for changes to take effect. Restart and apply change?: Starta om FreeTube nu för att tillämpa ändringarna? + Proxy Settings: + Error getting network information. Is your proxy configured properly?: Fel uppstod + när nätverksinformationen skulle komma. Är din proxy konfigurerad på rätt sätt? + City: Stad + Region: Område + Country: Land + Ip: IP + Your Info: Din info + Test Proxy: Testa proxy + Clicking on Test Proxy will send a request to: Om du klickar på TestProxy skickas + en begäran till + Proxy Port Number: Proxy-portnummer + Proxy Host: Proxy Host + Proxy Protocol: Proxy-protokoll + Enable Tor / Proxy: Aktivera Tor / Proxy + Proxy Settings: Proxy About: #On About page About: 'Om' @@ -307,6 +331,31 @@ About: Latest FreeTube News: 'Senaste FreeTube Nyheter' + Donate: Donera + these people and projects: dessa människor och projekt + FreeTube is made possible by: FreeTube möjliggörs av + Credits: Krediter + Translate: Översätta + room rules: rumsregler + Please read the: Vänligen läs + Chat on Matrix: Chatta på Matrix + Mastodon: Mastodon + Email: E-post + Blog: Blogg + Website: Webbsida + Please check for duplicates before posting: Vänligen kontrollera om dubbletter innan + du postar + GitHub issues: GitHub-problem + Report a problem: Rapportera ett problem + FAQ: Frågor och svar + FreeTube Wiki: FreeTube Wiki + Help: Hjälp + GitHub releases: GitHub releases + Downloads / Changelog: Nedladdningar / Changelog + View License: Visa licens + Licensed under the AGPLv3: Licensierad under AGPLv3 + Source code: källkod + Beta: Beta Profile: Profile Select: 'Välj profil' All Channels: 'Alla kanaler' @@ -463,6 +512,12 @@ Video: Open Channel in Invidious: Öppna kanalen i Invidious Copy YouTube Channel Link: Kopiera YouTube-kanallänk Open Channel in YouTube: Öppna kanal i YouTube + Started streaming on: Började streamas på + Streamed on: Strömmas på + Video has been removed from your saved list: Videon har tagits bort från din sparade + lista + Video has been saved: Videon har sparats + Save Video: Spara video Videos: #& Sort By Sort By: diff --git a/static/locales/tr.yaml b/static/locales/tr.yaml index 89460c702525..1a1e1e8b9de5 100644 --- a/static/locales/tr.yaml +++ b/static/locales/tr.yaml @@ -70,6 +70,7 @@ Search Filters: Fetching results. Please wait: 'Sonuçlar yükleniyor. Lütfen bekleyin' Fetch more results: 'Daha fazla sonuç yükle' # Sidebar + There are no more results for this search: Bu arama için başka sonuç yok Subscriptions: # On Subscriptions Page Subscriptions: 'Abonelikler' @@ -124,10 +125,11 @@ Settings: Beginning: 'Başlangıç' Middle: 'Orta' End: 'Bitiş' - 'Invidious Instance (Default is https://invidious.snopyta.org)': 'Invidious Oluşumu + 'Invidious Instance (Default is https://invidious.snopyta.org)': 'Invidious Örneği (Varsayılan https://invidious.snopyta.org)' - Region for Trending: 'Trendler İçin Ülke Tercihi' + Region for Trending: 'Trendler İçin Bölge Tercihi' #! List countries + View all Invidious instance information: Tüm Invidious örnek bilgilerini görüntüle Theme Settings: Theme Settings: 'Tema Ayarları' Match Top Bar with Main Color: 'Üst Barı Ana Renk ile Eşleştir' @@ -135,9 +137,9 @@ Settings: Base Theme: 'Uygulama Teması' Black: 'Siyah' Dark: 'Koyu' - Light: 'Aydınlık' + Light: 'Açık' Main Color Theme: - Main Color Theme: 'Ana Renk' + Main Color Theme: 'Ana Renk Teması' Red: 'Kırmızı' Pink: 'Pembe' Purple: 'Mor' @@ -154,7 +156,7 @@ Settings: Amber: 'Kehribar Rengi' Orange: 'Turuncu' Deep Orange: 'Koyu Turuncu' - Secondary Color Theme: 'İkincil Renk' + Secondary Color Theme: 'İkincil Renk Teması' #* Main Color Theme UI Scale: Kullanıcı Arayüzü Ölçeği Expand Side Bar by Default: Yan Çubuğu Öntanımlı Olarak Genişlet @@ -173,7 +175,7 @@ Settings: Default Playback Rate: 'Varsayılan Oynatma Hızı' Default Video Format: Default Video Format: 'Varsayılan Video Biçimi' - Dash Formats: 'Dash Biçimi' + Dash Formats: 'Dash Biçimleri' Legacy Formats: 'Eski Biçimler' Audio Formats: 'Ses Biçimi' Default Quality: @@ -352,6 +354,23 @@ About: Useful Links: Faydalı Bağlantılar Help: Yardım Contact: İletişim + these people and projects: bu kişiler ve projeler + FreeTube is made possible by: FreeTube'e katkıda bulunanlar + Translate: Çevir + room rules: oda kuralları + Please read the: Lütfen okuyun + Chat on Matrix: Matrix'te sohbet et + Mastodon: Mastodon + Please check for duplicates before posting: Lütfen göndermeden önce yinelenmeleri + denetleyin + GitHub issues: GitHub sorunları + Report a problem: Sorun bildir + FreeTube Wiki: FreeTube Wiki + GitHub releases: GitHub yayınları + Downloads / Changelog: İndirmeler / Değişiklikler + View License: Lisansı Görüntüle + Licensed under the AGPLv3: AGPLv3 altında lisanslanmıştır + Source code: Kaynak kodları Profile: Profile Select: 'Profil Seçimi' All Channels: 'Tüm Kanallar' @@ -625,9 +644,9 @@ Tooltips: tarafından döndürülen videolar ülke kısıtlamaları nedeniyle oynatılmadığında yardımcı olur General Settings: - Invidious Instance: FreeTube'un API çağrıları için bağlanacağı Invidious sunucusu. - Aralarından seçim yapabileceğiniz herkese açık sunucuların bir listesini görmek - için geçerli sunucuyu temizleyin + Invidious Instance: FreeTube'un API çağrıları için bağlanacağı Invidious örneği. + Aralarından seçim yapabileceğiniz herkese açık örneklerin bir listesini görmek + için geçerli örneği temizleyin Thumbnail Preference: FreeTube'daki tüm küçük resimler, öntanımlı küçük resim yerine videonun bir karesiyle değiştirilecektir Fallback to Non-Preferred Backend on Failure: Etkinleştirildiğinde, tercih ettiğiniz diff --git a/static/locales/zh-TW.yaml b/static/locales/zh-TW.yaml index 4367de794544..bceb1a834dba 100644 --- a/static/locales/zh-TW.yaml +++ b/static/locales/zh-TW.yaml @@ -62,6 +62,7 @@ Search Filters: Fetching results. Please wait: '擷取結果中。請稍候' Fetch more results: '擷取更多結果' # Sidebar + There are no more results for this search: 此搜尋無更多結果 Subscriptions: # On Subscriptions Page Subscriptions: '訂閱' @@ -319,6 +320,22 @@ About: Useful Links: 有用連結 Help: 說明 Contact: 聯絡 + these people and projects: 這些人與專案 + FreeTube is made possible by: FreeTube 被做出來是因為 + Translate: 翻譯 + room rules: 聊天室規則 + Please read the: 請閱讀 + Chat on Matrix: 在 Matrix 上聊天 + Mastodon: Mastodon + Please check for duplicates before posting: 張貼前請檢查有無重複 + GitHub issues: GitHub 議題 + Report a problem: 回報問題 + FreeTube Wiki: FreeTube Wiki + GitHub releases: GitHub 版本 + Downloads / Changelog: 下載 / 變更紀錄 + View License: 檢視授權條款 + Licensed under the AGPLv3: 以 AGPLv3 授權 + Source code: 原始碼 Channel: Subscriber: '訂閱者' Subscribers: '訂閱者'